package com.temenos.interaction.loader.properties; /* * #%L * interaction-dynamic-loader * %% * Copyright (C) 2012 - 2016 Temenos Holdings N.V. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.junit.Test; import org.springframework.core.io.Resource; import com.temenos.interaction.core.loader.PropertiesEvent; public class ReloadablePropertiesBaseTest { @Test public void testSetListeners() throws Exception { ReloadablePropertiesListener<Resource> listener1 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener2 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener3 = mock(ReloadablePropertiesListener.class); List<ReloadablePropertiesListener<Resource>> listeners = new ArrayList<>(); listeners.add(listener1); listeners.add(listener2); listeners.add(listener3); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.setListeners(listeners); assertEquals(3, reloadable.getListeners().size()); assertTrue(reloadable.getListeners().contains(listener1)); assertTrue(reloadable.getListeners().contains(listener2)); assertTrue(reloadable.getListeners().contains(listener3)); } @Test public void testAddReloadablePropertiesListener() throws Exception { ReloadablePropertiesListener<Resource> listener1 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener2 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener3 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.addReloadablePropertiesListener(listener1); assertEquals(1, reloadable.getListeners().size()); assertTrue(reloadable.getListeners().contains(listener1)); reloadable.addReloadablePropertiesListener(listener2); assertEquals(2, reloadable.getListeners().size()); assertTrue(reloadable.getListeners().contains(listener2)); reloadable.addReloadablePropertiesListener(listener3); assertEquals(3, reloadable.getListeners().size()); assertTrue(reloadable.getListeners().contains(listener3)); } @Test public void testRemoveReloadablePropertiesListener() throws Exception { ReloadablePropertiesListener<Resource> listener1 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener2 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener3 = mock(ReloadablePropertiesListener.class); List<ReloadablePropertiesListener<Resource>> listeners = new ArrayList<>(); listeners.add(listener1); listeners.add(listener2); listeners.add(listener3); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.setListeners(listeners); assertEquals(3, reloadable.getListeners().size()); assertTrue(reloadable.getListeners().contains(listener1)); assertTrue(reloadable.getListeners().contains(listener2)); assertTrue(reloadable.getListeners().contains(listener3)); reloadable.removeReloadablePropertiesListener(listener1); assertEquals(2, reloadable.getListeners().size()); assertFalse(reloadable.getListeners().contains(listener1)); assertTrue(reloadable.getListeners().contains(listener2)); assertTrue(reloadable.getListeners().contains(listener3)); reloadable.removeReloadablePropertiesListener(listener2); assertEquals(1, reloadable.getListeners().size()); assertFalse(reloadable.getListeners().contains(listener1)); assertFalse(reloadable.getListeners().contains(listener2)); assertTrue(reloadable.getListeners().contains(listener3)); reloadable.removeReloadablePropertiesListener(listener3); assertEquals(0, reloadable.getListeners().size()); assertFalse(reloadable.getListeners().contains(listener1)); assertFalse(reloadable.getListeners().contains(listener2)); assertFalse(reloadable.getListeners().contains(listener3)); } @Test public void testNotifyPropertiesLoaded() throws Exception { ReloadablePropertiesListener<Resource> listener1 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener2 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener3 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.addReloadablePropertiesListener(listener1); reloadable.addReloadablePropertiesListener(listener2); reloadable.addReloadablePropertiesListener(listener3); Resource resource = mock(Resource.class); Properties newProperties = mock(Properties.class); reloadable.notifyPropertiesLoaded(resource, newProperties); verify(listener1).propertiesChanged(any(PropertiesEvent.class)); verify(listener2).propertiesChanged(any(PropertiesEvent.class)); verify(listener3).propertiesChanged(any(PropertiesEvent.class)); } @Test public void testUpdateProperties() throws Exception { Properties properties = new Properties(); properties.put(1, "one"); properties.put(2, "two"); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.setProperties(properties); Properties newProperties = new Properties(); newProperties.put(2, "two_prime"); newProperties.put(3, "three"); newProperties.put(4, "four"); boolean newAdded = reloadable.updateProperties(newProperties); assertTrue(newAdded); assertEquals(4, reloadable.getProperties().size()); // old properties assertTrue(reloadable.getProperties().contains("one")); assertTrue(reloadable.getProperties().containsKey(1)); assertEquals("one", reloadable.getProperties().get(1)); assertTrue(reloadable.getProperties().contains("two_prime")); assertTrue(reloadable.getProperties().containsKey(2)); assertEquals("two_prime", reloadable.getProperties().get(2)); // new properties assertTrue(reloadable.getProperties().contains("three")); assertTrue(reloadable.getProperties().containsKey(3)); assertEquals("three", reloadable.getProperties().get(3)); assertTrue(reloadable.getProperties().contains("four")); assertTrue(reloadable.getProperties().containsKey(4)); assertEquals("four", reloadable.getProperties().get(4)); } @Test public void testNotifyPropertiesChanged() throws Exception { ReloadablePropertiesListener<Resource> listener1 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener2 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesListener<Resource> listener3 = mock(ReloadablePropertiesListener.class); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.addReloadablePropertiesListener(listener1); reloadable.addReloadablePropertiesListener(listener2); reloadable.addReloadablePropertiesListener(listener3); Resource resource = mock(Resource.class); Properties newProperties = mock(Properties.class); reloadable.notifyPropertiesChanged(resource, newProperties); verify(listener1).propertiesChanged(any(PropertiesEvent.class)); verify(listener2).propertiesChanged(any(PropertiesEvent.class)); verify(listener3).propertiesChanged(any(PropertiesEvent.class)); } @Test public void testSetProperties() throws Exception { Properties properties = new Properties(); properties.put(1, "one"); properties.put(2, "two"); ReloadablePropertiesBase reloadable = new ReloadablePropertiesBase(); reloadable.setProperties(properties); assertEquals(2, reloadable.getProperties().size()); assertTrue(reloadable.getProperties().contains("one")); assertTrue(reloadable.getProperties().containsKey(1)); assertEquals("one", reloadable.getProperties().get(1)); assertTrue(reloadable.getProperties().contains("two")); assertTrue(reloadable.getProperties().containsKey(2)); assertEquals("two", reloadable.getProperties().get(2)); } }