Java tutorial
/** * Copyright 2014 Netflix, 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. */ package com.netflix.config; import static org.junit.Assert.*; import com.google.common.collect.Maps; import com.netflix.config.AbstractDynamicPropertyListener; import com.netflix.config.ConcurrentCompositeConfiguration; import com.netflix.config.ExpandedConfigurationListenerAdapter; import com.netflix.config.WatchedUpdateResult; import com.netflix.config.AbstractDynamicPropertyListener.EventType; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; import org.apache.commons.configuration.AbstractConfiguration; import org.apache.commons.configuration.Configuration; import org.junit.Before; import org.junit.Test; public class DynamicPropertyUpdaterTest { DynamicPropertyUpdater dynamicPropertyUpdater; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { dynamicPropertyUpdater = new DynamicPropertyUpdater(); } /** * Test method for {@link com.charter.aesd.archaius.DynamicPropertyUpdater#updateProperties(com.netflix.config.WatchedUpdateResult, org.apache.commons.configuration.Configuration, boolean)}. * @throws InterruptedException */ @Test public void testUpdateProperties() throws InterruptedException { AbstractConfiguration.setDefaultListDelimiter(','); AbstractConfiguration config = new ConcurrentCompositeConfiguration(); config.addConfigurationListener(new ExpandedConfigurationListenerAdapter(new MyListener())); MyListener.resetCount(); config.setProperty("test", "host,host1,host2"); config.setProperty("test12", "host12"); Map<String, Object> added = Maps.newHashMap(); added.put("test.host", "test,test1"); Map<String, Object> changed = Maps.newHashMap(); changed.put("test", "host,host1"); changed.put("test.host", ""); dynamicPropertyUpdater.updateProperties(WatchedUpdateResult.createIncremental(added, changed, null), config, false); assertEquals("", config.getProperty("test.host")); assertEquals(2, ((CopyOnWriteArrayList) (config.getProperty("test"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test"))).contains("host")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test"))).contains("host1")); assertEquals(5, MyListener.count); } @Test public void testAddorChangeProperty() { AbstractConfiguration.setDefaultListDelimiter(','); AbstractConfiguration config = new ConcurrentCompositeConfiguration(); config.addConfigurationListener(new ExpandedConfigurationListenerAdapter(new MyListener())); MyListener.resetCount(); config.setProperty("test.host", "test,test1,test2"); assertEquals(1, MyListener.count); dynamicPropertyUpdater.addOrChangeProperty("test.host", "test,test1,test2", config); assertEquals(3, ((CopyOnWriteArrayList) (config.getProperty("test.host"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test1")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test2")); assertEquals(1, MyListener.count); dynamicPropertyUpdater.addOrChangeProperty("test.host", "test,test1,test2", config); assertEquals(3, ((CopyOnWriteArrayList) (config.getProperty("test.host"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test1")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test2")); assertEquals(1, MyListener.count); dynamicPropertyUpdater.addOrChangeProperty("test.host", "test,test1", config); assertEquals(2, ((CopyOnWriteArrayList) (config.getProperty("test.host"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test1")); assertEquals(2, MyListener.count); dynamicPropertyUpdater.addOrChangeProperty("test.host1", "test1,test12", config); assertEquals(2, ((CopyOnWriteArrayList) (config.getProperty("test.host1"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host1"))).contains("test1")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host1"))).contains("test12")); assertEquals(3, MyListener.count); config.setProperty("test.host1", "test1.test12"); dynamicPropertyUpdater.addOrChangeProperty("test.host1", "test1.test12", config); assertEquals("test1.test12", config.getProperty("test.host1")); assertEquals(4, MyListener.count); } @Test public void testAddorUpdatePropertyWithColonDelimiter() { AbstractConfiguration.setDefaultListDelimiter(':'); AbstractConfiguration config = new ConcurrentCompositeConfiguration(); config.addConfigurationListener(new ExpandedConfigurationListenerAdapter(new MyListener())); MyListener.resetCount(); config.setProperty("test.host", "test:test1:test2"); assertEquals(1, MyListener.count); dynamicPropertyUpdater.addOrChangeProperty("test.host", "test:test1:test2", config); assertEquals(3, ((CopyOnWriteArrayList) (config.getProperty("test.host"))).size()); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test1")); assertTrue(((CopyOnWriteArrayList) (config.getProperty("test.host"))).contains("test2")); assertEquals(1, MyListener.count); // the config is not set again. when the value is still not changed. config.setProperty("test.host1", "test1:test12"); // changing the new object value , the config.setProperty should be called again. dynamicPropertyUpdater.addOrChangeProperty("test.host1", "test1.test12", config); assertEquals("test1.test12", config.getProperty("test.host1")); assertEquals(3, MyListener.count); } static class MyListener extends AbstractDynamicPropertyListener { static int count = 0; @Override public void handlePropertyEvent(String arg0, Object arg1, EventType arg2) { incrementCount(); } private void incrementCount() { count++; } protected static void resetCount() { count = 0; } } }