Fix issues with LeastLoadedCandidateSelectionStrategy
[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.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;
27
28 public class EntityOwnerSelectionStrategyConfigReaderTest {
29     @Mock
30     private BundleContext mockBundleContext;
31
32     @Mock
33     private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
34
35     @Mock
36     private ConfigurationAdmin mockConfigAdmin;
37
38     @Mock
39     private Configuration mockConfig;
40
41     @Before
42     public void setup() throws IOException {
43         MockitoAnnotations.initMocks(this);
44
45         doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
46         doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
47
48         doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
49     }
50
51     private EntityOwnerSelectionStrategyConfig loadStrategyConfig() {
52         return EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(mockBundleContext);
53     }
54
55     @Test
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");
59
60         doReturn(props).when(mockConfig).getProperties();
61
62         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
63
64         assertTrue(config.isStrategyConfigured("test"));
65
66         EntityOwnerSelectionStrategy strategy = config.createStrategy("test", Collections.<String, Long>emptyMap());
67         assertTrue(strategy.toString(), strategy instanceof LastCandidateSelectionStrategy);
68         assertEquals(100L, strategy.getSelectionDelayInMillis());
69
70         final EntityOwnerSelectionStrategy strategy1 = config.createStrategy("test", Collections.<String, Long>emptyMap());
71         assertEquals(strategy, strategy1);
72
73         config.clearStrategies();
74
75         final EntityOwnerSelectionStrategy strategy2 = config.createStrategy("test", Collections.<String, Long>emptyMap());
76         assertNotEquals(strategy1, strategy2);
77     }
78
79     @Test
80     public void testReadStrategiesWithIOException() throws IOException {
81         doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
82
83         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
84
85         assertFalse(config.isStrategyConfigured("test"));
86     }
87
88     @Test
89     public void testReadStrategiesWithNullConfiguration() throws IOException {
90         doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
91
92         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
93
94         assertFalse(config.isStrategyConfigured("test"));
95     }
96
97     @Test
98     public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
99         doReturn(null).when(mockConfig).getProperties();
100
101         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
102
103         assertFalse(config.isStrategyConfigured("test"));
104     }
105
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");
110
111         doReturn(props).when(mockConfig).getProperties();
112
113         loadStrategyConfig();
114     }
115
116     @Test(expected = IllegalArgumentException.class)
117     public void testReadStrategiesInvalidClassType(){
118         Hashtable<String, Object> props = new Hashtable<>();
119         props.put("entity.type.test", "String,100");
120
121         doReturn(props).when(mockConfig).getProperties();
122
123         loadStrategyConfig();
124     }
125
126     @Test
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");
131
132         doReturn(props).when(mockConfig).getProperties();
133
134         EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
135
136         assertEquals(100, config.createStrategy("test", Collections.<String, Long>emptyMap()).getSelectionDelayInMillis());
137         assertEquals(0, config.createStrategy("test2", Collections.<String, Long>emptyMap()).getSelectionDelayInMillis());
138     }
139
140 }