com.netflix.config.PollingSourceTest.java Source code

Java tutorial

Introduction

Here is the source code for com.netflix.config.PollingSourceTest.java

Source

/*
 *
 *  Copyright 2012 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 java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.configuration.BaseConfiguration;
import org.junit.Test;

public class PollingSourceTest {

    static class DummyPollingSource implements PolledConfigurationSource {

        volatile boolean incremental;
        volatile Map<String, Object> full, added, deleted, changed;

        public DummyPollingSource(boolean incremental) {
            this.incremental = incremental;
        }

        public synchronized void setIncremental(boolean value) {
            this.incremental = value;
        }

        public synchronized void setContent(String content, Map<String, Object> map) {
            String[] pairs = content.split(",");
            if (pairs != null) {
                for (String pair : pairs) {
                    String[] nameValue = pair.trim().split("=");
                    if (nameValue.length == 2) {
                        map.put(nameValue[0], nameValue[1]);
                    }
                }
            }
        }

        public synchronized void setFull(String content) {
            full = new ConcurrentHashMap<String, Object>();
            setContent(content, full);
        }

        public synchronized void setAdded(String content) {
            added = new ConcurrentHashMap<String, Object>();
            setContent(content, added);
        }

        public synchronized void setDeleted(String content) {
            deleted = new ConcurrentHashMap<String, Object>();
            setContent(content, deleted);
        }

        public synchronized void setChanged(String content) {
            changed = new ConcurrentHashMap<String, Object>();
            setContent(content, changed);
        }

        @Override
        public synchronized PollResult poll(boolean initial, Object checkPoint) throws Exception {
            if (incremental) {
                return PollResult.createIncremental(added, changed, deleted, null);
            } else {
                return PollResult.createFull(full);
            }
        }
    }

    @Test
    public void testDeletingPollingSource() throws Exception {
        BaseConfiguration config = new BaseConfiguration();
        config.addProperty("prop1", "original");
        DummyPollingSource source = new DummyPollingSource(false);
        source.setFull("prop1=changed");
        FixedDelayPollingScheduler scheduler = new FixedDelayPollingScheduler(0, 10, false);
        ConfigurationWithPollingSource pollingConfig = new ConfigurationWithPollingSource(config, source,
                scheduler);
        Thread.sleep(200);
        assertEquals("changed", pollingConfig.getProperty("prop1"));

        source.setFull("");
        Thread.sleep(200);
        assertFalse(pollingConfig.containsKey("prop1"));
        source.setFull("prop1=changedagain,prop2=new");
        Thread.sleep(200);
        assertEquals("changedagain", pollingConfig.getProperty("prop1"));
        assertEquals("new", pollingConfig.getProperty("prop2"));
        source.setFull("prop3=new");
        Thread.sleep(200);
        assertFalse(pollingConfig.containsKey("prop1"));
        assertFalse(pollingConfig.containsKey("prop2"));
        assertEquals("new", pollingConfig.getProperty("prop3"));
    }

    @Test
    public void testNoneDeletingPollingSource() throws Exception {
        BaseConfiguration config = new BaseConfiguration();
        config.addProperty("prop1", "original");
        DummyPollingSource source = new DummyPollingSource(false);
        source.setFull("");
        FixedDelayPollingScheduler scheduler = new FixedDelayPollingScheduler(0, 10, true);
        ConfigurationWithPollingSource pollingConfig = new ConfigurationWithPollingSource(config, source,
                scheduler);
        Thread.sleep(200);
        assertEquals("original", pollingConfig.getProperty("prop1"));
        source.setFull("prop1=changed");
        Thread.sleep(200);
        assertEquals("changed", pollingConfig.getProperty("prop1"));
        source.setFull("prop1=changedagain,prop2=new");
        Thread.sleep(200);
        assertEquals("changedagain", pollingConfig.getProperty("prop1"));
        assertEquals("new", pollingConfig.getProperty("prop2"));
        source.setFull("prop3=new");
        Thread.sleep(200);
        assertEquals("changedagain", pollingConfig.getProperty("prop1"));
        assertEquals("new", pollingConfig.getProperty("prop2"));
        assertEquals("new", pollingConfig.getProperty("prop3"));
    }

    @Test
    public void testIncrementalPollingSource() throws Exception {
        BaseConfiguration config = new BaseConfiguration();
        DynamicPropertyFactory.initWithConfigurationSource(config);
        DynamicStringProperty prop1 = new DynamicStringProperty("prop1", null);
        DynamicStringProperty prop2 = new DynamicStringProperty("prop2", null);
        config.addProperty("prop1", "original");
        DummyPollingSource source = new DummyPollingSource(true);
        FixedDelayPollingScheduler scheduler = new FixedDelayPollingScheduler(0, 10, true);
        scheduler.setIgnoreDeletesFromSource(false);
        // ConfigurationWithPollingSource pollingConfig = new ConfigurationWithPollingSource(config, source,scheduler);
        scheduler.startPolling(source, config);
        assertEquals("original", config.getProperty("prop1"));
        assertEquals("original", prop1.get());
        source.setAdded("prop2=new");
        Thread.sleep(200);
        assertEquals("original", config.getProperty("prop1"));
        assertEquals("new", config.getProperty("prop2"));
        assertEquals("new", prop2.get());
        source.setDeleted("prop1=DoesNotMatter");
        source.setChanged("prop2=changed");
        source.setAdded("");
        Thread.sleep(200);
        assertFalse(config.containsKey("prop1"));
        assertNull(prop1.get());
        assertEquals("changed", config.getProperty("prop2"));
        assertEquals("changed", prop2.get());
    }

}