@Test public void support_base_url_ending_with_slash() throws Exception { assertThat(serverUrl).endsWith("/"); underTest = HttpConnector.newBuilder().url(StringUtils.removeEnd(serverUrl, "/")).build(); GetRequest request = new GetRequest("api/issues/search"); answerHelloWorld(); WsResponse response = underTest.call(request); assertThat(response.hasContent()).isTrue(); }
@Test public void use_basic_authentication_with_utf8_login_and_password() throws Exception { answerHelloWorld(); String login = "ζθ½"; String password = "εδΈ"; underTest = HttpConnector.newBuilder() .url(serverUrl) .credentials(login, password) .build(); GetRequest request = new GetRequest("api/issues/search"); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); // do not use OkHttp Credentials.basic() in order to not use the same code as the code under test String expectedHeader = "Basic " + Base64.getEncoder().encodeToString((login + ":" + password).getBytes(UTF_8)); assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(expectedHeader); }
@Test public void override_timeouts() { underTest = HttpConnector.newBuilder() .url(serverUrl) .readTimeoutMilliseconds(42) .connectTimeoutMilliseconds(74) .build(); assertThat(underTest.okHttpClient().readTimeoutMillis()).isEqualTo(42); assertThat(underTest.okHttpClient().connectTimeoutMillis()).isEqualTo(74); }
/** * Access token replaces the couple {login,password} and is sent through * the login field */ @Test public void use_access_token() throws Exception { answerHelloWorld(); underTest = HttpConnector.newBuilder() .url(serverUrl) .token("theToken") .build(); GetRequest request = new GetRequest("api/issues/search"); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(basic("theToken", "")); }
@Test public void systemPassCode_sets_header_when_value_is_not_null() throws InterruptedException { answerHelloWorld(); String systemPassCode = new Random().nextBoolean() ? "" : RandomStringUtils.randomAlphanumeric(21); underTest = HttpConnector.newBuilder() .url(serverUrl) .systemPassCode(systemPassCode) .build(); GetRequest request = new GetRequest("api/issues/search"); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("X-sonar-passcode")) .isEqualTo(systemPassCode); }
@Test public void override_timeout_on_get() { underTest = HttpConnector.newBuilder().url(serverUrl).build(); server.enqueue(new MockResponse().setBodyDelay(100, TimeUnit.MILLISECONDS).setBody("Hello delayed")); expectedException.expect(IllegalStateException.class); expectedException.expectCause(IsInstanceOf.instanceOf(SocketTimeoutException.class)); WsResponse call = underTest.call(new GetRequest("/").setTimeOutInMs(5)); assertThat(call.content()).equals("Hello delayed"); }
@Test public void support_base_url_with_context() { // just to be sure assertThat(serverUrl).endsWith("/"); underTest = HttpConnector.newBuilder().url(serverUrl + "sonar").build(); GetRequest request = new GetRequest("api/issues/search"); answerHelloWorld(); assertThat(underTest.call(request).requestUrl()).isEqualTo(serverUrl + "sonar/api/issues/search"); request = new GetRequest("/api/issues/search"); answerHelloWorld(); assertThat(underTest.call(request).requestUrl()).isEqualTo(serverUrl + "sonar/api/issues/search"); }
@Test public void add_headers_to_GET_request() throws Exception { answerHelloWorld(); GetRequest request = new GetRequest("api/issues/search") .setHeader("X-Foo", "fooz") .setHeader("X-Bar", "barz"); underTest = HttpConnector.newBuilder().url(serverUrl).build(); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("X-Foo")).isEqualTo("fooz"); assertThat(recordedRequest.getHeader("X-Bar")).isEqualTo("barz"); }
@Test public void support_tls_versions_of_java8() { underTest = HttpConnector.newBuilder().url(serverUrl).build(); assertTlsAndClearTextSpecifications(underTest); assertThat(underTest.okHttpClient().sslSocketFactory()).isInstanceOf(SSLSocketFactory.getDefault().getClass()); }
@Test public void override_timeout_on_post_with_redirect() { underTest = HttpConnector.newBuilder().url(serverUrl).build(); server.enqueue(new MockResponse().setResponseCode(301).setHeader("Location:", "/redirect")); // Headers are not affected by setBodyDelay, let's throttle the answer server.enqueue(new MockResponse().throttleBody(1,100, TimeUnit.MILLISECONDS).setBody("Hello delayed")); expectedException.expect(IllegalStateException.class); expectedException.expectCause(IsInstanceOf.instanceOf(SocketTimeoutException.class)); WsResponse call = underTest.call(new PostRequest("/").setTimeOutInMs(5)); assertThat(call.content()).equals("Hello delayed"); }
@Test public void override_timeout_on_post() { underTest = HttpConnector.newBuilder().url(serverUrl).build(); // Headers are not affected by setBodyDelay, let's throttle the answer server.enqueue(new MockResponse().throttleBody(1,100, TimeUnit.MILLISECONDS).setBody("Hello delayed")); expectedException.expect(IllegalStateException.class); expectedException.expectCause(IsInstanceOf.instanceOf(SocketTimeoutException.class)); WsResponse call = underTest.call(new PostRequest("/").setTimeOutInMs(5)); assertThat(call.content()).equals("Hello delayed"); }
@Test public void send_user_agent() throws Exception { answerHelloWorld(); underTest = HttpConnector.newBuilder() .url(serverUrl) .userAgent("Maven Plugin/2.3") .build(); underTest.call(new GetRequest("api/issues/search")); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("User-Agent")).isEqualTo("Maven Plugin/2.3"); }
@Test public void use_basic_authentication() throws Exception { answerHelloWorld(); underTest = HttpConnector.newBuilder() .url(serverUrl) .credentials("theLogin", "thePassword") .build(); GetRequest request = new GetRequest("api/issues/search"); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(basic("theLogin", "thePassword")); }
@Test public void http_error() throws Exception { server.enqueue(new MockResponse().setResponseCode(404)); PostRequest request = new PostRequest("api/issues/search"); underTest = HttpConnector.newBuilder().url(serverUrl).build(); WsResponse wsResponse = underTest.call(request); assertThat(wsResponse.code()).isEqualTo(404); }
@Test public void add_header_to_POST_request() throws Exception { answerHelloWorld(); PostRequest request = new PostRequest("api/issues/search") .setHeader("X-Foo", "fooz") .setHeader("X-Bar", "barz"); underTest = HttpConnector.newBuilder().url(serverUrl).build(); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("X-Foo")).isEqualTo("fooz"); assertThat(recordedRequest.getHeader("X-Bar")).isEqualTo("barz"); }
@Test public void fail_if_malformed_URL() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Malformed URL: 'wrong URL'"); underTest = newBuilder().url("wrong URL").build(); }
@Test public void fail_if_unknown_implementation_of_request() { underTest = HttpConnector.newBuilder().url(serverUrl).build(); try { underTest.call(mock(WsRequest.class)); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessageContaining("Unsupported implementation: "); } }
@Test public void use_basic_authentication_with_null_password() throws Exception { answerHelloWorld(); underTest = HttpConnector.newBuilder() .url(serverUrl) .credentials("theLogin", null) .build(); GetRequest request = new GetRequest("api/issues/search"); underTest.call(request); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(basic("theLogin", "")); }
@Test public void create_http_client() { HttpConnector connector = HttpConnector.newBuilder().url("http://localhost:9000").build(); WsClient client = WsClientFactories.getDefault().newClient(connector); assertThat(client).isInstanceOf(DefaultWsClient.class); assertThat(client.wsConnector()).isSameAs(connector); }
@Before public void setUp() throws Exception { HttpConnector connector = HttpConnector.newBuilder().url(server.url("/").toString()).build(); GlobalAnalysisMode analysisMode = new GlobalAnalysisMode(new ScannerProperties(Collections.emptyMap())); ScannerWsClient wsClient = new ScannerWsClient(WsClientFactories.getDefault().newClient(connector), false, analysisMode); userHome = temp.newFolder(); MapSettings settings = new MapSettings(); settings.setProperty("sonar.userHome", userHome.getAbsolutePath()); underTest = new PluginFiles(wsClient, settings.asConfig()); }