Search in sources :

Example 1 with HttpRequestConfig

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));
        }
    }
}
Also used : RemoteClientFactory(io.cdap.cdap.common.internal.remote.RemoteClientFactory) ArtifactId(io.cdap.cdap.proto.id.ArtifactId) DefaultHttpRequestConfig(io.cdap.cdap.common.http.DefaultHttpRequestConfig) HttpResponseStatus(io.netty.handler.codec.http.HttpResponseStatus) NoOpInternalAuthenticator(io.cdap.cdap.common.internal.remote.NoOpInternalAuthenticator) HttpErrorStatusProvider(io.cdap.cdap.api.common.HttpErrorStatusProvider) DefaultHttpRequestConfig(io.cdap.cdap.common.http.DefaultHttpRequestConfig) HttpRequestConfig(io.cdap.common.http.HttpRequestConfig) LocationBodyProducer(io.cdap.cdap.common.http.LocationBodyProducer) DefaultHttpHeaders(io.netty.handler.codec.http.DefaultHttpHeaders) RemoteClient(io.cdap.cdap.common.internal.remote.RemoteClient) File(java.io.File) Location(org.apache.twill.filesystem.Location) Path(javax.ws.rs.Path) GET(javax.ws.rs.GET)

Example 2 with HttpRequestConfig

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();
    }
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ResolvingDiscoverable(io.cdap.cdap.common.discovery.ResolvingDiscoverable) Discoverable(org.apache.twill.discovery.Discoverable) Cancellable(org.apache.twill.common.Cancellable) HttpResponse(io.cdap.common.http.HttpResponse) DefaultHttpRequestConfig(io.cdap.cdap.common.http.DefaultHttpRequestConfig) HttpRequestConfig(io.cdap.common.http.HttpRequestConfig) URL(java.net.URL) Test(org.junit.Test)

Example 3 with HttpRequestConfig

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));
}
Also used : DefaultHttpRequestConfig(io.cdap.cdap.common.http.DefaultHttpRequestConfig) HttpRequestConfig(io.cdap.common.http.HttpRequestConfig) URL(java.net.URL) Test(org.junit.Test)

Example 4 with HttpRequestConfig

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));
}
Also used : RemoteClientFactory(io.cdap.cdap.common.internal.remote.RemoteClientFactory) HttpHeaders(io.netty.handler.codec.http.HttpHeaders) HttpURLConnection(java.net.HttpURLConnection) RemoteClient(io.cdap.cdap.common.internal.remote.RemoteClient) HttpRequestConfig(io.cdap.common.http.HttpRequestConfig) CConfiguration(io.cdap.cdap.common.conf.CConfiguration) Test(org.junit.Test)

Example 5 with HttpRequestConfig

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));
}
Also used : RemoteClientFactory(io.cdap.cdap.common.internal.remote.RemoteClientFactory) HttpHeaders(io.netty.handler.codec.http.HttpHeaders) Credential(io.cdap.cdap.proto.security.Credential) HttpURLConnection(java.net.HttpURLConnection) RemoteClient(io.cdap.cdap.common.internal.remote.RemoteClient) HttpRequestConfig(io.cdap.common.http.HttpRequestConfig) CConfiguration(io.cdap.cdap.common.conf.CConfiguration) Test(org.junit.Test)

Aggregations

HttpRequestConfig (io.cdap.common.http.HttpRequestConfig)15 Test (org.junit.Test)8 RemoteClientFactory (io.cdap.cdap.common.internal.remote.RemoteClientFactory)7 HttpResponse (io.cdap.common.http.HttpResponse)7 URL (java.net.URL)7 DefaultHttpRequestConfig (io.cdap.cdap.common.http.DefaultHttpRequestConfig)5 RemoteClient (io.cdap.cdap.common.internal.remote.RemoteClient)5 HttpURLConnection (java.net.HttpURLConnection)4 LocationFactory (org.apache.twill.filesystem.LocationFactory)4 CConfiguration (io.cdap.cdap.common.conf.CConfiguration)3 RandomEndpointStrategy (io.cdap.cdap.common.discovery.RandomEndpointStrategy)3 DiscoveryServiceClient (org.apache.twill.discovery.DiscoveryServiceClient)3 Location (org.apache.twill.filesystem.Location)3 Service (com.google.common.util.concurrent.Service)2 MetricsCollectionService (io.cdap.cdap.api.metrics.MetricsCollectionService)2 ServiceStore (io.cdap.cdap.app.store.ServiceStore)2 DatasetClient (io.cdap.cdap.client.DatasetClient)2 MetadataClient (io.cdap.cdap.client.MetadataClient)2 DefaultInternalAuthenticator (io.cdap.cdap.common.internal.remote.DefaultInternalAuthenticator)2 DatasetService (io.cdap.cdap.data2.datafabric.dataset.service.DatasetService)2