Clean up DistributedEntityOwnershipService instantiation
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / entityownership / selectionstrategy / EntityOwnerSelectionStrategyConfigReaderTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.doThrow;
15 import java.io.IOException;
16 import java.util.Hashtable;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mock;
20 import org.mockito.MockitoAnnotations;
21 import org.osgi.framework.BundleContext;
22 import org.osgi.framework.ServiceReference;
23 import org.osgi.service.cm.Configuration;
24 import org.osgi.service.cm.ConfigurationAdmin;
25
26 public class EntityOwnerSelectionStrategyConfigReaderTest {
27     @Mock
28     private BundleContext mockBundleContext;
29
30     @Mock
31     private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
32
33     @Mock
34     private ConfigurationAdmin mockConfigAdmin;
35
36     @Mock
37     private Configuration mockConfig;
38
39     @Before
40     public void setup() throws IOException {
41         MockitoAnnotations.initMocks(this);
42
43         doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
44         doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
45
46         doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
47     }
48
49     private EntityOwnerSelectionStrategyConfig loadStrategyConfig() {
50         return EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(mockBundleContext);
51     }
52
53     @Test
54     public void testReadStrategies(){
55         Hashtable<String, Object> props = new Hashtable<>();
56         props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
57
58         doReturn(props).when(mockConfig).getProperties();
59
60         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
61
62         assertTrue(config.isStrategyConfigured("test"));
63
64         EntityOwnerSelectionStrategy strategy = config.createStrategy("test");
65         assertTrue(strategy instanceof LastCandidateSelectionStrategy);
66         assertEquals(100L, strategy.getSelectionDelayInMillis());
67     }
68
69     @Test
70     public void testReadStrategiesWithIOException() throws IOException {
71         doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
72
73         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
74
75         assertFalse(config.isStrategyConfigured("test"));
76     }
77
78     @Test
79     public void testReadStrategiesWithNullConfiguration() throws IOException {
80         doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
81
82         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
83
84         assertFalse(config.isStrategyConfigured("test"));
85     }
86
87     @Test
88     public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
89         doReturn(null).when(mockConfig).getProperties();
90
91         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
92
93         assertFalse(config.isStrategyConfigured("test"));
94     }
95
96     @Test(expected = IllegalArgumentException.class)
97     public void testReadStrategiesInvalidDelay(){
98         Hashtable<String, Object> props = new Hashtable<>();
99         props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,foo");
100
101         doReturn(props).when(mockConfig).getProperties();
102
103         loadStrategyConfig();
104     }
105
106     @Test(expected = IllegalArgumentException.class)
107     public void testReadStrategiesInvalidClassType(){
108         Hashtable<String, Object> props = new Hashtable<>();
109         props.put("entity.type.test", "String,100");
110
111         doReturn(props).when(mockConfig).getProperties();
112
113         loadStrategyConfig();
114     }
115
116     @Test
117     public void testReadStrategiesMissingDelay(){
118         Hashtable<String, Object> props = new Hashtable<>();
119         props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy,100");
120         props.put("entity.type.test1", "org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.LastCandidateSelectionStrategy");
121
122         doReturn(props).when(mockConfig).getProperties();
123
124         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
125
126         assertEquals(100, config.createStrategy("test").getSelectionDelayInMillis());
127         assertEquals(0, config.createStrategy("test2").getSelectionDelayInMillis());
128     }
129
130 }