Add a mechanism to read the entity owner selection strategies from a config file
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / entityownership / selectionstrategy / EntityOwnerSelectionStrategyConfigReaderTest.java
1 package org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6 import static org.mockito.Mockito.doReturn;
7 import static org.mockito.Mockito.doThrow;
8 import java.io.IOException;
9 import java.util.Hashtable;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.mockito.Mock;
13 import org.mockito.MockitoAnnotations;
14 import org.osgi.framework.BundleContext;
15 import org.osgi.framework.ServiceReference;
16 import org.osgi.service.cm.Configuration;
17 import org.osgi.service.cm.ConfigurationAdmin;
18
19 public class EntityOwnerSelectionStrategyConfigReaderTest {
20     @Mock
21     private BundleContext mockBundleContext;
22
23     @Mock
24     private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
25
26     @Mock
27     private ConfigurationAdmin mockConfigAdmin;
28
29     @Mock
30     private Configuration mockConfig;
31
32     @Before
33     public void setup() throws IOException {
34         MockitoAnnotations.initMocks(this);
35
36         doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
37         doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
38
39         doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
40
41
42
43     }
44
45     @Test
46     public void testReadStrategies(){
47         Hashtable<String, Object> props = new Hashtable<>();
48         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
49
50         doReturn(props).when(mockConfig).getProperties();
51
52         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
53
54         assertTrue(config.isStrategyConfigured("test"));
55
56         EntityOwnerSelectionStrategy strategy = config.createStrategy("test");
57         assertTrue(strategy instanceof LastCandidateSelectionStrategy);
58         assertEquals(100L, strategy.getSelectionDelayInMillis());
59     }
60
61     @Test
62     public void testReadStrategiesForNonExistentFile() throws IOException {
63         doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
64
65         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
66
67         assertFalse(config.isStrategyConfigured("test"));
68     }
69
70     @Test
71     public void testReadStrategiesInvalidDelay(){
72         Hashtable<String, Object> props = new Hashtable<>();
73         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,foo");
74
75         doReturn(props).when(mockConfig).getProperties();
76
77         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
78
79         assertFalse(config.isStrategyConfigured("test"));
80     }
81
82     @Test
83     public void testReadStrategiesInvalidClassType(){
84         Hashtable<String, Object> props = new Hashtable<>();
85         props.put("test", "String,100");
86
87         doReturn(props).when(mockConfig).getProperties();
88
89         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
90
91         assertFalse(config.isStrategyConfigured("test"));
92     }
93
94     @Test
95     public void testReadStrategiesMissingDelay(){
96         Hashtable<String, Object> props = new Hashtable<>();
97         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
98         props.put("test1", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy");
99
100         doReturn(props).when(mockConfig).getProperties();
101
102         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
103
104         assertEquals(100, config.createStrategy("test").getSelectionDelayInMillis());
105         assertEquals(0, config.createStrategy("test2").getSelectionDelayInMillis());
106     }
107
108 }