Search in sources :

Example 1 with BodyConsumer

use of co.cask.http.BodyConsumer in project cdap by caskdata.

the class StreamBodyConsumerTestBase method testChunkedContent.

@Test
public void testChunkedContent() throws Exception {
    int recordCount = 1000;
    // Generate a file for upload
    ContentInfo contentInfo = generateFile(recordCount);
    final Map<String, String> contentHeaders = Maps.newHashMap();
    final TestContentWriter contentWriter = new TestContentWriter();
    BodyConsumer bodyConsumer = createBodyConsumer(new ContentWriterFactory() {

        @Override
        public StreamId getStream() {
            return new StreamId("test_namespace", "test-stream");
        }

        @Override
        public ContentWriter create(Map<String, String> headers) throws IOException {
            contentHeaders.putAll(headers);
            return contentWriter;
        }
    });
    TestHttpResponder responder = new TestHttpResponder();
    // Feed the file content in small chunk
    sendChunks(contentInfo.getContentSupplier(), 10, bodyConsumer, responder);
    // Verify the processing is completed correctly
    Assert.assertTrue(contentWriter.waitForClose(5, TimeUnit.SECONDS));
    Assert.assertEquals(HttpResponseStatus.OK, responder.getResponseStatus());
    Assert.assertEquals(recordCount, contentWriter.getEvents());
    Assert.assertTrue(contentInfo.verify(contentHeaders, new InputSupplier<InputStream>() {

        @Override
        public InputStream getInput() throws IOException {
            return new ByteBufferInputStream(contentWriter.getContent().duplicate());
        }
    }));
}
Also used : StreamId(co.cask.cdap.proto.id.StreamId) ByteBufferInputStream(co.cask.common.io.ByteBufferInputStream) IOException(java.io.IOException) BodyConsumer(co.cask.http.BodyConsumer) InputSupplier(com.google.common.io.InputSupplier) Test(org.junit.Test)

Example 2 with BodyConsumer

use of co.cask.http.BodyConsumer in project cdap by caskdata.

the class DefaultStreamManager method send.

@Override
public void send(File file, String contentType) throws Exception {
    String path = String.format("/v3/namespaces/%s/streams/%s/batch", streamId.getNamespaceId(), streamId.getId());
    HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, path);
    request.setHeader(HttpHeaders.Names.CONTENT_TYPE, contentType);
    final MockResponder responder = new MockResponder();
    final BodyConsumer bodyConsumer = streamHandler.batch(request, responder, streamId.getNamespaceId(), streamId.getId());
    Preconditions.checkNotNull(bodyConsumer, "BodyConsumer from stream batch load call should not be null");
    ByteStreams.readBytes(Files.newInputStreamSupplier(file), new ByteProcessor<BodyConsumer>() {

        @Override
        public boolean processBytes(byte[] buf, int off, int len) throws IOException {
            bodyConsumer.chunk(ChannelBuffers.wrappedBuffer(buf, off, len), responder);
            return true;
        }

        @Override
        public BodyConsumer getResult() {
            bodyConsumer.finished(responder);
            return bodyConsumer;
        }
    });
    Preconditions.checkState(HttpResponseStatus.OK.equals(responder.getStatus()), "Failed to load events to stream %s in batch", streamId);
}
Also used : HttpRequest(org.jboss.netty.handler.codec.http.HttpRequest) DefaultHttpRequest(org.jboss.netty.handler.codec.http.DefaultHttpRequest) DefaultHttpRequest(org.jboss.netty.handler.codec.http.DefaultHttpRequest) MockResponder(co.cask.cdap.internal.MockResponder) BodyConsumer(co.cask.http.BodyConsumer) IOException(java.io.IOException)

Example 3 with BodyConsumer

use of co.cask.http.BodyConsumer in project cdap by caskdata.

the class AppFabricClient method deployApplication.

