88import java .io .IOException ;
99import java .time .Duration ;
1010import java .util .Date ;
11+ import java .util .HashMap ;
1112
1213import static org .hamcrest .CoreMatchers .equalTo ;
1314import static org .hamcrest .CoreMatchers .sameInstance ;
@@ -169,11 +170,13 @@ public void testGitHubRateLimit() throws Exception {
169170 // Verify the requesting a search url updates the search rate limit
170171 assertThat (gitHub .lastRateLimit ().getSearch ().getRemaining (), equalTo (30 ));
171172
172- Object searchResult = gitHub .createRequest ()
173+ HashMap < String , Object > searchResult = ( HashMap < String , Object >) gitHub .createRequest ()
173174 .rateLimit (RateLimitTarget .SEARCH )
174175 .setRawUrlPath (mockGitHub .apiServer ().baseUrl ()
175- + "/search/repositories?q=tetris+language:assembly&sort=stars&order=desc" )
176- .fetch (Object .class );
176+ + "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc" )
177+ .fetch (HashMap .class );
178+
179+ assertThat (searchResult .get ("total_count" ), equalTo (1918 ));
177180
178181 assertThat (mockGitHub .getRequestCount (), equalTo (6 ));
179182
@@ -182,6 +185,21 @@ public void testGitHubRateLimit() throws Exception {
182185 assertThat (gitHub .lastRateLimit ().getSearch (), not (sameInstance (headerRateLimit .getSearch ())));
183186 assertThat (gitHub .lastRateLimit ().getSearch ().getRemaining (), equalTo (29 ));
184187
188+ PagedSearchIterable <GHRepository > searchResult2 = gitHub .searchRepositories ()
189+ .q ("tetris" )
190+ .language ("assembly" )
191+ .sort (GHRepositorySearchBuilder .Sort .STARS )
192+ .order (GHDirection .DESC )
193+ .list ();
194+
195+ assertThat (searchResult2 .getTotalCount (), equalTo (1918 ));
196+
197+ assertThat (mockGitHub .getRequestCount (), equalTo (7 ));
198+
199+ assertThat (gitHub .lastRateLimit (), not (sameInstance (headerRateLimit )));
200+ assertThat (gitHub .lastRateLimit ().getCore (), sameInstance (headerRateLimit .getCore ()));
201+ assertThat (gitHub .lastRateLimit ().getSearch (), not (sameInstance (headerRateLimit .getSearch ())));
202+ assertThat (gitHub .lastRateLimit ().getSearch ().getRemaining (), equalTo (28 ));
185203 }
186204
187205 private void verifyRateLimitValues (GHRateLimit previousLimit , int remaining ) {
@@ -300,6 +318,7 @@ public void testGitHubEnterpriseDoesNotHaveRateLimit() throws Exception {
300318 // ratelimit() tries not to make additional requests, uses queried rate limit since header not available
301319 Thread .sleep (1500 );
302320 assertThat (gitHub .rateLimit (), sameInstance (rateLimit ));
321+ assertThat (mockGitHub .getRequestCount (), equalTo (4 ));
303322
304323 // -------------------------------------------------------------
305324 // Some versions of GHE include header rate limit information, some do not
@@ -353,11 +372,49 @@ public void testGitHubEnterpriseDoesNotHaveRateLimit() throws Exception {
353372 // getRateLimit() uses headerRateLimit if /rate_limit returns a 404
354373 // and headerRateLimit is available and not expired
355374 assertThat (rateLimit , sameInstance (gitHub .lastRateLimit ()));
375+ headerRateLimit = rateLimit ;
356376
357377 // ratelimit() should prefer headerRateLimit when getRateLimit fails and headerRateLimit is not expired
358378 assertThat (gitHub .rateLimit (), sameInstance (rateLimit ));
359379
360380 assertThat (mockGitHub .getRequestCount (), equalTo (6 ));
381+
382+ // Verify the requesting a search url updates the search rate limit
383+ // Core rate limit record should not change while search is updated.
384+ assertThat (gitHub .lastRateLimit ().getSearch (), instanceOf (GHRateLimit .UnknownLimitRecord .class ));
385+ assertThat (gitHub .lastRateLimit ().getSearch ().isExpired (), equalTo (true ));
386+
387+ HashMap <String , Object > searchResult = (HashMap <String , Object >) gitHub .createRequest ()
388+ .rateLimit (RateLimitTarget .SEARCH )
389+ .setRawUrlPath (mockGitHub .apiServer ().baseUrl ()
390+ + "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc" )
391+ .fetch (Object .class );
392+
393+ assertThat (searchResult .get ("total_count" ), equalTo (1918 ));
394+
395+ assertThat (mockGitHub .getRequestCount (), equalTo (7 ));
396+
397+ assertThat (gitHub .lastRateLimit (), not (sameInstance (headerRateLimit )));
398+ assertThat (gitHub .lastRateLimit ().getCore (), sameInstance (headerRateLimit .getCore ()));
399+ assertThat (gitHub .lastRateLimit ().getSearch (), not (sameInstance (headerRateLimit .getSearch ())));
400+ assertThat (gitHub .lastRateLimit ().getSearch ().getRemaining (), equalTo (29 ));
401+
402+ PagedSearchIterable <GHRepository > searchResult2 = gitHub .searchRepositories ()
403+ .q ("tetris" )
404+ .language ("assembly" )
405+ .sort (GHRepositorySearchBuilder .Sort .STARS )
406+ .order (GHDirection .DESC )
407+ .list ();
408+
409+ assertThat (searchResult2 .getTotalCount (), equalTo (1918 ));
410+
411+ assertThat (mockGitHub .getRequestCount (), equalTo (8 ));
412+
413+ assertThat (gitHub .lastRateLimit (), not (sameInstance (headerRateLimit )));
414+ assertThat (gitHub .lastRateLimit ().getCore (), sameInstance (headerRateLimit .getCore ()));
415+ assertThat (gitHub .lastRateLimit ().getSearch (), not (sameInstance (headerRateLimit .getSearch ())));
416+ assertThat (gitHub .lastRateLimit ().getSearch ().getRemaining (), equalTo (28 ));
417+
361418 }
362419
363420 @ Test
0 commit comments