/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.registry;
import junit.framework.TestCase;
import org.apache.synapse.MessageContext;
import org.apache.synapse.Mediator;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.endpoints.AddressEndpoint;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.mediators.TestUtils;
import org.apache.synapse.mediators.base.SequenceMediator;
import org.apache.axiom.om.OMNode;
import java.util.Map;
import java.util.HashMap;
public class DynamicResourceTest extends TestCase {
private static final String DYNAMIC_ENDPOINT_1 =
"<endpoint xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
" <address uri=\"http://test.url\"/>\n" +
"</endpoint>";
private static final String DYNAMIC_ENDPOINT_2 =
"<endpoint xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
" <address uri=\"http://test2.url\"/>\n" +
"</endpoint>";
private static final String DYNAMIC_SEQUENCE_1 =
"<sequence xmlns=\"http://ws.apache.org/ns/synapse\" name=\"seq1\">\n" +
" <property name=\"foo\" value=\"bar\" />" +
"</sequence>";
private static final String DYNAMIC_SEQUENCE_2 =
"<sequence xmlns=\"http://ws.apache.org/ns/synapse\" name=\"seq1\">\n" +
" <property name=\"foo\" value=\"baz\" />" +
"</sequence>";
private static final String KEY_DYNAMIC_SEQUENCE_1 = "dynamic_sequence_1";
private static final String KEY_DYNAMIC_ENDPOINT_1 = "dynamic_endpoint_1";
private SimpleInMemoryRegistry registry;
private SynapseConfiguration config;
public void setUp() {
System.out.println("Initializing in-memory registry for dynamic resource tests...");
Map<String, OMNode> data = new HashMap<String, OMNode>();
data.put(KEY_DYNAMIC_ENDPOINT_1, TestUtils.createOMElement(DYNAMIC_ENDPOINT_1));
data.put(KEY_DYNAMIC_SEQUENCE_1, TestUtils.createOMElement(DYNAMIC_SEQUENCE_1));
registry = new SimpleInMemoryRegistry(data, 8000L);
config = new SynapseConfiguration();
config.setRegistry(registry);
}
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...");
}
public void testDynamicEndpointLookup() throws Exception {
System.out.println("Testing dynamic endpoint lookup...");
// Phase 1
System.out.println("Testing basic registry lookup functionality...");
MessageContext synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
Endpoint ep1 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
assertNotNull(ep1);
assertTrue(ep1.isInitialized());
assertEquals(1, registry.getHitCount());
assertEquals("http://test.url", ((AddressEndpoint) ep1).getDefinition().getAddress());
// Phase 2
System.out.println("Testing basic endpoint caching...");
synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
Endpoint ep2 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
assertNotNull(ep2);
assertEquals(1, registry.getHitCount());
assertTrue(ep1 == ep2);
// Phase 3
System.out.println("Testing advanced endpoint caching...");
synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
System.out.println("Waiting for the cache to expire...");
Thread.sleep(8500L);
Endpoint ep3 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
assertNotNull(ep3);
assertEquals(1, registry.getHitCount());
assertTrue(ep1 == ep3);
// Phase 4
System.out.println("Testing endpoint reloading...");
registry.updateResource(KEY_DYNAMIC_ENDPOINT_1, TestUtils.createOMElement(DYNAMIC_ENDPOINT_2));
System.out.println("Waiting for the cache to expire...");
Thread.sleep(8500L);
synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
Endpoint ep4 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
assertNotNull(ep4);
assertTrue(ep4.isInitialized());
assertEquals(2, registry.getHitCount());
assertEquals("http://test2.url", ((AddressEndpoint) ep4).getDefinition().getAddress());
assertTrue(ep1 != ep4);
assertTrue(!ep1.isInitialized());
// Phase 5
System.out.println("Testing for non-existing endpoints...");
synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
Endpoint ep5 = synCtx.getEndpoint("non-existing-endpoint");
assertNull(ep5);
System.out.println("Dynamic endpoint lookup tests were successful...");
}
}