Java Code Examples for org.apache.nifi.util.TestRunner#getStateManager()
The following examples show how to use
org.apache.nifi.util.TestRunner#getStateManager() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: TestAbstractListProcessor.java From localization_nifi with Apache License 2.0 | 6 votes |
@Test public void testStateMigratedFromCacheService() throws InitializationException { final ConcreteListProcessor proc = new ConcreteListProcessor(); final TestRunner runner = TestRunners.newTestRunner(proc); final DistributedCache cache = new DistributedCache(); runner.addControllerService("cache", cache); runner.enableControllerService(cache); runner.setProperty(AbstractListProcessor.DISTRIBUTED_CACHE_SERVICE, "cache"); final String serviceState = "{\"latestTimestamp\":1492,\"matchingIdentifiers\":[\"id\"]}"; final String cacheKey = runner.getProcessor().getIdentifier() + ".lastListingTime./path"; cache.stored.put(cacheKey, serviceState); runner.run(); final MockStateManager stateManager = runner.getStateManager(); final Map<String, String> expectedState = new HashMap<>(); // Ensure only timestamp is migrated expectedState.put(AbstractListProcessor.LISTING_TIMESTAMP_KEY, "1492"); expectedState.put(AbstractListProcessor.PROCESSED_TIMESTAMP_KEY, "1492"); stateManager.assertStateEquals(expectedState, Scope.CLUSTER); }
Example 2
Source File: TestState.java From nifi-scripting-samples with Apache License 2.0 | 6 votes |
/** * Demonstrates reading and writing processor state values * @throws Exception */ @Test public void testStateJavascript() throws Exception { final TestRunner runner = TestRunners.newTestRunner(new ExecuteScript()); runner.setValidateExpressionUsage(false); runner.setProperty(SCRIPT_ENGINE, "ECMAScript"); runner.setProperty(ScriptingComponentUtils.SCRIPT_FILE, "src/test/resources/executescript/state/state.js"); runner.setProperty(ScriptingComponentUtils.MODULES, "src/test/resources/executescript"); runner.assertValid(); StateManager stateManager = runner.getStateManager(); stateManager.clear(Scope.CLUSTER); Map<String, String> initialStateValues = new HashMap<>(); initialStateValues.put("some-state", "foo"); stateManager.setState(initialStateValues, Scope.CLUSTER); runner.enqueue("sample text".getBytes(StandardCharsets.UTF_8)); runner.run(); runner.assertAllFlowFilesTransferred("success", 1); StateMap resultStateValues = stateManager.getState(Scope.CLUSTER); Assert.assertEquals("foobar", resultStateValues.get("some-state")); }
Example 3
Source File: TestState.java From nifi-scripting-samples with Apache License 2.0 | 6 votes |
/** * Demonstrates reading and writing processor state values * @throws Exception */ @Test public void testStatePython() throws Exception { final TestRunner runner = TestRunners.newTestRunner(new ExecuteScript()); runner.setValidateExpressionUsage(false); runner.setProperty(SCRIPT_ENGINE, "python"); runner.setProperty(ScriptingComponentUtils.SCRIPT_FILE, "src/test/resources/executescript/state/state.py"); runner.setProperty(ScriptingComponentUtils.MODULES, "src/test/resources/executescript"); runner.assertValid(); StateManager stateManager = runner.getStateManager(); stateManager.clear(Scope.CLUSTER); Map<String, String> initialStateValues = new HashMap<>(); initialStateValues.put("some-state", "foo"); stateManager.setState(initialStateValues, Scope.CLUSTER); runner.enqueue("sample text".getBytes(StandardCharsets.UTF_8)); runner.run(); runner.assertAllFlowFilesTransferred("success", 1); StateMap resultStateValues = stateManager.getState(Scope.CLUSTER); Assert.assertEquals("foobar", resultStateValues.get("some-state")); }
Example 4
Source File: TestAbstractListProcessor.java From localization_nifi with Apache License 2.0 | 5 votes |
@Test public void testNoStateToMigrate() throws Exception { final ConcreteListProcessor proc = new ConcreteListProcessor(); final TestRunner runner = TestRunners.newTestRunner(proc); runner.run(); final MockStateManager stateManager = runner.getStateManager(); final Map<String, String> expectedState = new HashMap<>(); stateManager.assertStateEquals(expectedState, Scope.CLUSTER); }
Example 5
Source File: TestAttributeRollingWindow.java From localization_nifi with Apache License 2.0 | 5 votes |
@Test public void testStateFailures() throws InterruptedException, IOException { final TestRunner runner = TestRunners.newTestRunner(AttributeRollingWindow.class); MockStateManager mockStateManager = runner.getStateManager(); final AttributeRollingWindow processor = (AttributeRollingWindow) runner.getProcessor(); final ProcessSessionFactory processSessionFactory = runner.getProcessSessionFactory(); runner.setProperty(AttributeRollingWindow.VALUE_TO_TRACK, "${value}"); runner.setProperty(AttributeRollingWindow.TIME_WINDOW, "3 sec"); processor.onScheduled(runner.getProcessContext()); final Map<String, String> attributes = new HashMap<>(); attributes.put("value", "1"); mockStateManager.setFailOnStateGet(Scope.LOCAL, true); runner.enqueue(new byte[0],attributes); 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(AttributeRollingWindow.REL_FAILED_SET_STATE, 1); MockFlowFile mockFlowFile = runner.getFlowFilesForRelationship(REL_FAILED_SET_STATE).get(0); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_VALUE_KEY); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_COUNT_KEY); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_MEAN_KEY); }
Example 6
Source File: TestUpdateAttribute.java From localization_nifi with Apache License 2.0 | 5 votes |
@Test public void testStateFailures() throws Exception { final 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("count", "${getStateValue('count'):plus(1)}"); runner.setProperty("sum", "${getStateValue('sum'):plus(${pencils})}"); runner.setProperty(UpdateAttribute.STATEFUL_VARIABLES_INIT_VALUE, "0"); processor.onScheduled(runner.getProcessContext()); final Map<String, String> attributes2 = new HashMap<>(); attributes2.put("pencils", "2"); mockStateManager.setFailOnStateGet(Scope.LOCAL, true); runner.enqueue(new byte[0],attributes2); 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("count", "1"); runner.getFlowFilesForRelationship(UpdateAttribute.REL_FAILED_SET_STATE).get(0).assertAttributeEquals("sum", "2"); }
Example 7
Source File: TestEnforceOrder.java From nifi with Apache License 2.0 | 5 votes |
@Test public void testMaxOrder() { final TestRunner runner = TestRunners.newTestRunner(EnforceOrder.class); runner.setProperty(EnforceOrder.GROUP_IDENTIFIER, "${fragment.identifier}"); runner.setProperty(EnforceOrder.ORDER_ATTRIBUTE, "index"); runner.setProperty(EnforceOrder.INITIAL_ORDER, "1"); runner.setProperty(EnforceOrder.MAX_ORDER, "${fragment.count}"); runner.assertValid(); runner.enqueue("b.1", Ordered.i(1).put("fragment.identifier", "b").put("fragment.count", "3").map()); runner.enqueue("a.2", Ordered.i(2).put("fragment.identifier", "a").put("fragment.count", "2").map()); runner.enqueue("without max order", Ordered.i(1).put("fragment.identifier", "c").map()); runner.enqueue("illegal max order", Ordered.i(1).put("fragment.identifier", "d").put("fragment.count", "X").map()); runner.enqueue("a.1", Ordered.i(1).put("fragment.identifier", "a").put("fragment.count", "2").map()); runner.enqueue("a.3", Ordered.i(3).put("fragment.identifier", "a").put("fragment.count", "2").map()); // Exceed max runner.run(); final List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(EnforceOrder.REL_SUCCESS); succeeded.sort(new FirstInFirstOutPrioritizer()); assertEquals(3, succeeded.size()); succeeded.get(0).assertContentEquals("a.1"); succeeded.get(1).assertContentEquals("a.2"); succeeded.get(2).assertContentEquals("b.1"); final List<MockFlowFile> failed = runner.getFlowFilesForRelationship(EnforceOrder.REL_FAILURE); assertEquals(3, failed.size()); failed.get(0).assertContentEquals("without max order"); failed.get(1).assertContentEquals("illegal max order"); failed.get(2).assertContentEquals("a.3"); // exceeds max order final MockStateManager stateManager = runner.getStateManager(); stateManager.assertStateEquals("a.target", "2", Scope.LOCAL); stateManager.assertStateEquals("a.max", "2", Scope.LOCAL); }
Example 8
Source File: AttributeRollingWindowIT.java From nifi with Apache License 2.0 | 5 votes |
@Test public void testStateFailures() throws InterruptedException, IOException { final TestRunner runner = TestRunners.newTestRunner(AttributeRollingWindow.class); MockStateManager mockStateManager = runner.getStateManager(); final AttributeRollingWindow processor = (AttributeRollingWindow) runner.getProcessor(); final ProcessSessionFactory processSessionFactory = runner.getProcessSessionFactory(); runner.setProperty(AttributeRollingWindow.VALUE_TO_TRACK, "${value}"); runner.setProperty(AttributeRollingWindow.TIME_WINDOW, "3 sec"); processor.onScheduled(runner.getProcessContext()); final Map<String, String> attributes = new HashMap<>(); attributes.put("value", "1"); mockStateManager.setFailOnStateGet(Scope.LOCAL, true); runner.enqueue(new byte[0],attributes); 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(AttributeRollingWindow.REL_FAILED_SET_STATE, 1); MockFlowFile mockFlowFile = runner.getFlowFilesForRelationship(REL_FAILED_SET_STATE).get(0); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_VALUE_KEY); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_COUNT_KEY); mockFlowFile.assertAttributeNotExists(ROLLING_WINDOW_MEAN_KEY); }
Example 9
Source File: TestUpdateAttribute.java From nifi with Apache License 2.0 | 5 votes |
@Test public void testStateFailures() throws Exception { final 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("count", "${getStateValue('count'):plus(1)}"); runner.setProperty("sum", "${getStateValue('sum'):plus(${pencils})}"); runner.setProperty(UpdateAttribute.STATEFUL_VARIABLES_INIT_VALUE, "0"); processor.onScheduled(runner.getProcessContext()); final Map<String, String> attributes2 = new HashMap<>(); attributes2.put("pencils", "2"); mockStateManager.setFailOnStateGet(Scope.LOCAL, true); runner.enqueue(new byte[0],attributes2); 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("count", "1"); runner.getFlowFilesForRelationship(UpdateAttribute.REL_FAILED_SET_STATE).get(0).assertAttributeEquals("sum", "2"); }
Example 10
Source File: TestUpdateAttribute.java From localization_nifi with Apache License 2.0 | 4 votes |
@Test public void testStateFailuresWithRulesUsingOriginal() throws Exception { final Criteria criteria = getCriteria(); criteria.setFlowFilePolicy(FlowFilePolicy.USE_ORIGINAL); 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).assertAttributeEquals("maxValue2", "1"); }
Example 11
Source File: TestUpdateAttribute.java From localization_nifi with Apache License 2.0 | 4 votes |
@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"); }
Example 12
Source File: TestEnforceOrder.java From nifi with Apache License 2.0 | 4 votes |
@Test public void testInitialOrderValue() { final TestRunner runner = TestRunners.newTestRunner(EnforceOrder.class); runner.setProperty(EnforceOrder.GROUP_IDENTIFIER, "${group}"); runner.setProperty(EnforceOrder.ORDER_ATTRIBUTE, "index"); runner.setProperty(EnforceOrder.INITIAL_ORDER, "${index.start}"); runner.setProperty(EnforceOrder.MAX_ORDER, "${index.max}"); runner.assertValid(); runner.enqueue("b.0", Ordered.i("b", 0).put("index.start", "0").put("index.max", "99").map()); runner.enqueue("a.100", Ordered.i("a", 100).put("index.start", "100").put("index.max", "103").map()); runner.enqueue("a.101", Ordered.i("a", 101).put("index.start", "100").put("index.max", "103").map()); runner.enqueue("illegal initial order", Ordered.i("c", 1).put("index.start", "non-integer").map()); runner.enqueue("without initial order", Ordered.i("d", 1).map()); // Even if this flow file doesn't have initial order attribute, this will be routed to success. // Because target order for group b is already computed from b.0. Ordered.enqueue(runner, "b", 1); runner.run(); List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(EnforceOrder.REL_SUCCESS); assertEquals(4, succeeded.size()); succeeded.sort(new FirstInFirstOutPrioritizer()); succeeded.get(0).assertContentEquals("a.100"); succeeded.get(1).assertContentEquals("a.101"); succeeded.get(2).assertContentEquals("b.0"); succeeded.get(3).assertContentEquals("b.1"); final List<MockFlowFile> failed = runner.getFlowFilesForRelationship(EnforceOrder.REL_FAILURE); assertEquals(2, failed.size()); failed.get(0).assertAttributeExists(EnforceOrder.ATTR_DETAIL); failed.get(0).assertContentEquals("illegal initial order"); failed.get(1).assertAttributeExists(EnforceOrder.ATTR_DETAIL); failed.get(1).assertContentEquals("without initial order"); final MockStateManager stateManager = runner.getStateManager(); stateManager.assertStateEquals("a.target", "102", Scope.LOCAL); stateManager.assertStateEquals("a.max", "103", Scope.LOCAL); stateManager.assertStateEquals("b.target", "2", Scope.LOCAL); stateManager.assertStateEquals("b.max", "99", Scope.LOCAL); runner.clearTransferState(); }
Example 13
Source File: TestEnforceOrder.java From nifi with Apache License 2.0 | 4 votes |
@Test public void testWaitOvertakeSkip() throws Exception { final TestRunner runner = TestRunners.newTestRunner(EnforceOrder.class); runner.setProperty(EnforceOrder.GROUP_IDENTIFIER, "${group}"); runner.setProperty(EnforceOrder.ORDER_ATTRIBUTE, "index"); runner.setProperty(EnforceOrder.INITIAL_ORDER, "1"); runner.setProperty(EnforceOrder.MAX_ORDER, "10"); runner.assertValid(); Ordered.enqueue(runner, "b", 1); Ordered.enqueue(runner, "a", 2); Ordered.enqueue(runner, "a", 1); Ordered.enqueue(runner, "a", 5); // waits for a.3 and a.4 Ordered.enqueue(runner, "b", 3); // waits for b.2 Ordered.enqueue(runner, "c", 9); // waits for c.1 to 8 Ordered.enqueue(runner, "d", 10); // waits for d.1 to 9 runner.run(); List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(EnforceOrder.REL_SUCCESS); assertEquals(3, succeeded.size()); final FirstInFirstOutPrioritizer fifo = new FirstInFirstOutPrioritizer(); succeeded.sort(fifo); succeeded.get(0).assertContentEquals("a.1"); succeeded.get(1).assertContentEquals("a.2"); succeeded.get(2).assertContentEquals("b.1"); List<MockFlowFile> waiting = runner.getFlowFilesForRelationship(EnforceOrder.REL_WAIT); assertEquals(4, waiting.size()); waiting.get(0).assertContentEquals("a.5"); waiting.get(1).assertContentEquals("b.3"); waiting.get(2).assertContentEquals("c.9"); waiting.get(3).assertContentEquals("d.10"); waiting.get(0).assertAttributeExists("EnforceOrder.startedAt"); waiting.get(1).assertAttributeExists("EnforceOrder.startedAt"); waiting.get(2).assertAttributeExists("EnforceOrder.startedAt"); waiting.get(3).assertAttributeExists("EnforceOrder.startedAt"); final MockStateManager stateManager = runner.getStateManager(); stateManager.assertStateEquals("a.target", "3", Scope.LOCAL); stateManager.assertStateEquals("b.target", "2", Scope.LOCAL); stateManager.assertStateEquals("c.target", "1", Scope.LOCAL); stateManager.assertStateEquals("d.target", "1", Scope.LOCAL); stateManager.assertStateSet("a.updatedAt", Scope.LOCAL); stateManager.assertStateSet("b.updatedAt", Scope.LOCAL); stateManager.assertStateSet("c.updatedAt", Scope.LOCAL); stateManager.assertStateSet("d.updatedAt", Scope.LOCAL); // Run it again with waiting files. runner.clearTransferState(); waiting.forEach(runner::enqueue); runner.run(); runner.assertAllFlowFilesTransferred(EnforceOrder.REL_WAIT, 4); waiting = runner.getFlowFilesForRelationship(EnforceOrder.REL_WAIT); // Run it again with shorter wait timeout to make overtaking happen. runner.clearTransferState(); runner.setProperty(EnforceOrder.WAIT_TIMEOUT, "10 ms"); Thread.sleep(20); waiting.forEach(runner::enqueue); Ordered.enqueue(runner, "b", 2); // arrived in time Ordered.enqueue(runner, "a", 6); // a.4 and a.5 have not arrived yet runner.run(); succeeded = runner.getFlowFilesForRelationship(EnforceOrder.REL_SUCCESS); succeeded.sort(fifo); assertEquals(3, succeeded.size()); succeeded.get(0).assertContentEquals("a.6"); // This is ok because a.5 was there. succeeded.get(1).assertContentEquals("b.2"); succeeded.get(2).assertContentEquals("b.3"); List<MockFlowFile> overtook = runner.getFlowFilesForRelationship(EnforceOrder.REL_OVERTOOK); assertEquals(3, overtook.size()); overtook.get(0).assertContentEquals("a.5"); // overtook a.3. overtook.get(0).assertAttributeEquals(EnforceOrder.ATTR_EXPECTED_ORDER, "3"); overtook.get(1).assertContentEquals("c.9"); // overtook c.1 - 8. overtook.get(1).assertAttributeEquals(EnforceOrder.ATTR_EXPECTED_ORDER, "1"); overtook.get(2).assertContentEquals("d.10"); // overtook d.1 - 9. overtook.get(2).assertAttributeEquals(EnforceOrder.ATTR_EXPECTED_ORDER, "1"); stateManager.assertStateEquals("a.target", "7", Scope.LOCAL); stateManager.assertStateEquals("b.target", "4", Scope.LOCAL); stateManager.assertStateEquals("c.target", "10", Scope.LOCAL); // it was c.9, so +1 stateManager.assertStateEquals("d.target", "10", Scope.LOCAL); // it was d.10 (max) so don't +1 // Simulate a.3 and a.4 arrive but too late.. runner.clearTransferState(); Ordered.enqueue(runner, "a", 3); Ordered.enqueue(runner, "a", 4); runner.run(); runner.assertAllFlowFilesTransferred(EnforceOrder.REL_SKIPPED, 2); final List<MockFlowFile> skipped = runner.getFlowFilesForRelationship(EnforceOrder.REL_SKIPPED); skipped.get(0).assertContentEquals("a.3"); skipped.get(0).assertAttributeExists(EnforceOrder.ATTR_DETAIL); skipped.get(1).assertContentEquals("a.4"); skipped.get(1).assertAttributeExists(EnforceOrder.ATTR_DETAIL); }
Example 14
Source File: TestEnforceOrder.java From nifi with Apache License 2.0 | 4 votes |
@Test public void testCleanInactiveGroups() throws Exception { final TestRunner runner = TestRunners.newTestRunner(EnforceOrder.class); runner.setProperty(EnforceOrder.GROUP_IDENTIFIER, "${group}"); runner.setProperty(EnforceOrder.ORDER_ATTRIBUTE, "index"); runner.setProperty(EnforceOrder.INITIAL_ORDER, "1"); runner.assertValid(); Ordered.enqueue(runner, "b", 1); Ordered.enqueue(runner, "a", 2); Ordered.enqueue(runner, "c", 1); Ordered.enqueue(runner, "a", 1); runner.run(); runner.assertAllFlowFilesTransferred(EnforceOrder.REL_SUCCESS, 4); // Run it again with shorter inactive timeout runner.clearTransferState(); runner.setProperty(EnforceOrder.WAIT_TIMEOUT, "5 ms"); runner.setProperty(EnforceOrder.INACTIVE_TIMEOUT, "10 ms"); Thread.sleep(15); // No group b. Ordered.enqueue(runner, "a", 3); Ordered.enqueue(runner, "c", 2); runner.run(); // Group b was determined as inactive, thus its states should be removed. final MockStateManager stateManager = runner.getStateManager(); stateManager.assertStateEquals("a.target", "4", Scope.LOCAL); stateManager.assertStateNotSet("b.target", Scope.LOCAL); stateManager.assertStateEquals("c.target", "3", Scope.LOCAL); stateManager.assertStateSet("a.updatedAt", Scope.LOCAL); stateManager.assertStateNotSet("b.updatedAt", Scope.LOCAL); stateManager.assertStateSet("c.updatedAt", Scope.LOCAL); // If b comes again, it'll be treated as brand new group. runner.clearTransferState(); Ordered.enqueue(runner, "b", 2); runner.run(); stateManager.assertStateEquals("b.target", "1", Scope.LOCAL); stateManager.assertStateSet("b.updatedAt", Scope.LOCAL); // b.2 should be routed to wait, since there's no b.1. It will eventually overtake. runner.assertAllFlowFilesTransferred(EnforceOrder.REL_WAIT, 1); final List<MockFlowFile> waiting = runner.getFlowFilesForRelationship(EnforceOrder.REL_WAIT); waiting.get(0).assertContentEquals("b.2"); }
Example 15
Source File: TestUpdateAttribute.java From nifi with Apache License 2.0 | 4 votes |
@Test public void testStateFailuresWithRulesUsingOriginal() throws Exception { final Criteria criteria = getCriteria(); criteria.setFlowFilePolicy(FlowFilePolicy.USE_ORIGINAL); 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).assertAttributeEquals("maxValue2", "1"); }
Example 16
Source File: TestUpdateAttribute.java From nifi with Apache License 2.0 | 4 votes |
@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"); }