/* * #%L * Service Locator Client for CXF * %% * Copyright (C) 2011 - 2012 Talend Inc. * %% * Licensed 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. * #L% */ package org.talend.esb.servicelocator.cxf; import static org.easymock.EasyMock.expect; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import org.apache.cxf.Bus; import org.apache.cxf.bus.managers.ClientLifeCycleManagerImpl; import org.apache.cxf.endpoint.Client; import org.apache.cxf.endpoint.ClientImpl; import org.apache.cxf.endpoint.ClientLifeCycleManager; import org.apache.cxf.endpoint.ConduitSelectorHolder; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.endpoint.EndpointException; import org.apache.cxf.endpoint.EndpointImpl; import org.apache.cxf.interceptor.InterceptorProvider; import org.apache.cxf.jaxrs.client.ClientConfiguration; import org.apache.cxf.service.Service; import org.apache.cxf.service.model.EndpointInfo; import org.easymock.EasyMock; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import org.talend.esb.servicelocator.cxf.internal.DefaultSelectionStrategy; import org.talend.esb.servicelocator.cxf.internal.DefaultSelectionStrategyFactory; import org.talend.esb.servicelocator.cxf.internal.EvenDistributionSelectionStrategy; import org.talend.esb.servicelocator.cxf.internal.EvenDistributionSelectionStrategyFactory; import org.talend.esb.servicelocator.cxf.internal.LocatorClientEnabler; import org.talend.esb.servicelocator.cxf.internal.LocatorRegistrar; import org.talend.esb.servicelocator.cxf.internal.LocatorSelectionStrategyFactory; import org.talend.esb.servicelocator.cxf.internal.LocatorTargetSelector; import org.talend.esb.servicelocator.cxf.internal.RandomSelectionStrategy; import org.talend.esb.servicelocator.cxf.internal.RandomSelectionStrategyFactory; import org.talend.esb.servicelocator.cxf.internal.ServiceLocatorManager; public class LocatorFeatureTest extends EasyMockSupport { Bus busMock; LocatorRegistrar locatorRegistrarMock; Map<String, LocatorSelectionStrategyFactory> locatorSelectionStrategies; ClassLoader cll; @Before public void setUp() { busMock = createMock(Bus.class); expect(busMock.getExtension(ClassLoader.class)).andStubReturn(cll); locatorRegistrarMock = createMock(LocatorRegistrar.class); locatorRegistrarMock.startListenForServers(busMock); EasyMock.expectLastCall().anyTimes(); cll = this.getClass().getClassLoader(); locatorSelectionStrategies = new HashMap<String, LocatorSelectionStrategyFactory>(); locatorSelectionStrategies.put("defaultSelectionStrategy", new DefaultSelectionStrategyFactory()); locatorSelectionStrategies.put("randomSelectionStrategy", new RandomSelectionStrategyFactory()); locatorSelectionStrategies.put("evenDistributionSelectionStrategy", new EvenDistributionSelectionStrategyFactory()); } @Test public void initializeClient() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); enabler.setDefaultLocatorSelectionStrategy("evenDistributionSelectionStrategy"); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); Client client = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client.setConduitSelector(selector); LocatorFeature lf = new LocatorFeature(); lf.setSelectionStrategy("randomSelectionStrategy"); lf.initialize(client, busMock); Assert.assertTrue(((LocatorTargetSelector) client.getConduitSelector()) .getStrategy() instanceof RandomSelectionStrategy); } @Test public void initializeClientsOneWithStrategy() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); enabler.setDefaultLocatorSelectionStrategy("evenDistributionSelectionStrategy"); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); LocatorFeature lf = new LocatorFeature(); Client client1 = null; Client client2 = null; { EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); client1 = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client1.setConduitSelector(selector); lf.setSelectionStrategy("randomSelectionStrategy"); lf.initialize(client1, busMock); } { EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); client2 = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client2.setConduitSelector(selector); lf.setSelectionStrategy(null); lf.initialize(client2, busMock); } Assert.assertTrue(((LocatorTargetSelector) client1.getConduitSelector()) .getStrategy() instanceof RandomSelectionStrategy); Assert.assertTrue(((LocatorTargetSelector) client2.getConduitSelector()) .getStrategy() instanceof EvenDistributionSelectionStrategy); } @Test public void initializeClientDefault() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); Client client = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client.setConduitSelector(selector); LocatorFeature lf = new LocatorFeature(); lf.setSelectionStrategy(null); lf.initialize(client, busMock); Assert.assertTrue(((LocatorTargetSelector) client.getConduitSelector()) .getStrategy() instanceof DefaultSelectionStrategy); } @Test public void initializeClientsBothWithStrategies() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); enabler.setDefaultLocatorSelectionStrategy("defaultSelectionStrategy"); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); LocatorFeature lf = new LocatorFeature(); Client client1 = null; Client client2 = null; { EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); client1 = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client1.setConduitSelector(selector); lf.setSelectionStrategy("randomSelectionStrategy"); lf.initialize(client1, busMock); } { EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); client2 = new ClientImpl(busMock, endpoint); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client2.setConduitSelector(selector); lf.setSelectionStrategy("evenDistributionSelectionStrategy"); lf.initialize(client2, busMock); } Assert.assertTrue(((LocatorTargetSelector) client1.getConduitSelector()) .getStrategy() instanceof RandomSelectionStrategy); Assert.assertTrue(((LocatorTargetSelector) client2.getConduitSelector()) .getStrategy() instanceof EvenDistributionSelectionStrategy); } @Test public void initializeClientConfiguration() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); enabler.setDefaultLocatorSelectionStrategy("evenDistributionSelectionStrategy"); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); ClientConfiguration client = new ClientConfiguration(); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client.setConduitSelector(selector); LocatorFeature lf = new LocatorFeature(); lf.setSelectionStrategy("randomSelectionStrategy"); lf.initialize((ConduitSelectorHolder) client, busMock); Assert.assertTrue(((LocatorTargetSelector) client.getConduitSelector()) .getStrategy() instanceof RandomSelectionStrategy); } @Test public void initializeInterceptorProvider() throws EndpointException { LocatorClientEnabler enabler = new LocatorClientEnabler(); enabler.setBus(busMock); enabler.setLocatorSelectionStrategies(locatorSelectionStrategies); enabler.setDefaultLocatorSelectionStrategy("evenDistributionSelectionStrategy"); ServiceLocatorManager slm = new ServiceLocatorManager(); slm.setBus(busMock); slm.setLocatorRegistrar(locatorRegistrarMock); slm.setLocatorClientEnabler(enabler); expect(busMock.getExtension(ServiceLocatorManager.class)) .andStubReturn(slm); ClientLifeCycleManager clcm = new ClientLifeCycleManagerImpl(); expect(busMock.getExtension(ClientLifeCycleManager.class)) .andStubReturn(clcm); replayAll(); EndpointInfo ei = new EndpointInfo(); Service service = new org.apache.cxf.service.ServiceImpl(); Endpoint endpoint = new EndpointImpl(busMock, service, ei); ClientConfiguration client = new ClientConfiguration(); LocatorTargetSelector selector = new LocatorTargetSelector(); selector.setEndpoint(endpoint); client.setConduitSelector(selector); LocatorFeature lf = new LocatorFeature(); lf.setSelectionStrategy("randomSelectionStrategy"); lf.initialize((InterceptorProvider) client, busMock); Assert.assertTrue(((LocatorTargetSelector) client.getConduitSelector()) .getStrategy() instanceof RandomSelectionStrategy); } }