@@ -1182,7 +1182,9 @@ func TestDo_rateLimit(t *testing.T) {
1182
1182
mux .HandleFunc ("/" , func (w http.ResponseWriter , r * http.Request ) {
1183
1183
w .Header ().Set (headerRateLimit , "60" )
1184
1184
w .Header ().Set (headerRateRemaining , "59" )
1185
+ w .Header ().Set (headerRateUsed , "1" )
1185
1186
w .Header ().Set (headerRateReset , "1372700873" )
1187
+ w .Header ().Set (headerRateResource , "core" )
1186
1188
})
1187
1189
1188
1190
req , _ := client .NewRequest ("GET" , "." , nil )
@@ -1197,10 +1199,16 @@ func TestDo_rateLimit(t *testing.T) {
1197
1199
if got , want := resp .Rate .Remaining , 59 ; got != want {
1198
1200
t .Errorf ("Client rate remaining = %v, want %v" , got , want )
1199
1201
}
1202
+ if got , want := resp .Rate .Used , 1 ; got != want {
1203
+ t .Errorf ("Client rate used = %v, want %v" , got , want )
1204
+ }
1200
1205
reset := time .Date (2013 , time .July , 1 , 17 , 47 , 53 , 0 , time .UTC )
1201
1206
if ! resp .Rate .Reset .UTC ().Equal (reset ) {
1202
1207
t .Errorf ("Client rate reset = %v, want %v" , resp .Rate .Reset .UTC (), reset )
1203
1208
}
1209
+ if got , want := resp .Rate .Resource , "core" ; got != want {
1210
+ t .Errorf ("Client rate resource = %v, want %v" , got , want )
1211
+ }
1204
1212
}
1205
1213
1206
1214
func TestDo_rateLimitCategory (t * testing.T ) {
@@ -1288,7 +1296,9 @@ func TestDo_rateLimit_errorResponse(t *testing.T) {
1288
1296
mux .HandleFunc ("/" , func (w http.ResponseWriter , r * http.Request ) {
1289
1297
w .Header ().Set (headerRateLimit , "60" )
1290
1298
w .Header ().Set (headerRateRemaining , "59" )
1299
+ w .Header ().Set (headerRateUsed , "1" )
1291
1300
w .Header ().Set (headerRateReset , "1372700873" )
1301
+ w .Header ().Set (headerRateResource , "core" )
1292
1302
http .Error (w , "Bad Request" , 400 )
1293
1303
})
1294
1304
@@ -1307,10 +1317,16 @@ func TestDo_rateLimit_errorResponse(t *testing.T) {
1307
1317
if got , want := resp .Rate .Remaining , 59 ; got != want {
1308
1318
t .Errorf ("Client rate remaining = %v, want %v" , got , want )
1309
1319
}
1320
+ if got , want := resp .Rate .Used , 1 ; got != want {
1321
+ t .Errorf ("Client rate used = %v, want %v" , got , want )
1322
+ }
1310
1323
reset := time .Date (2013 , time .July , 1 , 17 , 47 , 53 , 0 , time .UTC )
1311
1324
if ! resp .Rate .Reset .UTC ().Equal (reset ) {
1312
1325
t .Errorf ("Client rate reset = %v, want %v" , resp .Rate .Reset , reset )
1313
1326
}
1327
+ if got , want := resp .Rate .Resource , "core" ; got != want {
1328
+ t .Errorf ("Client rate resource = %v, want %v" , got , want )
1329
+ }
1314
1330
}
1315
1331
1316
1332
// Ensure *RateLimitError is returned when API rate limit is exceeded.
@@ -1321,7 +1337,9 @@ func TestDo_rateLimit_rateLimitError(t *testing.T) {
1321
1337
mux .HandleFunc ("/" , func (w http.ResponseWriter , r * http.Request ) {
1322
1338
w .Header ().Set (headerRateLimit , "60" )
1323
1339
w .Header ().Set (headerRateRemaining , "0" )
1340
+ w .Header ().Set (headerRateUsed , "60" )
1324
1341
w .Header ().Set (headerRateReset , "1372700873" )
1342
+ w .Header ().Set (headerRateResource , "core" )
1325
1343
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1326
1344
w .WriteHeader (http .StatusForbidden )
1327
1345
fmt .Fprintln (w , `{
@@ -1347,10 +1365,16 @@ func TestDo_rateLimit_rateLimitError(t *testing.T) {
1347
1365
if got , want := rateLimitErr .Rate .Remaining , 0 ; got != want {
1348
1366
t .Errorf ("rateLimitErr rate remaining = %v, want %v" , got , want )
1349
1367
}
1368
+ if got , want := rateLimitErr .Rate .Used , 60 ; got != want {
1369
+ t .Errorf ("rateLimitErr rate used = %v, want %v" , got , want )
1370
+ }
1350
1371
reset := time .Date (2013 , time .July , 1 , 17 , 47 , 53 , 0 , time .UTC )
1351
1372
if ! rateLimitErr .Rate .Reset .UTC ().Equal (reset ) {
1352
1373
t .Errorf ("rateLimitErr rate reset = %v, want %v" , rateLimitErr .Rate .Reset .UTC (), reset )
1353
1374
}
1375
+ if got , want := rateLimitErr .Rate .Resource , "core" ; got != want {
1376
+ t .Errorf ("rateLimitErr rate resource = %v, want %v" , got , want )
1377
+ }
1354
1378
}
1355
1379
1356
1380
// Ensure a network call is not made when it's known that API rate limit is still exceeded.
@@ -1363,7 +1387,9 @@ func TestDo_rateLimit_noNetworkCall(t *testing.T) {
1363
1387
mux .HandleFunc ("/first" , func (w http.ResponseWriter , r * http.Request ) {
1364
1388
w .Header ().Set (headerRateLimit , "60" )
1365
1389
w .Header ().Set (headerRateRemaining , "0" )
1390
+ w .Header ().Set (headerRateUsed , "60" )
1366
1391
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Unix ()))
1392
+ w .Header ().Set (headerRateResource , "core" )
1367
1393
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1368
1394
w .WriteHeader (http .StatusForbidden )
1369
1395
fmt .Fprintln (w , `{
@@ -1406,9 +1432,15 @@ func TestDo_rateLimit_noNetworkCall(t *testing.T) {
1406
1432
if got , want := rateLimitErr .Rate .Remaining , 0 ; got != want {
1407
1433
t .Errorf ("rateLimitErr rate remaining = %v, want %v" , got , want )
1408
1434
}
1435
+ if got , want := rateLimitErr .Rate .Used , 60 ; got != want {
1436
+ t .Errorf ("rateLimitErr rate used = %v, want %v" , got , want )
1437
+ }
1409
1438
if ! rateLimitErr .Rate .Reset .UTC ().Equal (reset ) {
1410
1439
t .Errorf ("rateLimitErr rate reset = %v, want %v" , rateLimitErr .Rate .Reset .UTC (), reset )
1411
1440
}
1441
+ if got , want := rateLimitErr .Rate .Resource , "core" ; got != want {
1442
+ t .Errorf ("rateLimitErr rate resource = %v, want %v" , got , want )
1443
+ }
1412
1444
}
1413
1445
1414
1446
// Ignore rate limit headers if the response was served from cache.
@@ -1423,7 +1455,9 @@ func TestDo_rateLimit_ignoredFromCache(t *testing.T) {
1423
1455
w .Header ().Set ("X-From-Cache" , "1" )
1424
1456
w .Header ().Set (headerRateLimit , "60" )
1425
1457
w .Header ().Set (headerRateRemaining , "0" )
1458
+ w .Header ().Set (headerRateUsed , "60" )
1426
1459
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Unix ()))
1460
+ w .Header ().Set (headerRateResource , "core" )
1427
1461
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1428
1462
w .WriteHeader (http .StatusForbidden )
1429
1463
fmt .Fprintln (w , `{
@@ -1470,7 +1504,9 @@ func TestDo_rateLimit_sleepUntilResponseResetLimit(t *testing.T) {
1470
1504
firstRequest = false
1471
1505
w .Header ().Set (headerRateLimit , "60" )
1472
1506
w .Header ().Set (headerRateRemaining , "0" )
1507
+ w .Header ().Set (headerRateUsed , "60" )
1473
1508
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Unix ()))
1509
+ w .Header ().Set (headerRateResource , "core" )
1474
1510
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1475
1511
w .WriteHeader (http .StatusForbidden )
1476
1512
fmt .Fprintln (w , `{
@@ -1481,7 +1517,9 @@ func TestDo_rateLimit_sleepUntilResponseResetLimit(t *testing.T) {
1481
1517
}
1482
1518
w .Header ().Set (headerRateLimit , "5000" )
1483
1519
w .Header ().Set (headerRateRemaining , "5000" )
1520
+ w .Header ().Set (headerRateUsed , "0" )
1484
1521
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Add (time .Hour ).Unix ()))
1522
+ w .Header ().Set (headerRateResource , "core" )
1485
1523
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1486
1524
w .WriteHeader (http .StatusOK )
1487
1525
fmt .Fprintln (w , `{}` )
@@ -1510,7 +1548,9 @@ func TestDo_rateLimit_sleepUntilResponseResetLimitRetryOnce(t *testing.T) {
1510
1548
requestCount ++
1511
1549
w .Header ().Set (headerRateLimit , "60" )
1512
1550
w .Header ().Set (headerRateRemaining , "0" )
1551
+ w .Header ().Set (headerRateUsed , "60" )
1513
1552
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Unix ()))
1553
+ w .Header ().Set (headerRateResource , "core" )
1514
1554
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1515
1555
w .WriteHeader (http .StatusForbidden )
1516
1556
fmt .Fprintln (w , `{
@@ -1542,7 +1582,9 @@ func TestDo_rateLimit_sleepUntilClientResetLimit(t *testing.T) {
1542
1582
requestCount ++
1543
1583
w .Header ().Set (headerRateLimit , "5000" )
1544
1584
w .Header ().Set (headerRateRemaining , "5000" )
1585
+ w .Header ().Set (headerRateUsed , "0" )
1545
1586
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Add (time .Hour ).Unix ()))
1587
+ w .Header ().Set (headerRateResource , "core" )
1546
1588
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1547
1589
w .WriteHeader (http .StatusOK )
1548
1590
fmt .Fprintln (w , `{}` )
@@ -1573,7 +1615,9 @@ func TestDo_rateLimit_abortSleepContextCancelled(t *testing.T) {
1573
1615
requestCount ++
1574
1616
w .Header ().Set (headerRateLimit , "60" )
1575
1617
w .Header ().Set (headerRateRemaining , "0" )
1618
+ w .Header ().Set (headerRateUsed , "60" )
1576
1619
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Unix ()))
1620
+ w .Header ().Set (headerRateResource , "core" )
1577
1621
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1578
1622
w .WriteHeader (http .StatusForbidden )
1579
1623
fmt .Fprintln (w , `{
@@ -1606,7 +1650,9 @@ func TestDo_rateLimit_abortSleepContextCancelledClientLimit(t *testing.T) {
1606
1650
requestCount ++
1607
1651
w .Header ().Set (headerRateLimit , "5000" )
1608
1652
w .Header ().Set (headerRateRemaining , "5000" )
1653
+ w .Header ().Set (headerRateUsed , "0" )
1609
1654
w .Header ().Set (headerRateReset , fmt .Sprint (reset .Add (time .Hour ).Unix ()))
1655
+ w .Header ().Set (headerRateResource , "core" )
1610
1656
w .Header ().Set ("Content-Type" , "application/json; charset=utf-8" )
1611
1657
w .WriteHeader (http .StatusOK )
1612
1658
fmt .Fprintln (w , `{}` )
@@ -1926,7 +1972,9 @@ func TestCheckResponse_RateLimit(t *testing.T) {
1926
1972
}
1927
1973
res .Header .Set (headerRateLimit , "60" )
1928
1974
res .Header .Set (headerRateRemaining , "0" )
1975
+ res .Header .Set (headerRateUsed , "1" )
1929
1976
res .Header .Set (headerRateReset , "243424" )
1977
+ res .Header .Set (headerRateResource , "core" )
1930
1978
1931
1979
err := CheckResponse (res ).(* RateLimitError )
1932
1980
0 commit comments