Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-1214

Mock Framework should allow order-independent assumptions on FlowFiles

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.1.0
    • Tools and Build
    • None

    Description

      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:

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

      This is very verbose, and error-prone. It could be done much more concisely if we have a method like:

      TestRunner.assertAllConditionsMet( Relationship relationship, FlowFileVerifier... verifier );
      

      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:

      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") }
      );
      

      Attachments

        Activity

          People

            Toivo Adams Toivo Adams
            markap14 Mark Payne
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: