/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.services.binding.test; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import junit.framework.TestCase; import org.jboss.services.binding.ServiceBinding; import org.jboss.services.binding.ServiceBindingMetadata; import org.jboss.services.binding.impl.ServiceBindingSet; import org.jboss.services.binding.impl.XSLTServiceBindingValueSourceConfig; import org.jboss.services.binding.impl.XSLTServiceBindingValueSourceImpl; import org.jboss.services.binding.managed.ServiceBindingManagementObject; /** * Unit tests for {@link ServiceBindingManagementObject}. * * @author Brian Stansberry * * @version $Revision: $ */ public class ServiceBindingManagmentObjectUnitTestCase extends TestCase { private static final String A = "A"; private static final String B = "B"; private static final String C = "C"; private static ServiceBindingMetadata AA; private static ServiceBindingMetadata AB; private static ServiceBindingMetadata Anull; private static ServiceBindingMetadata BA; private static ServiceBindingSet SET_A; private static ServiceBindingSet SET_B; private static ServiceBindingSet SET_C; private Set<ServiceBindingMetadata> bindings = new HashSet<ServiceBindingMetadata>(); private Set<ServiceBindingSet> bindingSets = new HashSet<ServiceBindingSet>(); /** * Create a new ServiceBindingManagmentObjectUnitTestCase. * * @param name */ public ServiceBindingManagmentObjectUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); AA = new ServiceBindingMetadata(A, A, null, 1, false, false); bindings.add(AA); AB = new ServiceBindingMetadata(A, B, null, 1, false, false); bindings.add(AB); Anull = new ServiceBindingMetadata(A, null, null, 1, false, false); bindings.add(Anull); // This one doesn't go in the standard bindings set BA = new ServiceBindingMetadata(B, A, null, 1, false, false); SET_A = new ServiceBindingSet(A); SET_A.setDefaultHostName("localhost"); bindingSets.add(SET_A); SET_B = new ServiceBindingSet(B); SET_B.setDefaultHostName("localhost"); bindingSets.add(SET_B); SET_C = new ServiceBindingSet(C); SET_C.setDefaultHostName("localhost"); bindingSets.add(SET_C); } protected void tearDown() throws Exception { super.tearDown(); } /** * Test method for {@link org.jboss.services.binding.managed.ServiceBindingManagementObject#setActiveBindingSetName(java.lang.String)}. */ public void testSetActiveBindingSetName() throws Exception { ServiceBindingManagementObject testee = new ServiceBindingManagementObject("test", bindingSets, bindings); testee.start(); assertEquals("test", testee.getActiveBindingSetName()); assertEquals("test", testee.getServiceBindingManager().getServerName()); testee.setActiveBindingSetName("changed"); assertEquals("changed", testee.getActiveBindingSetName()); assertEquals("changed", testee.getServiceBindingManager().getServerName()); try { testee.setActiveBindingSetName(null); fail("Null activeBindingSetName allowed"); } catch (IllegalArgumentException good) {} } /** * Test method for {@link ServiceBindingManagementObject#setBindingSets(java.util.Set)}. * * This is basically a duplicate of the same test in PojoServiceBindingStoreUnitTestCase. */ public void testSetBindingSets() throws Exception { // THIS IS BAS Set<ServiceBindingMetadata> set = new HashSet<ServiceBindingMetadata>(); set.addAll(Arrays.asList(AA, AB, Anull)); Set<ServiceBindingSet> sbs = new HashSet<ServiceBindingSet>(); ServiceBindingSet setA = new ServiceBindingSet(A, null, 10); sbs.add(setA); ServiceBindingSet setB = new ServiceBindingSet(B, "localhost", 20); sbs.add(setB); ServiceBindingManagementObject testee = new ServiceBindingManagementObject("test", sbs, set); testee.start(); Set<ServiceBindingSet> updated = new HashSet<ServiceBindingSet>(testee.getBindingSets()); Set<ServiceBindingMetadata> overrides = new HashSet<ServiceBindingMetadata>(); overrides.add(BA); ServiceBindingSet newSet = new ServiceBindingSet(C, "192.168.0.10", 30, overrides); updated.add(newSet); ServiceBindingSet replaced = new ServiceBindingSet(B, "localhost", 50); updated.remove(setB); updated.add(replaced); assertEquals(3, updated.size()); testee.setBindingSets(updated); Set<ServiceBindingSet> result = testee.getBindingSets(); assertNotNull(result); assertTrue("has setA", result.contains(setA)); assertTrue("has setB", result.contains(replaced)); assertTrue("has newSet", result.contains(newSet)); Set<ServiceBinding> bindings = testee.getServiceBindings().get(C); assertNotNull(bindings); Map<String, ServiceBinding> byFQN = new HashMap<String, ServiceBinding>(); for (ServiceBinding binding : bindings) { byFQN.put(binding.getFullyQualifiedName(), binding); } ServiceBinding aa = byFQN.get(AA.getFullyQualifiedName()); assertNotNull(aa); assertEquals(AA.getServiceName(), aa.getServiceName()); assertEquals(AA.getBindingName(), aa.getBindingName()); assertEquals(AA.getDescription(), aa.getDescription()); assertEquals("192.168.0.10", aa.getHostName()); assertEquals(AA.getPort() + 30, aa.getPort()); ServiceBinding ab = byFQN.get(AB.getFullyQualifiedName()); assertNotNull(aa); assertEquals(AB.getServiceName(), ab.getServiceName()); assertEquals(AB.getBindingName(), ab.getBindingName()); assertEquals(AB.getDescription(), ab.getDescription()); assertEquals("192.168.0.10", ab.getHostName()); assertEquals(AB.getPort() + 30, ab.getPort()); ServiceBinding anull = byFQN.get(Anull.getFullyQualifiedName()); assertNotNull(anull); assertEquals(Anull.getServiceName(), anull.getServiceName()); assertEquals(Anull.getBindingName(), anull.getBindingName()); assertEquals(Anull.getDescription(), anull.getDescription()); assertEquals("192.168.0.10", anull.getHostName()); assertEquals(Anull.getPort() + 30, anull.getPort()); ServiceBinding newOne = byFQN.get(BA.getFullyQualifiedName()); assertNotNull(newOne); assertEquals(BA.getServiceName(), newOne.getServiceName()); assertEquals(BA.getBindingName(), newOne.getBindingName()); assertEquals(BA.getDescription(), newOne.getDescription()); assertEquals("192.168.0.10", newOne.getHostName()); assertEquals(BA.getPort() + 30, newOne.getPort()); bindings = testee.getServiceBindings().get(B); assertNotNull(bindings); byFQN = new HashMap<String, ServiceBinding>(); for (ServiceBinding binding : bindings) { byFQN.put(binding.getFullyQualifiedName(), binding); } aa = byFQN.get(AA.getFullyQualifiedName()); assertNotNull(aa); assertEquals(AA.getServiceName(), aa.getServiceName()); assertEquals(AA.getBindingName(), aa.getBindingName()); assertEquals(AA.getDescription(), aa.getDescription()); assertEquals("localhost", aa.getHostName()); assertEquals(AA.getPort() + 50, aa.getPort()); ab = byFQN.get(AB.getFullyQualifiedName()); assertNotNull(aa); assertEquals(AB.getServiceName(), ab.getServiceName()); assertEquals(AB.getBindingName(), ab.getBindingName()); assertEquals(AB.getDescription(), ab.getDescription()); assertEquals("localhost", ab.getHostName()); assertEquals(AB.getPort() + 50, ab.getPort()); anull = byFQN.get(Anull.getFullyQualifiedName()); assertNotNull(anull); assertEquals(Anull.getServiceName(), anull.getServiceName()); assertEquals(Anull.getBindingName(), anull.getBindingName()); assertEquals(Anull.getDescription(), anull.getDescription()); assertEquals("localhost", anull.getHostName()); assertEquals(Anull.getPort() + 50, anull.getPort()); } /** * Test method for {@link org.jboss.services.binding.managed.ServiceBindingManagementObject#setStandardBindings(java.util.Set)}. * * This is basically a duplicate of the same test in PojoServiceBindingStoreUnitTestCase. */ public void testSetStandardBindings() throws Exception { Set<ServiceBindingMetadata> set = new HashSet<ServiceBindingMetadata>(); set.addAll(Arrays.asList(AA, AB, Anull)); Set<ServiceBindingSet> sbs = new HashSet<ServiceBindingSet>(); ServiceBindingSet setB = new ServiceBindingSet(B, "localhost", 20); sbs.add(setB); ServiceBindingSet setC = new ServiceBindingSet(C, "192.168.0.10", 30); sbs.add(setC); ServiceBindingManagementObject testee = new ServiceBindingManagementObject("test", sbs, set); testee.start(); Set<ServiceBindingMetadata> updatedSet = new HashSet<ServiceBindingMetadata>(testee.getStandardBindings()); assertEquals(3, updatedSet.size()); ServiceBindingMetadata updated = new ServiceBindingMetadata(AA); updated.setPort(9999); updated.setDescription("updated"); updatedSet.remove(AA); updatedSet.add(updated); updatedSet.add(BA); assertEquals(4, updatedSet.size()); testee.setStandardBindings(updatedSet); Set<ServiceBindingMetadata> result = testee.getStandardBindings(); assertNotNull(result); assertTrue("has updated", result.contains(updated)); assertTrue("has AB", result.contains(AB)); assertTrue("has Anull", result.contains(Anull)); assertTrue("has BA", result.contains(BA)); for (ServiceBindingSet bindingSet : sbs) { String setName = bindingSet.getName(); Set<ServiceBinding> bindings = testee.getServiceBindings().get(setName); assertNotNull(bindings); assertEquals(4, bindings.size()); Map<String, ServiceBinding> byFQN = new HashMap<String, ServiceBinding>(); for (ServiceBinding binding : bindings) { byFQN.put(binding.getFullyQualifiedName(), binding); } ServiceBinding aa = byFQN.get(updated.getFullyQualifiedName()); assertNotNull(aa); assertEquals(setName + "/updated/serviceName", updated.getServiceName(), aa.getServiceName()); assertEquals(setName + "/updated/bindingName", updated.getBindingName(), aa.getBindingName()); assertEquals(setName + "/updated/description", updated.getDescription(), aa.getDescription()); assertEquals(setName + "/updated/hostName", bindingSet.getDefaultHostName(), aa.getHostName()); assertEquals(setName + "/updated/port", updated.getPort() + bindingSet.getPortOffset(), aa.getPort()); ServiceBinding ab = byFQN.get(AB.getFullyQualifiedName()); assertNotNull(aa); assertEquals(setName + "/AB/serviceName", AB.getServiceName(), ab.getServiceName()); assertEquals(setName + "/AB/bindingName", AB.getBindingName(), ab.getBindingName()); assertEquals(setName + "/AB/description", AB.getDescription(), ab.getDescription()); assertEquals(setName + "/AB/hostName", bindingSet.getDefaultHostName(), ab.getHostName()); assertEquals(setName + "/AB/port", AB.getPort() + bindingSet.getPortOffset(), ab.getPort()); ServiceBinding anull = byFQN.get(Anull.getFullyQualifiedName()); assertNotNull(anull); assertEquals(setName + "/Anull/serviceName", Anull.getServiceName(), anull.getServiceName()); assertEquals(setName + "/Anull/bindingName", Anull.getBindingName(), anull.getBindingName()); assertEquals(setName + "/Anull/description", Anull.getDescription(), anull.getDescription()); assertEquals(setName + "/Anull/hostName", bindingSet.getDefaultHostName(), anull.getHostName()); assertEquals(setName + "/Anull/port", Anull.getPort() + bindingSet.getPortOffset(), anull.getPort()); ServiceBinding newOne = byFQN.get(BA.getFullyQualifiedName()); assertNotNull(newOne); assertEquals(setName + "/BA/serviceName", BA.getServiceName(), newOne.getServiceName()); assertEquals(setName + "/BA/bindingName", BA.getBindingName(), newOne.getBindingName()); assertEquals(setName + "/BA/description", BA.getDescription(), newOne.getDescription()); assertEquals(setName + "/BA/hostName", bindingSet.getDefaultHostName(), newOne.getHostName()); assertEquals(setName + "/BA/port", BA.getPort() + bindingSet.getPortOffset(), newOne.getPort()); } } /** * The objects returned via a management console don't include the * value source class or config; the ServiceBindingManagementObject is * responsible for preserving objects associated with the existing configs. * This is a test of that for the standard bindings. * * @throws Exception */ public void testPreserveValueSourceStandardBinding() throws Exception { Set<ServiceBindingMetadata> set = new HashSet<ServiceBindingMetadata>(); set.addAll(Arrays.asList(AA, AB)); ServiceBindingMetadata value = new ServiceBindingMetadata("value-source", null, null, 25); // Add value-source configs we expect to retain! value.setServiceBindingValueSourceClassName(XSLTServiceBindingValueSourceImpl.class.getName()); value.setServiceBindingValueSourceConfig(new XSLTServiceBindingValueSourceConfig("test")); set.add(value); Set<ServiceBindingSet> sbs = new HashSet<ServiceBindingSet>(); ServiceBindingSet setB = new ServiceBindingSet(B, "localhost", 0); sbs.add(setB); ServiceBindingManagementObject testee = new ServiceBindingManagementObject("test", sbs, set); testee.start(); set = testee.getStandardBindings(); assertEquals(3, set.size()); boolean found = false; for (ServiceBindingMetadata md : set) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); Map<String, Set<ServiceBinding>> bindingsMap = testee.getServiceBindings(); assertNotNull(bindingsMap); Set<ServiceBinding> bindings = bindingsMap.get(B); assertNotNull(bindings); found = false; for (ServiceBinding md : bindings) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); set = new HashSet<ServiceBindingMetadata>(); set.addAll(Arrays.asList(AA, AB)); set.add(new ServiceBindingMetadata("value-source", null, null, 25)); // KEY POINT IN THE WHOLE TEST: we don't configure the value source stuff testee.setStandardBindings(set); set = testee.getStandardBindings(); assertEquals(3, set.size()); found = false; for (ServiceBindingMetadata md : set) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); bindingsMap = testee.getServiceBindings(); assertNotNull(bindingsMap); bindings = bindingsMap.get(B); assertNotNull(bindings); found = false; for (ServiceBinding md : bindings) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); } /** * The objects returned via a management console don't include the * value source class or config; the ServiceBindingManagementObject is * responsible for preserving objects associated with the existing configs. * This is a test of that for ServiceBindingMetadata in a ServiceBindingSet's * override set. * * @throws Exception */ public void testPreserveValueSourceOverrideBinding() throws Exception { Set<ServiceBindingMetadata> set = new HashSet<ServiceBindingMetadata>(); set.addAll(Arrays.asList(AA, AB)); ServiceBindingMetadata value = new ServiceBindingMetadata("value-source", null, null, 25); // Add value-source configs we expect to retain! value.setServiceBindingValueSourceClassName(XSLTServiceBindingValueSourceImpl.class.getName()); value.setServiceBindingValueSourceConfig(new XSLTServiceBindingValueSourceConfig("test")); Set<ServiceBindingMetadata> overrides = new HashSet<ServiceBindingMetadata>(); overrides.add(value); Set<ServiceBindingSet> sbs = new HashSet<ServiceBindingSet>(); ServiceBindingSet setB = new ServiceBindingSet(B, "localhost", 0, overrides); sbs.add(setB); ServiceBindingManagementObject testee = new ServiceBindingManagementObject("test", sbs, set); testee.start(); sbs = testee.getBindingSets(); assertEquals(1, sbs.size()); boolean found = false; for (ServiceBindingSet sb : sbs) { for (ServiceBindingMetadata md : sb.getOverrideBindings()) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); } Map<String, Set<ServiceBinding>> bindingsMap = testee.getServiceBindings(); assertNotNull(bindingsMap); Set<ServiceBinding> bindings = bindingsMap.get(B); assertNotNull(bindings); found = false; for (ServiceBinding md : bindings) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); overrides = new HashSet<ServiceBindingMetadata>(); overrides.add(new ServiceBindingMetadata("value-source", null, null, 25)); // KEY POINT IN THE WHOLE TEST: we don't configure the value source stuff setB = new ServiceBindingSet(B, "localhost", 0, overrides); sbs = new HashSet<ServiceBindingSet>(); sbs.add(setB); testee.setBindingSets(sbs); sbs = testee.getBindingSets(); assertEquals(1, sbs.size()); found = false; for (ServiceBindingSet sb : sbs) { for (ServiceBindingMetadata md : sb.getOverrideBindings()) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); } bindingsMap = testee.getServiceBindings(); assertNotNull(bindingsMap); bindings = bindingsMap.get(B); assertNotNull(bindings); found = false; for (ServiceBinding md : bindings) { if ("value-source".equals(md.getFullyQualifiedName())) { found = true; assertEquals(XSLTServiceBindingValueSourceImpl.class.getName(), md.getServiceBindingValueSourceClassName()); Object config = md.getServiceBindingValueSourceConfig(); assertTrue(config instanceof XSLTServiceBindingValueSourceConfig); assertEquals("test", ((XSLTServiceBindingValueSourceConfig) config).getXslt()); break; } } assertTrue(found); } }