You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jp...@apache.org on 2016/01/28 20:50:37 UTC
nifi git commit: NIFI-1396 Correcting PostHttp chunked encoding
functionality
Repository: nifi
Updated Branches:
refs/heads/master b3990ecdc -> ee30b27cc
NIFI-1396 Correcting PostHttp chunked encoding functionality
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ee30b27c
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ee30b27c
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ee30b27c
Branch: refs/heads/master
Commit: ee30b27cc8872f9a666da1daab8e4ee942b97610
Parents: b3990ec
Author: jpercivall <jo...@yahoo.com>
Authored: Mon Jan 25 16:57:17 2016 -0500
Committer: jpercivall <jo...@yahoo.com>
Committed: Thu Jan 28 14:50:22 2016 -0500
----------------------------------------------------------------------
.../nifi/processors/standard/PostHTTP.java | 30 +++++++++++++---
.../nifi/processors/standard/TestPostHTTP.java | 37 ++++++++++++++++++++
2 files changed, 62 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/ee30b27c/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PostHTTP.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PostHTTP.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PostHTTP.java
index 2aaf800..760c069 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PostHTTP.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PostHTTP.java
@@ -227,10 +227,9 @@ public class PostHTTP extends AbstractProcessor {
.build();
public static final PropertyDescriptor CHUNKED_ENCODING = new PropertyDescriptor.Builder()
.name("Use Chunked Encoding")
- .description("Specifies whether or not to use Chunked Encoding to send the data. If false, the entire content of the FlowFile will be buffered into memory.")
- .required(true)
+ .description("Specifies whether or not to use Chunked Encoding to send the data. This property is ignored in the event the contents are compressed "
+ + "or sent as FlowFiles.")
.allowableValues("true", "false")
- .defaultValue("true")
.build();
public static final PropertyDescriptor SSL_CONTEXT_SERVICE = new PropertyDescriptor.Builder()
.name("SSL Context Service")
@@ -331,6 +330,15 @@ public class PostHTTP extends AbstractProcessor {
.build());
}
+ boolean sendAsFlowFile = context.getProperty(SEND_AS_FLOWFILE).asBoolean();
+ int compressionLevel = context.getProperty(COMPRESSION_LEVEL).asInteger();
+ boolean chunkedSet = context.getProperty(CHUNKED_ENCODING).isSet();
+
+ if(compressionLevel == 0 && !sendAsFlowFile && !chunkedSet) {
+ results.add(new ValidationResult.Builder().valid(false).subject(CHUNKED_ENCODING.getName())
+ .explanation("if compression level is 0 and not sending as a FlowFile, then the \'"+CHUNKED_ENCODING.getName()+"\' property must be set").build());
+ }
+
return results;
}
@@ -625,9 +633,21 @@ public class PostHTTP extends AbstractProcessor {
out.flush();
}
}
- });
+ }) {
- entity.setChunked(context.getProperty(CHUNKED_ENCODING).asBoolean());
+ @Override
+ public long getContentLength() {
+ if(compressionLevel == 0 && !sendAsFlowFile && !context.getProperty(CHUNKED_ENCODING).asBoolean() ) {
+ return toSend.get(0).getSize();
+ } else {
+ return -1;
+ }
+ }
+ };
+
+ if(context.getProperty(CHUNKED_ENCODING).isSet()) {
+ entity.setChunked(context.getProperty(CHUNKED_ENCODING).asBoolean());
+ }
post.setEntity(entity);
post.setConfig(requestConfig);
http://git-wip-us.apache.org/repos/asf/nifi/blob/ee30b27c/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPostHTTP.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPostHTTP.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPostHTTP.java
index 67bd82c..5262964 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPostHTTP.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPostHTTP.java
@@ -82,6 +82,7 @@ public class TestPostHTTP {
runner.setProperty(PostHTTP.URL, server.getSecureUrl());
runner.setProperty(PostHTTP.SSL_CONTEXT_SERVICE, "ssl-context");
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
runner.enqueue("Hello world".getBytes());
runner.run();
@@ -113,6 +114,7 @@ public class TestPostHTTP {
runner.setProperty(PostHTTP.URL, server.getSecureUrl());
runner.setProperty(PostHTTP.SSL_CONTEXT_SERVICE, "ssl-context");
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
runner.enqueue("Hello world".getBytes());
runner.run();
@@ -141,6 +143,7 @@ public class TestPostHTTP {
runner.setProperty(PostHTTP.URL, server.getSecureUrl());
runner.setProperty(PostHTTP.SSL_CONTEXT_SERVICE, "ssl-context");
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
runner.enqueue("Hello world".getBytes());
runner.run();
@@ -186,6 +189,7 @@ public class TestPostHTTP {
assertEquals("World", new String(contentReceived));
assertEquals("abc", receivedAttrs.get("abc"));
assertEquals("xyz.txt", receivedAttrs.get("filename"));
+ Assert.assertNull(receivedAttrs.get("Content-Length"));
}
@Test
@@ -258,18 +262,21 @@ public class TestPostHTTP {
final String suppliedMimeType = "text/plain";
attrs.put(CoreAttributes.MIME_TYPE.key(), suppliedMimeType);
runner.enqueue("Camping is in tents.".getBytes(), attrs);
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
runner.run(1);
runner.assertAllFlowFilesTransferred(PostHTTP.REL_SUCCESS);
Map<String, String> lastPostHeaders = servlet.getLastPostHeaders();
Assert.assertEquals(suppliedMimeType, lastPostHeaders.get(PostHTTP.CONTENT_TYPE_HEADER));
+ Assert.assertEquals("20",lastPostHeaders.get("Content-Length"));
}
@Test
public void testSendWithEmptyELExpression() throws Exception {
setup(null);
runner.setProperty(PostHTTP.URL, server.getUrl());
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
final Map<String, String> attrs = new HashMap<>();
attrs.put(CoreAttributes.MIME_TYPE.key(), "");
@@ -289,6 +296,7 @@ public class TestPostHTTP {
final String suppliedMimeType = "text/plain";
runner.setProperty(PostHTTP.URL, server.getUrl());
runner.setProperty(PostHTTP.CONTENT_TYPE, suppliedMimeType);
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
final Map<String, String> attrs = new HashMap<>();
attrs.put(CoreAttributes.MIME_TYPE.key(), "text/csv");
@@ -322,6 +330,7 @@ public class TestPostHTTP {
Assert.assertEquals(suppliedMimeType, lastPostHeaders.get(PostHTTP.CONTENT_TYPE_HEADER));
// Ensure that a 'Content-Encoding' header was set with a 'gzip' value
Assert.assertEquals(PostHTTP.CONTENT_ENCODING_GZIP_VALUE, lastPostHeaders.get(PostHTTP.CONTENT_ENCODING_HEADER));
+ Assert.assertNull(lastPostHeaders.get("Content-Length"));
}
@Test
@@ -332,6 +341,7 @@ public class TestPostHTTP {
runner.setProperty(PostHTTP.URL, server.getUrl());
runner.setProperty(PostHTTP.CONTENT_TYPE, suppliedMimeType);
runner.setProperty(PostHTTP.COMPRESSION_LEVEL, "0");
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "false");
final Map<String, String> attrs = new HashMap<>();
attrs.put(CoreAttributes.MIME_TYPE.key(), "text/plain");
@@ -345,6 +355,7 @@ public class TestPostHTTP {
Assert.assertEquals(suppliedMimeType, lastPostHeaders.get(PostHTTP.CONTENT_TYPE_HEADER));
// Ensure that the request was not sent with a 'Content-Encoding' header
Assert.assertNull(lastPostHeaders.get(PostHTTP.CONTENT_ENCODING_HEADER));
+ Assert.assertEquals("6200",lastPostHeaders.get("Content-Length"));
}
@Test
@@ -370,4 +381,30 @@ public class TestPostHTTP {
// Ensure that the request was not sent with a 'Content-Encoding' header
Assert.assertNull(lastPostHeaders.get(PostHTTP.CONTENT_ENCODING_HEADER));
}
+
+ @Test
+ public void testSendChunked() throws Exception {
+ setup(null);
+
+ final String suppliedMimeType = "text/plain";
+ runner.setProperty(PostHTTP.URL, server.getUrl());
+ runner.setProperty(PostHTTP.CONTENT_TYPE, suppliedMimeType);
+ runner.setProperty(PostHTTP.CHUNKED_ENCODING, "true");
+
+ final Map<String, String> attrs = new HashMap<>();
+ attrs.put(CoreAttributes.MIME_TYPE.key(), "text/plain");
+
+ runner.enqueue(StringUtils.repeat("This is the song that never ends. It goes on and on my friend.", 100).getBytes(), attrs);
+
+ runner.run(1);
+ runner.assertAllFlowFilesTransferred(PostHTTP.REL_SUCCESS);
+
+ byte[] postValue = servlet.getLastPost();
+ Assert.assertArrayEquals(StringUtils.repeat("This is the song that never ends. It goes on and on my friend.", 100).getBytes(),postValue);
+
+ Map<String, String> lastPostHeaders = servlet.getLastPostHeaders();
+ Assert.assertEquals(suppliedMimeType, lastPostHeaders.get(PostHTTP.CONTENT_TYPE_HEADER));
+ Assert.assertNull(lastPostHeaders.get("Content-Length"));
+ Assert.assertEquals("chunked",lastPostHeaders.get("Transfer-Encoding"));
+ }
}