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.assertNotEquals;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.doThrow;
17 import java.io.IOException;
18 import java.util.Collections;
19 import java.util.Hashtable;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.mockito.Mock;
23 import org.mockito.MockitoAnnotations;
24 import org.osgi.framework.BundleContext;
25 import org.osgi.framework.ServiceReference;
26 import org.osgi.service.cm.Configuration;
27 import org.osgi.service.cm.ConfigurationAdmin;
29 public class EntityOwnerSelectionStrategyConfigReaderTest {
31 private BundleContext mockBundleContext;
34 private ServiceReference<ConfigurationAdmin> mockConfigAdminServiceRef;
37 private ConfigurationAdmin mockConfigAdmin;
40 private Configuration mockConfig;
43 public void setup() throws IOException {
44 MockitoAnnotations.initMocks(this);
46 doReturn(mockConfigAdminServiceRef).when(mockBundleContext).getServiceReference(ConfigurationAdmin.class);
47 doReturn(mockConfigAdmin).when(mockBundleContext).getService(mockConfigAdminServiceRef);
49 doReturn(mockConfig).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
52 private EntityOwnerSelectionStrategyConfig loadStrategyConfig() {
53 return EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(mockBundleContext);
57 public void testReadStrategies() {
58 Hashtable<String, Object> props = new Hashtable<>();
59 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership."
60 + "selectionstrategy.LastCandidateSelectionStrategy,100");
62 doReturn(props).when(mockConfig).getProperties();
64 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
66 assertTrue(config.isStrategyConfigured("test"));
68 EntityOwnerSelectionStrategy strategy = config.createStrategy("test", Collections.<String, Long>emptyMap());
69 assertTrue(strategy.toString(), strategy instanceof LastCandidateSelectionStrategy);
70 assertEquals(100L, strategy.getSelectionDelayInMillis());
72 final EntityOwnerSelectionStrategy strategy1 = config.createStrategy("test", Collections.emptyMap());
73 assertEquals(strategy, strategy1);
75 config.clearStrategies();
77 final EntityOwnerSelectionStrategy strategy2 = config.createStrategy("test", Collections.emptyMap());
78 assertNotEquals(strategy1, strategy2);
82 public void testReadStrategiesWithIOException() throws IOException {
83 doThrow(IOException.class).when(mockConfigAdmin).getConfiguration(
84 EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
86 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
88 assertFalse(config.isStrategyConfigured("test"));
92 public void testReadStrategiesWithNullConfiguration() throws IOException {
93 doReturn(null).when(mockConfigAdmin).getConfiguration(EntityOwnerSelectionStrategyConfigReader.CONFIG_ID);
95 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
97 assertFalse(config.isStrategyConfigured("test"));
101 public void testReadStrategiesWithNullConfigurationProperties() throws IOException {
102 doReturn(null).when(mockConfig).getProperties();
104 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
106 assertFalse(config.isStrategyConfigured("test"));
109 @Test(expected = IllegalArgumentException.class)
110 public void testReadStrategiesInvalidDelay() {
111 Hashtable<String, Object> props = new Hashtable<>();
112 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership."
113 + "selectionstrategy.LastCandidateSelectionStrategy,foo");
115 doReturn(props).when(mockConfig).getProperties();
117 loadStrategyConfig();
120 @Test(expected = IllegalArgumentException.class)
121 public void testReadStrategiesInvalidClassType() {
122 Hashtable<String, Object> props = new Hashtable<>();
123 props.put("entity.type.test", "String,100");
125 doReturn(props).when(mockConfig).getProperties();
127 loadStrategyConfig();
131 public void testReadStrategiesMissingDelay() {
132 Hashtable<String, Object> props = new Hashtable<>();
133 props.put("entity.type.test", "org.opendaylight.controller.cluster.datastore.entityownership."
134 + "selectionstrategy.LastCandidateSelectionStrategy,100");
135 props.put("entity.type.test1", "org.opendaylight.controller.cluster.datastore.entityownership."
136 + "selectionstrategy.LastCandidateSelectionStrategy");
138 doReturn(props).when(mockConfig).getProperties();
140 EntityOwnerSelectionStrategyConfig config = loadStrategyConfig();
142 assertEquals(100, config.createStrategy("test", Collections.emptyMap()).getSelectionDelayInMillis());
143 assertEquals(0, config.createStrategy("test2", Collections.emptyMap()).getSelectionDelayInMillis());