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