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.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;
26 public class EntityOwnerSelectionStrategyConfigReaderTest {
28 private BundleContext mockBundleContext;
31 private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
34 private ConfigurationAdmin mockConfigAdmin;
37 private Configuration mockConfig;
40 public void setup() throws IOException {
41 MockitoAnnotations.initMocks(this);
43 doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
44 doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
46 doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
49 private EntityOwnerSelectionStrategyConfig loadStrategyConfig() {
50 return EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(mockBundleContext);
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");
58 doReturn(props).when(mockConfig).getProperties();
60 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
62 assertTrue(config.isStrategyConfigured("test"));
64 EntityOwnerSelectionStrategy strategy = config.createStrategy("test");
65 assertTrue(strategy instanceof LastCandidateSelectionStrategy);
66 assertEquals(100L, strategy.getSelectionDelayInMillis());
70 public void testReadStrategiesWithIOException() throws IOException {
71 doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
73 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
75 assertFalse(config.isStrategyConfigured("test"));
79 public void testReadStrategiesWithNullConfiguration() throws IOException {
80 doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
82 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
84 assertFalse(config.isStrategyConfigured("test"));
88 public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
89 doReturn(null).when(mockConfig).getProperties();
91 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
93 assertFalse(config.isStrategyConfigured("test"));
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");
101 doReturn(props).when(mockConfig).getProperties();
103 loadStrategyConfig();
106 @Test(expected = IllegalArgumentException.class)
107 public void testReadStrategiesInvalidClassType(){
108 Hashtable<String, Object> props = new Hashtable<>();
109 props.put("entity.type.test", "String,100");
111 doReturn(props).when(mockConfig).getProperties();
113 loadStrategyConfig();
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");
122 doReturn(props).when(mockConfig).getProperties();
124 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
126 assertEquals(100, config.createStrategy("test").getSelectionDelayInMillis());
127 assertEquals(0, config.createStrategy("test2").getSelectionDelayInMillis());