/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2009-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * OpenNMS(R) 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.core.soa.support; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.junit.Test; import org.opennms.core.soa.Registration; import org.opennms.core.soa.RegistrationListener; import org.opennms.core.soa.ServiceRegistry; /** * DefaultServiceRegistryTest * * @author brozow */ public class DefaultServiceRegistryTest { private ServiceRegistry m_registry = new DefaultServiceRegistry(); public static class Listener<T> implements RegistrationListener<T> { Set<T> m_providers = new LinkedHashSet<T>(); public void providerRegistered(Registration registration, T provider) { m_providers.add(provider); } public void providerUnregistered(Registration registration, T provider) { m_providers.remove(provider); } public int size() { return m_providers.size(); } public boolean contains(T provider) { return m_providers.contains(provider); } } @Test public void testRegisterUnregister() { MyProvider provider = new MyProvider(); Registration registration = m_registry.register(provider, Hello.class, Goodbye.class); Collection<Hello> hellos = m_registry.findProviders(Hello.class); Collection<Goodbye> goodbyes = m_registry.findProviders(Goodbye.class); assertEquals(1, hellos.size()); assertEquals(1, goodbyes.size()); assertSame(provider, hellos.iterator().next()); assertSame(provider, goodbyes.iterator().next()); registration.unregister(); hellos = m_registry.findProviders(Hello.class); goodbyes = m_registry.findProviders(Goodbye.class); assertTrue(hellos.isEmpty()); assertTrue(goodbyes.isEmpty()); } @Test public void testRegisterUnregisterUsingFilters() { MyProvider bigProvider = new MyProvider(); MyProvider smallProvider = new MyProvider(); Map<String, String> bigProps = new HashMap<String, String>(); bigProps.put("size", "big"); Map<String, String> smallProps = new HashMap<String, String>(); smallProps.put("size", "small"); Registration bigRegistration = m_registry.register(bigProvider, bigProps, Hello.class, Goodbye.class); Registration smallRegistration = m_registry.register(smallProvider, smallProps, Hello.class, Goodbye.class); Collection<Hello> hellos = m_registry.findProviders(Hello.class); Collection<Goodbye> goodbyes = m_registry.findProviders(Goodbye.class); assertEquals(2, hellos.size()); assertEquals(2, goodbyes.size()); Collection<Hello> bigHellos = m_registry.findProviders(Hello.class, "(size=big)"); Collection<Goodbye> bigGoodbyes = m_registry.findProviders(Goodbye.class, "(size=big)"); assertEquals(1, bigHellos.size()); assertEquals(1, bigGoodbyes.size()); assertSame(bigProvider, bigHellos.iterator().next()); assertSame(bigProvider, bigGoodbyes.iterator().next()); Collection<Hello> smallHellos = m_registry.findProviders(Hello.class, "(size=small)"); Collection<Goodbye> smallGoodbyes = m_registry.findProviders(Goodbye.class, "(size=small)"); assertEquals(1, smallHellos.size()); assertEquals(1, smallGoodbyes.size()); assertSame(smallProvider, smallHellos.iterator().next()); assertSame(smallProvider, smallGoodbyes.iterator().next()); bigRegistration.unregister(); assertTrue(m_registry.findProviders(Hello.class, "(size=big)").isEmpty()); assertEquals(1, m_registry.findProviders(Hello.class, "(size=small)").size()); smallRegistration.unregister(); assertTrue(m_registry.findProviders(Hello.class, "(size=big)").isEmpty()); assertTrue(m_registry.findProviders(Hello.class, "(size=small)").isEmpty()); hellos = m_registry.findProviders(Hello.class); goodbyes = m_registry.findProviders(Goodbye.class); assertTrue(hellos.isEmpty()); assertTrue(goodbyes.isEmpty()); } @Test public void testRegistrationListener() { Listener<Hello> helloListener = new Listener<Hello>(); Listener<Goodbye> goodbyeListener = new Listener<Goodbye>(); m_registry.addListener(Hello.class, helloListener); m_registry.addListener(Goodbye.class, goodbyeListener); MyProvider provider = new MyProvider(); Registration registration = m_registry.register(provider, Hello.class, Goodbye.class); assertEquals(1, helloListener.size()); assertEquals(1, goodbyeListener.size()); assertTrue(helloListener.contains(provider)); assertTrue(goodbyeListener.contains(provider)); registration.unregister(); assertEquals(0, helloListener.size()); assertEquals(0, goodbyeListener.size()); } }