You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by "Mark Payne (JIRA)" <ji...@apache.org> on 2016/04/06 20:04:25 UTC

[jira] [Commented] (NIFI-1214) Mock Framework should allow order-independent assumptions on FlowFiles

    [ https://issues.apache.org/jira/browse/NIFI-1214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15228771#comment-15228771 ] 

Mark Payne commented on NIFI-1214:
----------------------------------

Toivo,

Sorry, I never saw your comments above. re: Java 8, Yes, in the 1.0.0 version, Java 8 is a requirement. I will be happy to take a look at your PR as soon as I get chance. Thanks for jumping on this - very cool!!

> Mock Framework should allow order-independent assumptions on FlowFiles
> ----------------------------------------------------------------------
>
>                 Key: NIFI-1214
>                 URL: https://issues.apache.org/jira/browse/NIFI-1214
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Tools and Build
>            Reporter: Mark Payne
>            Assignee: Toivo Adams
>             Fix For: 1.0.0
>
>
> A common pattern in unit testing is to iterate over all FlowFiles that are output to a Relationship and verify that each FlowFile matches one criteria or another and that all criteria are met. For example, the following code snippet from TestRouteText  verifies that two FlowFiles were output and that Criteria A was met by one of them and Criteria B was met by the other:
> {code}
>         final List<MockFlowFile> list = runner.getFlowFilesForRelationship("o");
>         boolean found1 = false;
>         boolean found2 = false;
>         for (final MockFlowFile mff : list) {
>             if (mff.getAttribute(RouteText.GROUP_ATTRIBUTE_KEY).equals("1")) {
>                 mff.assertContentEquals("1,hello\n1,good-bye");
>                 found1 = true;
>             } else {
>                 mff.assertAttributeEquals(RouteText.GROUP_ATTRIBUTE_KEY, "2");
>                 mff.assertContentEquals("2,world\n");
>                 found2 = true;
>             }
>         }
>         assertTrue(found1);
>         assertTrue(found2);
> {code}
> This is very verbose, and error-prone. It could be done much more concisely if we have a method like:
> {code}
> TestRunner.assertAllConditionsMet( Relationship relationship, FlowFileVerifier... verifier );
> {code}
> Where FlowFileVerifier is able to verify some condition on a FlowFile. This method would then be responsible for ensuring that each FlowFile that was routed to 'relationship' meets one of the criteria specified by a verifier, and that all of the verifiers were met. For example:
> {code}
> runner.assertAllConditionsMet( "o", 
> { mff -> mff.isAttributeEqual(RouteText.GROUP_ATTRIBUTE_KEY, "1") && mff.isContentEqual("1,hello\n1,good-bye") },
> { mff -> mff.isAttributeEqual(RouteText.GROUP_ATTRIBUTE_KEY, "2") && mff.isContentEqual("2,world\n") }
> );
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)