2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotEquals;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.doThrow;
16 import java.io.IOException;
17 import java.util.Collections;
18 import java.util.Hashtable;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.osgi.framework.BundleContext;
24 import org.osgi.framework.ServiceReference;
25 import org.osgi.service.cm.Configuration;
26 import org.osgi.service.cm.ConfigurationAdmin;
28 public class EntityOwnerSelectionStrategyConfigReaderTest {
30 private BundleContext mockBundleContext;
33 private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
36 private ConfigurationAdmin mockConfigAdmin;
39 private Configuration mockConfig;
42 public void setup() throws IOException {
43 MockitoAnnotations.initMocks(this);
45 doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
46 doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
48 doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
51 private EntityOwnerSelectionStrategyConfig loadStrategyConfig() {
52 return EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(mockBundleContext);
56 public void testReadStrategies(){
57 Hashtable<String, Object> props = new Hashtable<>();
58 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
60 doReturn(props).when(mockConfig).getProperties();
62 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
64 assertTrue(config.isStrategyConfigured("test"));
66 EntityOwnerSelectionStrategy strategy = config.createStrategy("test", Collections.<String, Long>emptyMap());
67 assertTrue(strategy.toString(), strategy instanceof LastCandidateSelectionStrategy);
68 assertEquals(100L, strategy.getSelectionDelayInMillis());
70 final EntityOwnerSelectionStrategy strategy1 = config.createStrategy("test", Collections.<String, Long>emptyMap());
71 assertEquals(strategy, strategy1);
73 config.clearStrategies();
75 final EntityOwnerSelectionStrategy strategy2 = config.createStrategy("test", Collections.<String, Long>emptyMap());
76 assertNotEquals(strategy1, strategy2);
80 public void testReadStrategiesWithIOException() throws IOException {
81 doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
83 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
85 assertFalse(config.isStrategyConfigured("test"));
89 public void testReadStrategiesWithNullConfiguration() throws IOException {
90 doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
92 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
94 assertFalse(config.isStrategyConfigured("test"));
98 public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
99 doReturn(null).when(mockConfig).getProperties();
101 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
103 assertFalse(config.isStrategyConfigured("test"));
106 @Test(expected = IllegalArgumentException.class)
107 public void testReadStrategiesInvalidDelay(){
108 Hashtable<String, Object> props = new Hashtable<>();
109 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,foo");
111 doReturn(props).when(mockConfig).getProperties();
113 loadStrategyConfig();
116 @Test(expected = IllegalArgumentException.class)
117 public void testReadStrategiesInvalidClassType(){
118 Hashtable<String, Object> props = new Hashtable<>();
119 props.put("entity.type.test", "String,100");
121 doReturn(props).when(mockConfig).getProperties();
123 loadStrategyConfig();
127 public void testReadStrategiesMissingDelay(){
128 Hashtable<String, Object> props = new Hashtable<>();
129 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
130 props.put("entity.type.test1", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy");
132 doReturn(props).when(mockConfig).getProperties();
134 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
136 assertEquals(100, config.createStrategy("test", Collections.<String, Long>emptyMap()).getSelectionDelayInMillis());
137 assertEquals(0, config.createStrategy("test2", Collections.<String, Long>emptyMap()).getSelectionDelayInMillis());