Search in sources :

Example 11 with UpdateAttribute

use of org.apache.nifi.processors.attributes.UpdateAttribute in project nifi by apache.

the class TestUpdateAttribute method testMultipleRuleHitsWithUseOriginalDoesntApplyDefaultsRepeatedly.

@Test
public void testMultipleRuleHitsWithUseOriginalDoesntApplyDefaultsRepeatedly() throws Exception {
    final Criteria criteria = getCriteria();
    criteria.setFlowFilePolicy(FlowFilePolicy.USE_ORIGINAL);
    addRule(criteria, "rule 1", Arrays.asList(// conditions
    "${attribute.1:equals('value.1')}"), getMap(// actions
    "attribute.2", "value.2"));
    addRule(criteria, "rule 2", Arrays.asList(// conditions
    "${attribute.1:equals('value.1')}"), getMap(// actions
    "attribute.3", "value.3"));
    addRule(criteria, "rule 3", Arrays.asList(// conditions
    "${attribute.1:equals('value.1')}"), getMap(// actions
    "attribute.2", "value.3"));
    final TestRunner runner = TestRunners.newTestRunner(new UpdateAttribute());
    runner.setAnnotationData(serialize(criteria));
    runner.setProperty("default.attr", "${default.attr}-more-stuff");
    final Map<String, String> attributes = new HashMap<>();
    attributes.put("attribute.1", "value.1");
    runner.enqueue(TEST_CONTENT.getBytes(StandardCharsets.UTF_8), attributes);
    runner.run();
    runner.assertAllFlowFilesTransferred(UpdateAttribute.REL_SUCCESS, 1);
    final List<MockFlowFile> result = runner.getFlowFilesForRelationship(UpdateAttribute.REL_SUCCESS);
    final MockFlowFile flowfile = result.get(0);
    // ensure the attributes are as expected
    flowfile.assertAttributeEquals("default.attr", "-more-stuff");
}
Also used : MockFlowFile(org.apache.nifi.util.MockFlowFile) HashMap(java.util.HashMap) TestRunner(org.apache.nifi.util.TestRunner) UpdateAttribute(org.apache.nifi.processors.attributes.UpdateAttribute) Test(org.junit.Test)

Example 12 with UpdateAttribute

use of org.apache.nifi.processors.attributes.UpdateAttribute in project nifi by apache.

the class TestUpdateAttribute method testMultipleRuleHitsWithUseClone.

@Test
public void testMultipleRuleHitsWithUseClone() throws Exception {
    final Criteria criteria = getCriteria();
    criteria.setFlowFilePolicy(FlowFilePolicy.USE_CLONE);
    addRule(criteria, "rule 1", Arrays.asList(// conditions
    "${attribute.1:equals('value.1')}"), getMap(// actions
    "attribute.2", "value.2"));
    addRule(criteria, "rule 2", Arrays.asList(// conditions
    "${attribute.1:equals('value.1')}"), getMap(// actions
    "attribute.3", "value.3"));
    final TestRunner runner = TestRunners.newTestRunner(new UpdateAttribute());
    runner.setAnnotationData(serialize(criteria));
    runner.setProperty("attribute.2", "default.value.2");
    final Map<String, String> attributes = new HashMap<>();
    attributes.put("attribute.1", "value.1");
    runner.enqueue(TEST_CONTENT.getBytes(StandardCharsets.UTF_8), attributes);
    runner.run();
    runner.assertAllFlowFilesTransferred(UpdateAttribute.REL_SUCCESS, 2);
    final List<MockFlowFile> result = runner.getFlowFilesForRelationship(UpdateAttribute.REL_SUCCESS);
    final MockFlowFile flowfile1 = result.get(0);
    final MockFlowFile flowfile2 = result.get(1);
    // ensure the attributes are as expected
    if ("rule 1".equals(flowfile1.getAttribute(runner.getProcessor().getClass().getSimpleName() + ".matchedRule"))) {
        flowfile1.assertAttributeEquals("attribute.2", "value.2");
        flowfile2.assertAttributeEquals("attribute.3", "value.3");
        flowfile2.assertAttributeEquals("attribute.2", "default.value.2");
    } else {
        flowfile2.assertAttributeEquals("attribute.2", "value.2");
        flowfile1.assertAttributeEquals("attribute.3", "value.3");
        flowfile1.assertAttributeEquals("attribute.2", "default.value.2");
    }
    // ensure the content was copied as well
    flowfile1.assertContentEquals(TEST_CONTENT.getBytes(StandardCharsets.UTF_8));
    flowfile2.assertContentEquals(TEST_CONTENT.getBytes(StandardCharsets.UTF_8));
}
Also used : MockFlowFile(org.apache.nifi.util.MockFlowFile) HashMap(java.util.HashMap) TestRunner(org.apache.nifi.util.TestRunner) UpdateAttribute(org.apache.nifi.processors.attributes.UpdateAttribute) Test(org.junit.Test)

Example 13 with UpdateAttribute

use of org.apache.nifi.processors.attributes.UpdateAttribute in project nifi by apache.

the class TestUpdateAttribute method testStateFailuresWithRulesUsingClone.

