diff options
author | Wojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com> | 2023-07-12 14:56:33 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-07-18 20:03:21 +0000 |
commit | 5ad57b562df44def539788d25d98e4cb0616ccc7 (patch) | |
tree | 2e9711b97a8b2213b3a9bb85c005bac6c0bddf26 /server/sonar-alm-client/src/test/java | |
parent | 91090d511b75c9336e9102edffd7e9d7dd36a090 (diff) | |
download | sonarqube-5ad57b562df44def539788d25d98e4cb0616ccc7.tar.gz sonarqube-5ad57b562df44def539788d25d98e4cb0616ccc7.zip |
SONAR-19875 Make direct calls to GitHub to fetch repository team permissions
Diffstat (limited to 'server/sonar-alm-client/src/test/java')
2 files changed, 112 insertions, 28 deletions
diff --git a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java index 2c5e4a4726b..14ab8ce0654 100644 --- a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java +++ b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java @@ -31,6 +31,7 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; +import org.sonar.alm.client.github.GithubApplicationHttpClient.RateLimit; import org.sonar.alm.client.github.config.GithubAppConfiguration; import org.sonar.alm.client.github.config.GithubAppInstallation; import org.sonar.alm.client.github.security.AccessToken; @@ -54,39 +55,42 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.sonar.alm.client.github.GithubApplicationHttpClient.GetResponse; @RunWith(DataProviderRunner.class) public class GithubApplicationClientImplTest { private static final String APP_JWT_TOKEN = "APP_TOKEN_JWT"; private static final String PAYLOAD_2_ORGS = """ - [ - { - "id": 1, - "account": { - "login": "org1", - "type": "Organization" - }, - "target_type": "Organization", - "permissions": { - "members": "read", - "metadata": "read" - }, - "suspended_at": "2023-05-30T08:40:55Z" + [ + { + "id": 1, + "account": { + "login": "org1", + "type": "Organization" }, - { - "id": 2, - "account": { - "login": "org2", - "type": "Organization" - }, - "target_type": "Organization", - "permissions": { - "members": "read", - "metadata": "read" - } + "target_type": "Organization", + "permissions": { + "members": "read", + "metadata": "read" + }, + "suspended_at": "2023-05-30T08:40:55Z" + }, + { + "id": 2, + "account": { + "login": "org2", + "type": "Organization" + }, + "target_type": "Organization", + "permissions": { + "members": "read", + "metadata": "read" } - ]"""; + } + ]"""; + + private static final RateLimit RATE_LIMIT = new RateLimit(Integer.MAX_VALUE, Integer.MAX_VALUE, 0L); @ClassRule public static LogTester logTester = new LogTester().setLevel(LoggerLevel.WARN); @@ -713,7 +717,7 @@ public class GithubApplicationClientImplTest { + "}"; when(httpClient.get(appUrl, accessToken, String.format("/search/repositories?q=%s&page=%s&per_page=%s", "world+fork:true+org:github", 1, 100))) - .thenReturn(new GithubApplicationHttpClient.GetResponse() { + .thenReturn(new GetResponse() { @Override public Optional<String> getNextEndPoint() { return Optional.empty(); @@ -728,6 +732,11 @@ public class GithubApplicationClientImplTest { public Optional<String> getContent() { return Optional.of(responseJson); } + + @Override + public RateLimit getRateLimit() { + return RATE_LIMIT; + } }); GithubApplicationClient.Repositories repositories = underTest.listRepositories(appUrl, accessToken, "github", "world", 1, 100); @@ -905,7 +914,7 @@ public class GithubApplicationClientImplTest { + "}"; when(httpClient.get(appUrl, accessToken, "/repos/octocat/Hello-World")) - .thenReturn(new GithubApplicationHttpClient.GetResponse() { + .thenReturn(new GetResponse() { @Override public Optional<String> getNextEndPoint() { return Optional.empty(); @@ -920,6 +929,11 @@ public class GithubApplicationClientImplTest { public Optional<String> getContent() { return Optional.of(responseJson); } + + @Override + public RateLimit getRateLimit() { + return RATE_LIMIT; + } }); Optional<GithubApplicationClient.Repository> repository = underTest.getRepository(appUrl, accessToken, "octocat", "octocat/Hello-World"); @@ -954,7 +968,7 @@ public class GithubApplicationClientImplTest { } } - private static class Response implements GithubApplicationHttpClient.GetResponse { + private static class Response implements GetResponse { private final int code; private final String content; private final String nextEndPoint; @@ -980,6 +994,11 @@ public class GithubApplicationClientImplTest { } @Override + public RateLimit getRateLimit() { + return RATE_LIMIT; + } + + @Override public Optional<String> getNextEndPoint() { return Optional.ofNullable(nextEndPoint); } diff --git a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationHttpClientImplTest.java b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationHttpClientImplTest.java index 1e90d5b127b..55e6a4cc207 100644 --- a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationHttpClientImplTest.java +++ b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationHttpClientImplTest.java @@ -24,6 +24,7 @@ import com.tngtech.java.junit.dataprovider.DataProviderRunner; import com.tngtech.java.junit.dataprovider.UseDataProvider; import java.io.IOException; import java.net.SocketTimeoutException; +import java.util.concurrent.Callable; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okhttp3.mockwebserver.RecordedRequest; @@ -47,6 +48,7 @@ import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.fail; +import static org.sonar.alm.client.github.GithubApplicationHttpClient.RateLimit; @RunWith(DataProviderRunner.class) public class GithubApplicationHttpClientImplTest { @@ -405,4 +407,67 @@ public class GithubApplicationHttpClientImplTest { assertThat(response.getContent()).contains(randomBody); } + @Test + public void get_whenRateLimitHeadersArePresent_returnsRateLimit() throws Exception { + testRateLimitHeader(() -> underTest.get(appUrl, accessToken, randomEndPoint)); + } + + private void testRateLimitHeader(Callable<Response> request ) throws Exception { + server.enqueue(new MockResponse().setBody(randomBody) + .setHeader("x-ratelimit-remaining", "1") + .setHeader("x-ratelimit-limit", "10") + .setHeader("x-ratelimit-reset", "1000")); + + Response response = request.call(); + + assertThat(response.getRateLimit()) + .isEqualTo(new RateLimit(1, 10, 1000L)); + } + + @Test + public void get_whenRateLimitHeadersAreMissing_returnsNull() throws Exception { + + testMissingRateLimitHeader(() -> underTest.get(appUrl, accessToken, randomEndPoint)); + + } + + private void testMissingRateLimitHeader(Callable<Response> request ) throws Exception { + server.enqueue(new MockResponse().setBody(randomBody)); + + Response response = request.call(); + assertThat(response.getRateLimit()) + .isNull(); + } + + @Test + public void delete_whenRateLimitHeadersArePresent_returnsRateLimit() throws Exception { + testRateLimitHeader(() -> underTest.delete(appUrl, accessToken, randomEndPoint)); + + } + + @Test + public void delete_whenRateLimitHeadersAreMissing_returnsNull() throws Exception { + testMissingRateLimitHeader(() -> underTest.delete(appUrl, accessToken, randomEndPoint)); + + } + + @Test + public void patch_whenRateLimitHeadersArePresent_returnsRateLimit() throws Exception { + testRateLimitHeader(() -> underTest.patch(appUrl, accessToken, randomEndPoint, "body")); + } + + @Test + public void patch_whenRateLimitHeadersAreMissing_returnsNull() throws Exception { + testMissingRateLimitHeader(() -> underTest.patch(appUrl, accessToken, randomEndPoint, "body")); + } + + @Test + public void post_whenRateLimitHeadersArePresent_returnsRateLimit() throws Exception { + testRateLimitHeader(() -> underTest.post(appUrl, accessToken, randomEndPoint)); + } + + @Test + public void post_whenRateLimitHeadersAreMissing_returnsNull() throws Exception { + testMissingRateLimitHeader(() -> underTest.post(appUrl, accessToken, randomEndPoint)); + } } |