You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Joseph Witt (JIRA)" <ji...@apache.org> on 2016/07/29 01:10:20 UTC

[jira] [Updated] (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:all-tabpanel ]

Joseph Witt updated NIFI-1214:
------------------------------
    Fix Version/s:     (was: 1.0.0)

> 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
>
> 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)