use of io.cdap.common.http.HttpRequestConfig in project cdap by caskdata.
the class ArtifactCacheHttpHandlerInternal method fetchArtifact.
@GET
@Path("peers/{peer}/namespaces/{namespace-id}/artifacts/{artifact-name}/versions/{artifact-version}")
public void fetchArtifact(HttpRequest request, HttpResponder responder, @PathParam("peer") String peer, @PathParam("namespace-id") String namespaceId, @PathParam("artifact-name") String artifactName, @PathParam("artifact-version") String artifactVersion) throws Exception {
ArtifactId artifactId = new ArtifactId(namespaceId, artifactName, artifactVersion);
try {
String endpoint = tetheringStore.getPeer(peer).getEndpoint();
RemoteClientFactory factory = new RemoteClientFactory(new NoOpDiscoveryServiceClient(endpoint), new NoOpInternalAuthenticator(), remoteAuthenticator);
HttpRequestConfig config = new DefaultHttpRequestConfig(true);
RemoteClient remoteClient = factory.createRemoteClient("", config, Constants.Gateway.INTERNAL_API_VERSION_3);
File artifactPath = cache.getArtifact(artifactId, peer, remoteClient);
Location artifactLocation = Locations.toLocation(artifactPath);
responder.sendContent(HttpResponseStatus.OK, new LocationBodyProducer(artifactLocation), new DefaultHttpHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM));
} catch (Exception ex) {
if (ex instanceof HttpErrorStatusProvider) {
HttpResponseStatus status = HttpResponseStatus.valueOf(((HttpErrorStatusProvider) ex).getStatusCode());
responder.sendString(status, exceptionToJson(ex));
} else {
responder.sendString(HttpResponseStatus.INTERNAL_SERVER_ERROR, exceptionToJson(ex));
}
}
}
use of io.cdap.common.http.HttpRequestConfig in project cdap by caskdata.
the class ServiceSocksProxyTest method testDelayRegister.
@Test
public void testDelayRegister() throws Exception {
URL url = new URL("http://test-service-2/ping");
// Delay the service registration by 2 seconds.
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<Cancellable> future = scheduler.schedule(() -> discoveryService.register(ResolvingDiscoverable.of(new Discoverable("test-service-2", httpService.getBindAddress()))), 2, TimeUnit.SECONDS);
try {
HttpResponse response = HttpRequests.execute(io.cdap.common.http.HttpRequest.get(url).build(), new HttpRequestConfig(5000, 5000));
Assert.assertEquals(200, response.getResponseCode());
} finally {
future.get(5, TimeUnit.SECONDS).cancel();
}
}
use of io.cdap.common.http.HttpRequestConfig in project cdap by caskdata.
the class ServiceSocksProxyTest method testTimeout.
@Test(expected = IOException.class)
public void testTimeout() throws Exception {
// Connect to a service that is not discoverable
URL url = new URL("http://not-exist/ping");
HttpRequests.execute(io.cdap.common.http.HttpRequest.get(url).build(), new HttpRequestConfig(500, 10000));
}
use of io.cdap.common.http.HttpRequestConfig in project cdap by caskdata.
the class RemoteClientAuthenticatorTest method testRemoteClientWithoutInternalAuthInjectsNoAuthenticationContext.
@Test
public void testRemoteClientWithoutInternalAuthInjectsNoAuthenticationContext() throws Exception {
CConfiguration cConf = injector.getInstance(CConfiguration.class);
cConf.setBoolean(Constants.Security.INTERNAL_AUTH_ENABLED, false);
RemoteClientFactory remoteClientFactory = injector.getInstance(RemoteClientFactory.class);
RemoteClient remoteClient = remoteClientFactory.createRemoteClient(TEST_SERVICE, new HttpRequestConfig(15000, 15000, false), "/");
HttpURLConnection conn = remoteClient.openConnection(HttpMethod.GET, "");
int responseCode = conn.getResponseCode();
// Verify that the request received the expected headers.
HttpHeaders headers = testHttpHandler.getRequest().headers();
Assert.assertEquals(HttpResponseStatus.OK.code(), responseCode);
Assert.assertFalse(headers.contains(Constants.Security.Headers.USER_ID));
Assert.assertFalse(headers.contains(Constants.Security.Headers.RUNTIME_TOKEN));
}
use of io.cdap.common.http.HttpRequestConfig in project cdap by caskdata.
the class RemoteClientAuthenticatorTest method testRemoteClientWithInternalAuthInjectsAuthenticationContext.
@Test
public void testRemoteClientWithInternalAuthInjectsAuthenticationContext() throws Exception {
CConfiguration cConf = injector.getInstance(CConfiguration.class);
cConf.setBoolean(Constants.Security.INTERNAL_AUTH_ENABLED, true);
RemoteClientFactory remoteClientFactory = injector.getInstance(RemoteClientFactory.class);
RemoteClient remoteClient = remoteClientFactory.createRemoteClient(TEST_SERVICE, new HttpRequestConfig(15000, 15000, false), "/");
// Set authentication context principal.
String expectedName = "somebody";
String expectedCredValue = "credential";
Credential.CredentialType expectedCredType = Credential.CredentialType.EXTERNAL;
System.setProperty("user.name", expectedName);
System.setProperty("user.credential.value", expectedCredValue);
System.setProperty("user.credential.type", expectedCredType.name());
HttpURLConnection conn = remoteClient.openConnection(HttpMethod.GET, "");
int responseCode = conn.getResponseCode();
// Verify that the request received the expected headers.
HttpHeaders headers = testHttpHandler.getRequest().headers();
Assert.assertEquals(HttpResponseStatus.OK.code(), responseCode);
Assert.assertEquals(expectedName, headers.get(Constants.Security.Headers.USER_ID));
Assert.assertEquals(String.format("%s %s", expectedCredType.getQualifiedName(), expectedCredValue), headers.get(Constants.Security.Headers.RUNTIME_TOKEN));
}
Aggregations