aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-alm-client/src/test/java
diff options
context:
space:
mode:
authorWojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com>2023-07-12 14:56:33 +0200
committersonartech <sonartech@sonarsource.com>2023-07-18 20:03:21 +0000
commit5ad57b562df44def539788d25d98e4cb0616ccc7 (patch)
tree2e9711b97a8b2213b3a9bb85c005bac6c0bddf26 /server/sonar-alm-client/src/test/java
parent91090d511b75c9336e9102edffd7e9d7dd36a090 (diff)
downloadsonarqube-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')
-rw-r--r--server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java75
-rw-r--r--server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationHttpClientImplTest.java65
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));
+ }
}