Package com.netflix.config

Source Code of com.netflix.config.PollingSourceTest

/**
* 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 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(250);
        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());
    }

}
TOP

Related Classes of com.netflix.config.PollingSourceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.