ca95abb359bc621850fc978f9de77dcfd958ad04
[controller.git] / opendaylight / config / config-manager / src / test / java / org / opendaylight / controller / config / manager / impl / osgi / BundleContextBackedModuleFactoriesResolverTest.java
1 package org.opendaylight.controller.config.manager.impl.osgi;
2
3 import static org.hamcrest.CoreMatchers.containsString;
4 import static org.junit.Assert.assertEquals;
5 import static org.junit.Assert.assertThat;
6 import static org.junit.Assert.assertTrue;
7 import static org.junit.Assert.fail;
8 import static org.mockito.Mockito.doReturn;
9 import static org.mockito.Mockito.mock;
10
11 import com.google.common.collect.Lists;
12 import java.util.Map;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.mockito.Mock;
16 import org.mockito.MockitoAnnotations;
17 import org.opendaylight.controller.config.spi.ModuleFactory;
18 import org.osgi.framework.Bundle;
19 import org.osgi.framework.BundleContext;
20 import org.osgi.framework.ServiceReference;
21
22 public class BundleContextBackedModuleFactoriesResolverTest {
23
24     @Mock
25     private BundleContext bundleContext;
26     private BundleContextBackedModuleFactoriesResolver resolver;
27     private ServiceReference<?> s1;
28     private ServiceReference<?> s2;
29     private ModuleFactory f1;
30     private ModuleFactory f2;
31
32     @Before
33     public void setUp() throws Exception {
34         MockitoAnnotations.initMocks(this);
35         s1 = getServiceRef();
36         s2 = getServiceRef();
37         doReturn(Lists.newArrayList(s1, s2)).when(bundleContext).getServiceReferences(ModuleFactory.class, null);
38         f1 = getMockFactory("f1");
39         doReturn(f1).when(bundleContext).getService(s1);
40         f2 = getMockFactory("f2");
41         doReturn(f2).when(bundleContext).getService(s2);
42         resolver = new BundleContextBackedModuleFactoriesResolver(bundleContext);
43     }
44
45     private ModuleFactory getMockFactory(final String name) {
46         ModuleFactory mock = mock(ModuleFactory.class);
47         doReturn(name).when(mock).toString();
48         doReturn(name).when(mock).getImplementationName();
49         return mock;
50     }
51
52     private ServiceReference<?> getServiceRef() {
53         ServiceReference<?> mock = mock(ServiceReference.class);
54         doReturn("serviceRef").when(mock).toString();
55         final Bundle bundle = mock(Bundle.class);
56         doReturn(bundleContext).when(bundle).getBundleContext();
57         doReturn(bundle).when(mock).getBundle();
58         return mock;
59     }
60
61     @Test
62     public void testGetAllFactories() throws Exception {
63         Map<String, Map.Entry<ModuleFactory, BundleContext>> allFactories = resolver.getAllFactories();
64         assertEquals(2, allFactories.size());
65         assertTrue(allFactories.containsKey(f1.getImplementationName()));
66         assertEquals(f1, allFactories.get(f1.getImplementationName()).getKey());
67         assertEquals(bundleContext, allFactories.get(f1.getImplementationName()).getValue());
68         assertTrue(allFactories.containsKey(f2.getImplementationName()));
69         assertEquals(f2, allFactories.get(f2.getImplementationName()).getKey());
70         assertEquals(bundleContext, allFactories.get(f2.getImplementationName()).getValue());
71     }
72
73     @Test
74     public void testDuplicateFactories() throws Exception {
75         doReturn(f1).when(bundleContext).getService(s2);
76         try {
77             resolver.getAllFactories();
78         } catch (Exception e) {
79             assertThat(e.getMessage(), containsString(f1.getImplementationName()));
80             assertThat(e.getMessage(), containsString("unique"));
81             return;
82         }
83
84         fail("Should fail with duplicate factory name");
85     }
86
87     @Test(expected = NullPointerException.class)
88     public void testNullFactory() throws Exception {
89         doReturn(null).when(bundleContext).getService(s2);
90         resolver.getAllFactories();
91     }
92
93     @Test(expected = IllegalStateException.class)
94     public void testNullFactoryName() throws Exception {
95         doReturn(null).when(f1).getImplementationName();
96         resolver.getAllFactories();
97     }
98
99     @Test(expected = NullPointerException.class)
100     public void testNullBundleName() throws Exception {
101         doReturn(null).when(s1).getBundle();
102         resolver.getAllFactories();
103     }
104 }