NIFI-1156
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ee7400ef Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ee7400ef Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ee7400ef Branch: refs/heads/NIFI-259 Commit: ee7400ef5389fd177c570f524ff29b51d667b09c Parents: c9d59fa Author: Jeremy Dyer <[email protected]> Authored: Wed Jan 13 15:59:47 2016 -0500 Committer: Jeremy Dyer <[email protected]> Committed: Wed Jan 13 15:59:47 2016 -0500 ---------------------------------------------------------------------- nifi-assembly/LICENSE | 28 +++- .../nifi-html-processors/pom.xml | 14 ++ .../org/apache/nifi/AbstractHTMLProcessor.java | 34 +++-- .../java/org/apache/nifi/GetHTMLElement.java | 41 ++++-- .../java/org/apache/nifi/ModifyHTMLElement.java | 17 ++- .../java/org/apache/nifi/PutHTMLElement.java | 22 ++- .../java/org/apache/nifi/AbstractHTMLTest.java | 48 +------ .../org/apache/nifi/TestGetHTMLElement.java | 143 +++++++------------ .../org/apache/nifi/TestModifyHTMLElement.java | 45 ++---- .../org/apache/nifi/TestPutHTMLElement.java | 24 +--- .../src/test/resources/Weather.html | 25 ++++ 11 files changed, 219 insertions(+), 222 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-assembly/LICENSE ---------------------------------------------------------------------- diff --git a/nifi-assembly/LICENSE b/nifi-assembly/LICENSE index 5c499e3..d12843b 100644 --- a/nifi-assembly/LICENSE +++ b/nifi-assembly/LICENSE @@ -1030,4 +1030,30 @@ information can be found here: http://www.adobe.com/devnet/xmp/library/eula-xmp- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file + THE POSSIBILITY OF SUCH DAMAGE. + + +This product bundles 'Jsoup' which is available under "The MIT license". More +information can be found here: http://jsoup.org/license + + The MIT License + + Copyright (c) 2009-2015, Jonathan Hedley <[email protected]> + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/pom.xml b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/pom.xml index a2e8fe2..25e19b9 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/pom.xml +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/pom.xml @@ -56,4 +56,18 @@ <scope>test</scope> </dependency> </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <configuration> + <excludes combine.children="append"> + <exclude>src/test/resources/Weather.html</exclude> + </excludes> + </configuration> + </plugin> + </plugins> + </build> </project> http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/AbstractHTMLProcessor.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/AbstractHTMLProcessor.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/AbstractHTMLProcessor.java index 49b4ffb..42467d9 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/AbstractHTMLProcessor.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/AbstractHTMLProcessor.java @@ -17,6 +17,9 @@ package org.apache.nifi; import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.components.ValidationContext; +import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.components.Validator; import org.apache.nifi.flowfile.FlowFile; import org.apache.nifi.processor.AbstractProcessor; import org.apache.nifi.processor.ProcessContext; @@ -26,6 +29,7 @@ import org.apache.nifi.processor.io.InputStreamCallback; import org.apache.nifi.processor.util.StandardValidators; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; +import org.jsoup.select.Selector; import java.io.IOException; import java.io.InputStream; @@ -38,6 +42,25 @@ public abstract class AbstractHTMLProcessor extends AbstractProcessor { protected static final String ELEMENT_DATA = "Data"; protected static final String ELEMENT_ATTRIBUTE = "Attribute"; + protected static final Validator CSS_SELECTOR_VALIDATOR = new Validator() { + @Override + public ValidationResult validate(final String subject, final String value, final ValidationContext context) { + if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { + return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); + } + + String reason = null; + try { + Document doc = Jsoup.parse("<html></html>"); + doc.select(value); + } catch (final Selector.SelectorParseException e) { + reason = "\"" + value + "\" is an invalid CSS selector"; + } + + return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); + } + }; + public static final PropertyDescriptor URL = new PropertyDescriptor .Builder().name("URL") .description("Base URL for the HTML page being parsed.") @@ -49,16 +72,16 @@ public abstract class AbstractHTMLProcessor extends AbstractProcessor { .Builder().name("CSS Selector") .description("CSS selector syntax string used to extract the desired HTML element(s).") .required(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(CSS_SELECTOR_VALIDATOR) .expressionLanguageSupported(true) .build(); public static final PropertyDescriptor HTML_CHARSET = new PropertyDescriptor - .Builder().name("HTML character encoding") + .Builder().name("HTML Character Encoding") .description("Character encoding of the input HTML") .defaultValue("UTF-8") .required(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.CHARACTER_SET_VALIDATOR) .build(); public static final Relationship REL_ORIGINAL = new Relationship.Builder() @@ -71,11 +94,6 @@ public abstract class AbstractHTMLProcessor extends AbstractProcessor { .description("Successfully parsed HTML element") .build(); - public static final Relationship REL_FAILURE = new Relationship.Builder() - .name("failure") - .description("Failed to parse HTML content") - .build(); - public static final Relationship REL_INVALID_HTML = new Relationship.Builder() .name("invalid html") .description("The input HTML syntax is invalid") http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/GetHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/GetHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/GetHTMLElement.java index 63d457c..feda16c 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/GetHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/GetHTMLElement.java @@ -17,6 +17,7 @@ package org.apache.nifi; import org.apache.commons.lang3.StringUtils; +import org.apache.nifi.annotation.behavior.InputRequirement; import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.flowfile.FlowFile; import org.apache.nifi.processor.ProcessContext; @@ -45,8 +46,19 @@ import java.util.HashSet; import java.util.Collections; @Tags({"get", "html", "dom", "css", "element"}) -@CapabilityDescription("Parses HTML input using CSS selector syntax and creates a new flowfile containing the extracted" + - " element content for each matching CSS selector.") +@InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED) +@CapabilityDescription("Extracts HTML element values from the incoming flowfile's content using a CSS selector." + + " The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected" + + " in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \"queried\"" + + " using the user defined CSS selector string. The result of \"querying\" the HTML DOM may produce 0-N results." + + " If no results are found the flowfile will be transferred to the \"element not found\" relationship to indicate" + + " so to the end user. If N results are found a new flowfile will be created and emitted for each result. The query result will" + + " either be placed in the content of the new flowfile or as an attribute of the new flowfile. By default the result is written to an" + + " attribute. This can be controlled by the \"Destination\" property. Resulting query values may also have data" + + " prepended or appended to them by setting the value of property \"Prepend Element Value\" or \"Append Element Value\"." + + " Prepended and appended values are treated as string values and concatenated to the result retrieved from the" + + " HTML DOM query operation. A more thorough reference for the CSS selector syntax can be found at" + + " \"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\"") @SeeAlso({ModifyHTMLElement.class, PutHTMLElement.class}) @WritesAttributes({@WritesAttribute(attribute="HTMLElement", description="Flowfile attribute where the element result" + " parsed from the HTML using the CSS selector syntax are placed if the destination is a flowfile attribute.")}) @@ -58,7 +70,7 @@ public class GetHTMLElement public static final String DESTINATION_CONTENT = "flowfile-content"; public static final PropertyDescriptor PREPEND_ELEMENT_VALUE = new PropertyDescriptor - .Builder().name("Prepend Element value") + .Builder().name("Prepend Element Value") .description("Prepends the specified value to the resulting Element") .required(false) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -66,7 +78,7 @@ public class GetHTMLElement .build(); public static final PropertyDescriptor APPEND_ELEMENT_VALUE = new PropertyDescriptor - .Builder().name("Append Element value") + .Builder().name("Append Element Value") .description("Appends the specified value to the resulting Element") .required(false) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -75,8 +87,9 @@ public class GetHTMLElement public static final PropertyDescriptor ATTRIBUTE_KEY = new PropertyDescriptor .Builder().name("Attribute Name") - .description(("When getting the value of an element attribute this value is used as the key to determine" + - " which attribute on the selected element should be retrieved.")) + .description(("When getting the value of a HTML element attribute this value is used as the key to determine" + + " which attribute on the selected element should be retrieved. This value is used when the \"Output Type\"" + + " is set to \"" + ELEMENT_ATTRIBUTE + "\"")) .required(false) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .expressionLanguageSupported(true) @@ -85,8 +98,7 @@ public class GetHTMLElement public static final PropertyDescriptor OUTPUT_TYPE = new PropertyDescriptor.Builder() .name("Output Type") - .description("Controls the type of value that is retrieved from the element. " + - ELEMENT_HTML + "," + ELEMENT_TEXT + ", " + ELEMENT_ATTRIBUTE + " or " + ELEMENT_DATA) + .description("Controls the type of DOM value that is retrieved from the HTML element.") .required(true) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .allowableValues(ELEMENT_HTML, ELEMENT_TEXT, ELEMENT_ATTRIBUTE, ELEMENT_DATA) @@ -122,7 +134,7 @@ public class GetHTMLElement final Set<Relationship> relationships = new HashSet<>(); relationships.add(REL_ORIGINAL); relationships.add(REL_SUCCESS); - relationships.add(REL_FAILURE); + relationships.add(REL_INVALID_HTML); relationships.add(REL_NOT_FOUND); this.relationships = Collections.unmodifiableSet(relationships); } @@ -148,7 +160,7 @@ public class GetHTMLElement final Document doc = parseHTMLDocumentFromFlowfile(flowFile, context, session); final Elements eles = doc.select(context.getProperty(CSS_SELECTOR) - .evaluateAttributeExpressions().getValue()); + .evaluateAttributeExpressions(flowFile).getValue()); final String prependValue = context.getProperty(PREPEND_ELEMENT_VALUE) .evaluateAttributeExpressions(flowFile).getValue(); final String appendValue = context.getProperty(APPEND_ELEMENT_VALUE) @@ -159,7 +171,7 @@ public class GetHTMLElement session.transfer(flowFile, REL_NOT_FOUND); } else { for (final Element ele : eles) { - final FlowFile ff = session.create(); + final FlowFile ff = session.create(flowFile); switch (context.getProperty(DESTINATION).getValue()) { case DESTINATION_ATTRIBUTE: @@ -171,7 +183,6 @@ public class GetHTMLElement ele, context.getProperty(ATTRIBUTE_KEY).evaluateAttributeExpressions() .getValue())); - session.getProvenanceReporter().create(atFlowfile); session.transfer(atFlowfile, REL_SUCCESS); break; case DESTINATION_CONTENT: @@ -187,12 +198,12 @@ public class GetHTMLElement context.getProperty(ATTRIBUTE_KEY).evaluateAttributeExpressions() .getValue()).getBytes()); } catch (Exception ex) { - session.transfer(ff, REL_FAILURE); + getLogger().error(ex.getMessage()); + session.transfer(ff, REL_INVALID_HTML); } } }); - session.getProvenanceReporter().create(conFlowfile); session.transfer(conFlowfile, REL_SUCCESS); break; } @@ -205,7 +216,7 @@ public class GetHTMLElement } catch (Exception ex) { getLogger().error(ex.getMessage()); - session.transfer(flowFile, REL_FAILURE); + session.transfer(flowFile, REL_INVALID_HTML); } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/ModifyHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/ModifyHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/ModifyHTMLElement.java index 425d8fa..0829158 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/ModifyHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/ModifyHTMLElement.java @@ -16,6 +16,8 @@ */ package org.apache.nifi; +import org.apache.nifi.annotation.behavior.InputRequirement; +import org.apache.nifi.annotation.behavior.SupportsBatching; import org.apache.nifi.annotation.behavior.WritesAttribute; import org.apache.nifi.annotation.behavior.WritesAttributes; import org.apache.nifi.annotation.documentation.CapabilityDescription; @@ -44,7 +46,17 @@ import java.util.HashSet; import java.util.Collections; @Tags({"modify", "html", "dom", "css", "element"}) -@CapabilityDescription("Modifies the value of an existing HTML element in the original input HTML") +@SupportsBatching +@InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED) +@CapabilityDescription("Modifies the value of an existing HTML element. The desired element to be modified is located by" + + " using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML elements may be selected" + + " in the similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \"queried\"" + + " using the user defined CSS selector string to find the element the user desires to modify. If the HTML element is found" + + " the element's value is updated in the DOM using the value specified \"Modified Value\" property. All DOM elements" + + " that match the CSS selector will be updated. Once all of the DOM elements have been updated the DOM is rendered" + + " to HTML and the result replaces the flowfile content with the updated HTML. A more thorough reference for the" + + " CSS selector syntax can be found at" + + " \"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\"") @SeeAlso({GetHTMLElement.class, PutHTMLElement.class}) @WritesAttributes({@WritesAttribute(attribute="NumElementsModified", description="Total number of HTML " + "element modifications made")}) @@ -96,7 +108,6 @@ public class ModifyHTMLElement extends AbstractHTMLProcessor { final Set<Relationship> relationships = new HashSet<Relationship>(); relationships.add(REL_ORIGINAL); relationships.add(REL_SUCCESS); - relationships.add(REL_FAILURE); relationships.add(REL_INVALID_HTML); relationships.add(REL_NOT_FOUND); this.relationships = Collections.unmodifiableSet(relationships); @@ -157,7 +168,7 @@ public class ModifyHTMLElement extends AbstractHTMLProcessor { } catch (Exception ex) { getLogger().error(ex.getMessage()); - session.transfer(flowFile, REL_FAILURE); + session.transfer(flowFile, REL_INVALID_HTML); } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/PutHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/PutHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/PutHTMLElement.java index f0a8c39..2af31d5 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/PutHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/main/java/org/apache/nifi/PutHTMLElement.java @@ -16,6 +16,8 @@ */ package org.apache.nifi; +import org.apache.nifi.annotation.behavior.InputRequirement; +import org.apache.nifi.annotation.behavior.SupportsBatching; import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.SeeAlso; import org.apache.nifi.annotation.documentation.Tags; @@ -42,7 +44,15 @@ import java.util.HashSet; import java.util.Collections; @Tags({"put", "html", "dom", "css", "element"}) -@CapabilityDescription("Creates a new HTML element in the input HTML") +@SupportsBatching +@InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED) +@CapabilityDescription("Places a new HTML element in the existing HTML DOM. The desired position for the new HTML element is specified by" + + " using CSS selector syntax. The incoming HTML is first converted into a HTML Document Object Model so that HTML DOM location may be located" + + " in a similar manner that CSS selectors are used to apply styles to HTML. The resulting HTML DOM is then \"queried\"" + + " using the user defined CSS selector string to find the position where the user desires to add the new HTML element." + + " Once the new HTML element is added to the DOM it is rendered to HTML and the result replaces the flowfile" + + " content with the updated HTML. A more thorough reference for the CSS selector syntax can be found at" + + " \"http://jsoup.org/apidocs/org/jsoup/select/Selector.html\"") @SeeAlso({GetHTMLElement.class, ModifyHTMLElement.class}) public class PutHTMLElement extends AbstractHTMLProcessor { @@ -64,7 +74,7 @@ public class PutHTMLElement extends AbstractHTMLProcessor { .name("Put Value") .description("Value used when creating the new Element. Value should be a valid HTML element. " + "The text should be supplied unencoded: characters like '<', '>', etc will be properly HTML " + - "encoded in the output.") + "encoded in the resulting output.") .required(true) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .expressionLanguageSupported(true) @@ -87,8 +97,8 @@ public class PutHTMLElement extends AbstractHTMLProcessor { final Set<Relationship> relationships = new HashSet<Relationship>(); relationships.add(REL_ORIGINAL); relationships.add(REL_SUCCESS); - relationships.add(REL_FAILURE); relationships.add(REL_INVALID_HTML); + relationships.add(REL_NOT_FOUND); this.relationships = Collections.unmodifiableSet(relationships); } @@ -120,10 +130,10 @@ public class PutHTMLElement extends AbstractHTMLProcessor { for (Element ele : eles) { switch (context.getProperty(PUT_LOCATION_TYPE).getValue()) { case APPEND_ELEMENT: - ele.append(context.getProperty(PUT_VALUE).evaluateAttributeExpressions().getValue()); + ele.append(context.getProperty(PUT_VALUE).evaluateAttributeExpressions(flowFile).getValue()); break; case PREPEND_ELEMENT: - ele.prepend(context.getProperty(PUT_VALUE).evaluateAttributeExpressions().getValue()); + ele.prepend(context.getProperty(PUT_VALUE).evaluateAttributeExpressions(flowFile).getValue()); break; } } @@ -142,7 +152,7 @@ public class PutHTMLElement extends AbstractHTMLProcessor { } catch (Exception ex) { getLogger().error(ex.getMessage()); - session.transfer(flowFile, REL_FAILURE); + session.transfer(flowFile, REL_INVALID_HTML); } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/AbstractHTMLTest.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/AbstractHTMLTest.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/AbstractHTMLTest.java index 88f4c63..10bc33e 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/AbstractHTMLTest.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/AbstractHTMLTest.java @@ -16,15 +16,7 @@ */ package org.apache.nifi; -import org.apache.nifi.flowfile.FlowFile; -import org.apache.nifi.processor.ProcessSession; -import org.apache.nifi.processor.io.StreamCallback; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class AbstractHTMLTest { +public abstract class AbstractHTMLTest { protected final String ATL_WEATHER_TEXT = "Atlanta Weather"; protected final String GDR_WEATHER_TEXT = "<i>Grand Rapids Weather</i>"; @@ -33,42 +25,4 @@ public class AbstractHTMLTest { protected final String AUTHOR_NAME = "Jeremy Dyer"; protected final String ATL_ID = "ATL"; protected final String GDR_ID = "GDR"; - - protected final String HTML = "<!doctype html>\n" + - "\n" + - "<html lang=\"en\">\n" + - "<head>\n" + - " <meta charset=\"utf-8\">\n" + - "\n" + - " <title>NiFi HTML Parsing Demo</title>\n" + - " <meta name=\"description\" content=\"NiFi HTML Parsing Demo\">\n" + - " <meta name=\"author\" content=\"" + AUTHOR_NAME + "\">\n" + - "\n" + - " <link rel=\"stylesheet\" href=\"css/styles.css?v=1.0\">\n" + - "\n" + - " <!--[if lt IE 9]>\n" + - " <script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n" + - " <![endif]-->\n" + - "</head>\n" + - "\n" + - "<body>\n" + - " <script src=\"js/scripts.js\"></script>\n" + - " <p>Check out this weather! <a id=\"" + ATL_ID + "\" href=\"" + - ATL_WEATHER_LINK + "\">" + ATL_WEATHER_TEXT + "</a></p>\n" + - " <p>I guess it could be colder ... <a id=\"" + GDR_ID + "\" href=\"" + - GR_WEATHER_LINK + "\">" + GDR_WEATHER_TEXT + "</a></p>\n" + - " <div id=\"put\"><a href=\"httpd://localhost\" /></div>\n" + - "</body>\n" + - "</html>"; - - - protected FlowFile writeContentToNewFlowFile(final byte[] content, ProcessSession session) { - FlowFile ff = session.write(session.create(), new StreamCallback() { - @Override - public void process(InputStream in, OutputStream out) throws IOException { - out.write(content); - } - }); - return ff; - } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestGetHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestGetHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestGetHTMLElement.java index ae11768..1cc5d73 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestGetHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestGetHTMLElement.java @@ -16,20 +16,21 @@ */ package org.apache.nifi; -import org.apache.commons.lang3.StringUtils; -import org.apache.nifi.flowfile.FlowFile; -import org.apache.nifi.processor.ProcessSession; import org.apache.nifi.util.MockFlowFile; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.select.Selector; import org.junit.Before; import org.junit.Test; +import java.io.File; +import java.io.IOException; import java.lang.Exception; +import java.net.URL; import java.util.List; -import static org.junit.Assert.assertTrue; - public class TestGetHTMLElement extends AbstractHTMLTest { private TestRunner testRunner; @@ -44,18 +45,25 @@ public class TestGetHTMLElement extends AbstractHTMLTest { } @Test + public void testCSSSelectorSyntaxValidator() throws IOException { + Document doc = Jsoup.parse(new URL("http://www.google.com"), 5000); + try { + doc.select("---jeremy"); + } catch (Selector.SelectorParseException ex) { + String mes = ex.getMessage(); + ex.printStackTrace(); + } + } + + @Test public void testNoElementFound() throws Exception { testRunner.setProperty(GetHTMLElement.CSS_SELECTOR, "b"); //Bold element is not present in sample HTML -// testRunner.setProperty(GetHTMLElement.APPEND_ELEMENT_VALUE, ""); - - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 0); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 1); } @@ -63,14 +71,11 @@ public class TestGetHTMLElement extends AbstractHTMLTest { public void testInvalidSelector() throws Exception { testRunner.setProperty(GetHTMLElement.CSS_SELECTOR, "InvalidCSSSelectorSyntax"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 0); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 1); } @@ -78,14 +83,11 @@ public class TestGetHTMLElement extends AbstractHTMLTest { public void testSingleElementFound() throws Exception { testRunner.setProperty(GetHTMLElement.CSS_SELECTOR, "head"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); } @@ -94,14 +96,11 @@ public class TestGetHTMLElement extends AbstractHTMLTest { public void testMultipleElementFound() throws Exception { testRunner.setProperty(GetHTMLElement.CSS_SELECTOR, "a"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 3); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); } @@ -113,22 +112,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_ATTRIBUTE); testRunner.setProperty(GetHTMLElement.ATTRIBUTE_KEY, "href"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - MockFlowFile fff = ffs.get(0); - String atValue = fff.getAttribute(GetHTMLElement.HTML_ELEMENT_ATTRIBUTE_NAME); - assertTrue(StringUtils.equals(ATL_WEATHER_LINK, atValue)); + ffs.get(0).assertAttributeEquals(GetHTMLElement.HTML_ELEMENT_ATTRIBUTE_NAME, ATL_WEATHER_LINK); } @Test @@ -138,21 +131,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_ATTRIBUTE); testRunner.setProperty(GetHTMLElement.ATTRIBUTE_KEY, "href"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(ATL_WEATHER_LINK, data)); + ffs.get(0).assertContentEquals(ATL_WEATHER_LINK); } @Test @@ -164,21 +152,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_ATTRIBUTE); testRunner.setProperty(GetHTMLElement.ATTRIBUTE_KEY, "href"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(PREPEND_VALUE + ATL_WEATHER_LINK, data)); + ffs.get(0).assertContentEquals(PREPEND_VALUE + ATL_WEATHER_LINK); } @Test @@ -189,14 +172,11 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.DESTINATION, GetHTMLElement.DESTINATION_CONTENT); testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_TEXT); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 0); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 0); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 1); } @@ -210,21 +190,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_ATTRIBUTE); testRunner.setProperty(GetHTMLElement.ATTRIBUTE_KEY, "href"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(ATL_WEATHER_LINK + APPEND_VALUE, data)); + ffs.get(0).assertContentEquals(ATL_WEATHER_LINK + APPEND_VALUE); } @Test @@ -235,14 +210,11 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.DESTINATION, GetHTMLElement.DESTINATION_CONTENT); testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_TEXT); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 0); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 0); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 1); } @@ -254,21 +226,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_ATTRIBUTE); testRunner.setProperty(GetHTMLElement.ATTRIBUTE_KEY, "Content"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(AUTHOR_NAME, data)); + ffs.get(0).assertContentEquals(AUTHOR_NAME); } @Test @@ -277,21 +244,16 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.DESTINATION, GetHTMLElement.DESTINATION_CONTENT); testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_TEXT); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(ATL_WEATHER_TEXT, data)); + ffs.get(0).assertContentEquals(ATL_WEATHER_TEXT); } @Test @@ -300,20 +262,15 @@ public class TestGetHTMLElement extends AbstractHTMLTest { testRunner.setProperty(GetHTMLElement.DESTINATION, GetHTMLElement.DESTINATION_CONTENT); testRunner.setProperty(GetHTMLElement.OUTPUT_TYPE, GetHTMLElement.ELEMENT_HTML); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(GetHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(GetHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(GetHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(GetHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(GetHTMLElement.REL_NOT_FOUND, 0); List<MockFlowFile> ffs = testRunner.getFlowFilesForRelationship(GetHTMLElement.REL_SUCCESS); - assertTrue(ffs.size() == 1); - String data = new String(testRunner.getContentAsByteArray(ffs.get(0))); - assertTrue(StringUtils.equals(GDR_WEATHER_TEXT, data)); + ffs.get(0).assertContentEquals(GDR_WEATHER_TEXT); } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestModifyHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestModifyHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestModifyHTMLElement.java index 010107f..a45feb3 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestModifyHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestModifyHTMLElement.java @@ -17,8 +17,6 @@ package org.apache.nifi; import org.apache.commons.lang3.StringUtils; -import org.apache.nifi.flowfile.FlowFile; -import org.apache.nifi.processor.ProcessSession; import org.apache.nifi.util.MockFlowFile; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; @@ -29,6 +27,7 @@ import org.jsoup.select.Elements; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.List; import static org.junit.Assert.assertNotNull; @@ -54,14 +53,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.OUTPUT_TYPE, ModifyHTMLElement.ELEMENT_TEXT); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 0); @@ -86,14 +82,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.OUTPUT_TYPE, ModifyHTMLElement.ELEMENT_TEXT); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, "${\" " + MOD_VALUE + " \":trim()}"); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 0); @@ -116,14 +109,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.OUTPUT_TYPE, ModifyHTMLElement.ELEMENT_HTML); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 0); @@ -147,14 +137,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.ATTRIBUTE_KEY, "href"); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 0); @@ -177,14 +164,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.OUTPUT_TYPE, ModifyHTMLElement.ELEMENT_HTML); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 0); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 1); } @@ -196,14 +180,11 @@ public class TestModifyHTMLElement extends AbstractHTMLTest { testRunner.setProperty(ModifyHTMLElement.OUTPUT_TYPE, ModifyHTMLElement.ELEMENT_HTML); testRunner.setProperty(ModifyHTMLElement.MODIFIED_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(ModifyHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(ModifyHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(ModifyHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(ModifyHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(ModifyHTMLElement.REL_NOT_FOUND, 0); http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestPutHTMLElement.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestPutHTMLElement.java b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestPutHTMLElement.java index 1dcc085..b842ccb 100644 --- a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestPutHTMLElement.java +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/java/org/apache/nifi/TestPutHTMLElement.java @@ -17,8 +17,6 @@ package org.apache.nifi; import org.apache.commons.lang3.StringUtils; -import org.apache.nifi.flowfile.FlowFile; -import org.apache.nifi.processor.ProcessSession; import org.apache.nifi.util.MockFlowFile; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; @@ -29,6 +27,7 @@ import org.jsoup.select.Elements; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.List; import static org.junit.Assert.assertTrue; @@ -50,14 +49,11 @@ public class TestPutHTMLElement extends AbstractHTMLTest { testRunner.setProperty(PutHTMLElement.PUT_LOCATION_TYPE, PutHTMLElement.PREPEND_ELEMENT); testRunner.setProperty(PutHTMLElement.PUT_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(PutHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(PutHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(PutHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(PutHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(PutHTMLElement.REL_NOT_FOUND, 0); @@ -80,14 +76,11 @@ public class TestPutHTMLElement extends AbstractHTMLTest { testRunner.setProperty(PutHTMLElement.PUT_LOCATION_TYPE, PutHTMLElement.PREPEND_ELEMENT); testRunner.setProperty(PutHTMLElement.PUT_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(PutHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(PutHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(PutHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(PutHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(PutHTMLElement.REL_NOT_FOUND, 0); @@ -110,14 +103,11 @@ public class TestPutHTMLElement extends AbstractHTMLTest { testRunner.setProperty(PutHTMLElement.PUT_LOCATION_TYPE, PutHTMLElement.APPEND_ELEMENT); testRunner.setProperty(PutHTMLElement.PUT_VALUE, MOD_VALUE); - ProcessSession session = testRunner.getProcessSessionFactory().createSession(); - FlowFile ff = writeContentToNewFlowFile(HTML.getBytes(), session); - - testRunner.enqueue(ff); + testRunner.enqueue(new File("src/test/resources/Weather.html").toPath()); testRunner.run(); testRunner.assertTransferCount(PutHTMLElement.REL_SUCCESS, 1); - testRunner.assertTransferCount(PutHTMLElement.REL_FAILURE, 0); + testRunner.assertTransferCount(PutHTMLElement.REL_INVALID_HTML, 0); testRunner.assertTransferCount(PutHTMLElement.REL_ORIGINAL, 1); testRunner.assertTransferCount(PutHTMLElement.REL_NOT_FOUND, 0); http://git-wip-us.apache.org/repos/asf/nifi/blob/ee7400ef/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/resources/Weather.html ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/resources/Weather.html b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/resources/Weather.html new file mode 100644 index 0000000..673f7cb --- /dev/null +++ b/nifi-nar-bundles/nifi-html-bundle/nifi-html-processors/src/test/resources/Weather.html @@ -0,0 +1,25 @@ +<!doctype html> +<html lang="en"> + <head> + <title>NiFi HTML Parsing Demo</title> + <meta charset="utf-8"> + <meta name="description" content="NiFi HTML Parsing Demo"> + <meta name="author" content="Jeremy Dyer"> + <link rel="stylesheet" href="css/styles.css?v=1.0"> + + <!--[if lt IE 9]> + <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + </head> + + <body> + <script src="js/scripts.js"></script> + <p>Check out this weather! + <a id="ATL" href="http://w1.weather.gov/obhistory/KPDK.html">Atlanta Weather</a> + </p> + <p>I guess it could be colder ... + <a id="GDR" href="http://w1.weather.gov/obhistory/KGRR.html"><i>Grand Rapids Weather</i></a> + </p> + <div id="put"><a href="httpd://localhost" /></div> + </body> +</html> \ No newline at end of file
