public void testDynamicSequenceLookup() throws Exception {
System.out.println("Testing dynamic sequence lookup...");
// Phase 1
System.out.println("Testing basic registry lookup functionality...");
MessageContext synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
Mediator seq1 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
assertNotNull(seq1);
assertTrue(((SequenceMediator) seq1).isInitialized());
assertEquals(1, registry.getHitCount());
seq1.mediate(synCtx);
assertEquals("bar", synCtx.getProperty("foo"));
// Phase 2
System.out.println("Testing basic sequence caching...");
synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
Mediator seq2 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
assertNotNull(seq2);
assertTrue(((SequenceMediator) seq2).isInitialized());
assertEquals(1, registry.getHitCount());
seq2.mediate(synCtx);
assertEquals("bar", synCtx.getProperty("foo"));
assertTrue(seq1 == seq2);
// Phase 3
System.out.println("Testing advanced sequence caching...");
synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
System.out.println("Waiting for the cache to expire...");
Thread.sleep(8500L);
Mediator seq3 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
assertNotNull(seq3);
assertTrue(((SequenceMediator) seq3).isInitialized());
assertEquals(1, registry.getHitCount());
seq3.mediate(synCtx);
assertEquals("bar", synCtx.getProperty("foo"));
assertTrue(seq1 == seq3);
// Phase 4
System.out.println("Testing sequence reloading...");
registry.updateResource(KEY_DYNAMIC_SEQUENCE_1, TestUtils.createOMElement(DYNAMIC_SEQUENCE_2));
System.out.println("Waiting for the cache to expire...");
Thread.sleep(8500L);
synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
Mediator seq4 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
assertNotNull(seq4);
assertTrue(((SequenceMediator) seq4).isInitialized());
assertEquals(2, registry.getHitCount());
seq4.mediate(synCtx);
assertEquals("baz", synCtx.getProperty("foo"));
assertTrue(seq1 != seq4);
assertTrue(!((SequenceMediator) seq1).isInitialized());
// Phase 5
System.out.println("Testing for non-existing sequences...");
synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
Mediator seq5 = synCtx.getSequence("non-existing-sequence");
assertNull(seq5);
System.out.println("Dynamic sequence lookup tests were successful...");
}