Fix NPE in EntityOwnerSelectionStrategyConfigReader
[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     @Test
43     public void testReadStrategies(){
44         Hashtable<String, Object> props = new Hashtable<>();
45         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
46
47         doReturn(props).when(mockConfig).getProperties();
48
49         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
50
51         assertTrue(config.isStrategyConfigured("test"));
52
53         EntityOwnerSelectionStrategy strategy = config.createStrategy("test");
54         assertTrue(strategy instanceof LastCandidateSelectionStrategy);
55         assertEquals(100L, strategy.getSelectionDelayInMillis());
56     }
57
58     @Test
59     public void testReadStrategiesWithIOException() throws IOException {
60         doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
61
62         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
63
64         assertFalse(config.isStrategyConfigured("test"));
65     }
66
67     @Test
68     public void testReadStrategiesWithNullConfiguration() throws IOException {
69         doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
70
71         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
72
73         assertFalse(config.isStrategyConfigured("test"));
74     }
75
76     @Test
77     public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
78         doReturn(null).when(mockConfig).getProperties();
79
80         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
81
82         assertFalse(config.isStrategyConfigured("test"));
83     }
84
85     @Test
86     public void testReadStrategiesInvalidDelay(){
87         Hashtable<String, Object> props = new Hashtable<>();
88         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,foo");
89
90         doReturn(props).when(mockConfig).getProperties();
91
92         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
93
94         assertFalse(config.isStrategyConfigured("test"));
95     }
96
97     @Test
98     public void testReadStrategiesInvalidClassType(){
99         Hashtable<String, Object> props = new Hashtable<>();
100         props.put("test", "String,100");
101
102         doReturn(props).when(mockConfig).getProperties();
103
104         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
105
106         assertFalse(config.isStrategyConfigured("test"));
107     }
108
109     @Test
110     public void testReadStrategiesMissingDelay(){
111         Hashtable<String, Object> props = new Hashtable<>();
112         props.put("test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
113         props.put("test1", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy");
114
115         doReturn(props).when(mockConfig).getProperties();
116
117         EntityOwnerSelectionStrategyConfig config = new EntityOwnerSelectionStrategyConfigReader(mockBundleContext).getConfig();
118
119         assertEquals(100, config.createStrategy("test").getSelectionDelayInMillis());
120         assertEquals(0, config.createStrategy("test2").getSelectionDelayInMillis());
121     }
122
123 }