public Location deployApplication(Id.Namespace namespace, Class<?> applicationClz, String config, @Nullable KerberosPrincipalId ownerPrincipal, File... bundleEmbeddedJars) throws Exception {
    Preconditions.checkNotNull(applicationClz, "Application cannot be null.");
    Location deployedJar = AppJarHelper.createDeploymentJar(locationFactory, applicationClz, bundleEmbeddedJars);
    LOG.info("Created deployedJar at {}", deployedJar);
    String archiveName = String.format("%s-1.0.%d.jar", applicationClz.getSimpleName(), System.currentTimeMillis());
    DefaultHttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, String.format("/v3/namespaces/%s/apps", namespace.getId()));
    request.setHeader(Constants.Gateway.API_KEY, "api-key-example");
    request.setHeader(AbstractAppFabricHttpHandler.ARCHIVE_NAME_HEADER, archiveName);
    if (config != null) {
        request.setHeader(AbstractAppFabricHttpHandler.APP_CONFIG_HEADER, config);
    }
    String owner = null;
    if (ownerPrincipal != null) {
        owner = GSON.toJson(ownerPrincipal, KerberosPrincipalId.class);
        request.setHeader(AbstractAppFabricHttpHandler.PRINCIPAL_HEADER, owner);
    }
    MockResponder mockResponder = new MockResponder();
    BodyConsumer bodyConsumer = appLifecycleHttpHandler.deploy(request, mockResponder, namespace.getId(), archiveName, config, owner, true);
    Preconditions.checkNotNull(bodyConsumer, "BodyConsumer from deploy call should not be null");
    try (BufferFileInputStream is = new BufferFileInputStream(deployedJar.getInputStream(), 100 * 1024)) {
        byte[] chunk = is.read();
        while (chunk.length > 0) {
            mockResponder = new MockResponder();
            bodyConsumer.chunk(ChannelBuffers.wrappedBuffer(chunk), mockResponder);
            Preconditions.checkState(mockResponder.getStatus() == null, "failed to deploy app");
            chunk = is.read();
        }
        mockResponder = new MockResponder();
        bodyConsumer.finished(mockResponder);
        verifyResponse(HttpResponseStatus.OK, mockResponder.getStatus(), "Failed to deploy app");
    }
    return deployedJar;
}
Also used : DefaultHttpRequest(org.jboss.netty.handler.codec.http.DefaultHttpRequest) BodyConsumer(co.cask.http.BodyConsumer) KerberosPrincipalId(co.cask.cdap.proto.id.KerberosPrincipalId) BufferFileInputStream(co.cask.cdap.internal.app.BufferFileInputStream) Location(org.apache.twill.filesystem.Location)

Example 4 with BodyConsumer

use of co.cask.http.BodyConsumer in project cdap by caskdata.

the class AppFabricClient method createApplication.

private void createApplication(ApplicationId appId, DefaultHttpRequest request, AppRequest appRequest) throws Exception {
    request.setHeader(Constants.Gateway.API_KEY, "api-key-example");
    request.setContent(ChannelBuffers.wrappedBuffer(Bytes.toBytes(GSON.toJson(appRequest.getConfig()))));
    MockResponder mockResponder = new MockResponder();
    BodyConsumer bodyConsumer = appLifecycleHttpHandler.createAppVersion(request, mockResponder, appId.getNamespace(), appId.getApplication(), appId.getVersion());
    Preconditions.checkNotNull(bodyConsumer, "BodyConsumer from deploy call should not be null");
    byte[] contents = Bytes.toBytes(GSON.toJson(appRequest));
    Preconditions.checkNotNull(contents);
    bodyConsumer.chunk(ChannelBuffers.wrappedBuffer(contents), mockResponder);
    bodyConsumer.finished(mockResponder);
    verifyResponse(HttpResponseStatus.OK, mockResponder.getStatus(), "Failed to deploy app");
}
Also used : BodyConsumer(co.cask.http.BodyConsumer)

Aggregations

BodyConsumer (co.cask.http.BodyConsumer)4 IOException (java.io.IOException)2 DefaultHttpRequest (org.jboss.netty.handler.codec.http.DefaultHttpRequest)2 MockResponder (co.cask.cdap.internal.MockResponder)1 BufferFileInputStream (co.cask.cdap.internal.app.BufferFileInputStream)1 KerberosPrincipalId (co.cask.cdap.proto.id.KerberosPrincipalId)1 StreamId (co.cask.cdap.proto.id.StreamId)1 ByteBufferInputStream (co.cask.common.io.ByteBufferInputStream)1 InputSupplier (com.google.common.io.InputSupplier)1 Location (org.apache.twill.filesystem.Location)1 HttpRequest (org.jboss.netty.handler.codec.http.HttpRequest)1 Test (org.junit.Test)1