@Test
public void testStateFailuresWithRulesUsingClone() throws Exception {
    final Criteria criteria = getCriteria();
    criteria.setFlowFilePolicy(FlowFilePolicy.USE_CLONE);
    addRule(criteria, "rule", Collections.singletonList(// conditions
    "${getStateValue('maxValue'):lt(${value})}"), getMap(// actions
    "maxValue", "${value}"));
    addRule(criteria, "rule2", Collections.singletonList(// conditions
    "${getStateValue('maxValue2'):lt(${value})}"), getMap(// actions
    "maxValue2", "${value}"));
    TestRunner runner = TestRunners.newTestRunner(new UpdateAttribute());
    final UpdateAttribute processor = (UpdateAttribute) runner.getProcessor();
    final ProcessSessionFactory processSessionFactory = runner.getProcessSessionFactory();
    MockStateManager mockStateManager = runner.getStateManager();
    runner.setProperty(UpdateAttribute.STORE_STATE, STORE_STATE_LOCALLY);
    runner.setProperty(UpdateAttribute.STATEFUL_VARIABLES_INIT_VALUE, "0");
    runner.setAnnotationData(serialize(criteria));
    processor.onScheduled(runner.getProcessContext());
    final Map<String, String> attributes = new HashMap<>();
    attributes.put("value", "1");
    runner.enqueue(new byte[0], attributes);
    mockStateManager.setFailOnStateGet(Scope.LOCAL, true);
    processor.onTrigger(runner.getProcessContext(), processSessionFactory.createSession());
    runner.assertQueueNotEmpty();
    mockStateManager.setFailOnStateGet(Scope.LOCAL, false);
    mockStateManager.setFailOnStateSet(Scope.LOCAL, true);
    processor.onTrigger(runner.getProcessContext(), processSessionFactory.createSession());
    runner.assertQueueEmpty();
    runner.assertAllFlowFilesTransferred(UpdateAttribute.REL_FAILED_SET_STATE, 1);
    runner.getFlowFilesForRelationship(UpdateAttribute.REL_FAILED_SET_STATE).get(0).assertAttributeEquals("maxValue", "1");
    runner.getFlowFilesForRelationship(UpdateAttribute.REL_FAILED_SET_STATE).get(0).assertAttributeNotExists("maxValue2");
}
Also used : MockStateManager(org.apache.nifi.state.MockStateManager) HashMap(java.util.HashMap) TestRunner(org.apache.nifi.util.TestRunner) UpdateAttribute(org.apache.nifi.processors.attributes.UpdateAttribute) ProcessSessionFactory(org.apache.nifi.processor.ProcessSessionFactory) Test(org.junit.Test)

Example 14 with UpdateAttribute

use of org.apache.nifi.processors.attributes.UpdateAttribute in project nifi by apache.

the class TestUpdateAttribute method testDefault.

@Test
public void testDefault() throws Exception {
    final TestRunner runner = TestRunners.newTestRunner(new UpdateAttribute());
    runner.setProperty("attribute.1", "value.1");
    runner.setProperty("attribute.2", "new.value.2");
    final Map<String, String> attributes = new HashMap<>();
    attributes.put("attribute.2", "old.value.2");
    runner.enqueue(new byte[0], attributes);
    runner.run();
    runner.assertAllFlowFilesTransferred(UpdateAttribute.REL_SUCCESS, 1);
    final List<MockFlowFile> result = runner.getFlowFilesForRelationship(UpdateAttribute.REL_SUCCESS);
    result.get(0).assertAttributeEquals("attribute.1", "value.1");
    result.get(0).assertAttributeEquals("attribute.2", "new.value.2");
}
Also used : MockFlowFile(org.apache.nifi.util.MockFlowFile) HashMap(java.util.HashMap) TestRunner(org.apache.nifi.util.TestRunner) UpdateAttribute(org.apache.nifi.processors.attributes.UpdateAttribute) Test(org.junit.Test)

Example 15 with UpdateAttribute

use of org.apache.nifi.processors.attributes.UpdateAttribute in project nifi by apache.

the class TestUpdateAttribute method testRuleMissBecauseValueNoMatch.

@Test
public void testRuleMissBecauseValueNoMatch() throws Exception {
    final Criteria criteria = getCriteria();
    addRule(criteria, "rule", Arrays.asList(// conditions
    "${attribute1:equals('not.value.1')}"), getMap(// actions
    "attribute.2", "value.2"));
    final TestRunner runner = TestRunners.newTestRunner(new UpdateAttribute());
    runner.setAnnotationData(serialize(criteria));
    final Map<String, String> attributes = new HashMap<>();
    attributes.put("attribute.1", "value.1");
    runner.enqueue(new byte[0], attributes);
    runner.run();
    runner.assertAllFlowFilesTransferred(UpdateAttribute.REL_SUCCESS, 1);
    final List<MockFlowFile> result = runner.getFlowFilesForRelationship(UpdateAttribute.REL_SUCCESS);
    result.get(0).assertAttributeEquals("attribute.1", "value.1");
    result.get(0).assertAttributeNotExists("attribute.2");
}
Also used : MockFlowFile(org.apache.nifi.util.MockFlowFile) HashMap(java.util.HashMap) TestRunner(org.apache.nifi.util.TestRunner) UpdateAttribute(org.apache.nifi.processors.attributes.UpdateAttribute) Test(org.junit.Test)

Aggregations

UpdateAttribute (org.apache.nifi.processors.attributes.UpdateAttribute)32 TestRunner (org.apache.nifi.util.TestRunner)32 Test (org.junit.Test)32 HashMap (java.util.HashMap)31 MockFlowFile (org.apache.nifi.util.MockFlowFile)21 ProcessSessionFactory (org.apache.nifi.processor.ProcessSessionFactory)3 MockStateManager (org.apache.nifi.state.MockStateManager)3 ProcessException (org.apache.nifi.processor.exception.ProcessException)1