1 package com.atlassian.plugin.osgi.factory;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.event.PluginEventManager;
5 import com.atlassian.plugin.event.events.PluginModuleAvailableEvent;
6 import com.atlassian.plugin.event.events.PluginModuleUnavailableEvent;
7 import org.junit.Before;
8 import org.junit.Test;
9 import org.junit.runner.RunWith;
10 import org.mockito.InOrder;
11 import org.mockito.Mock;
12 import org.mockito.runners.MockitoJUnitRunner;
13 import org.osgi.framework.Bundle;
14 import org.osgi.framework.BundleContext;
15 import org.osgi.framework.ServiceReference;
16
17 import static org.mockito.Matchers.any;
18 import static org.mockito.Mockito.inOrder;
19 import static org.mockito.Mockito.when;
20
21 @RunWith(MockitoJUnitRunner.class)
22 public class TestModuleDescriptorServiceTrackerCustomizer {
23 @Mock
24 private PluginEventManager pluginEventManager;
25
26 @Mock
27 private OsgiPlugin plugin;
28
29 @Mock
30 private ModuleDescriptorServiceTrackerCustomizer instance;
31
32 @Mock
33 private Bundle bundle;
34
35 @Mock
36 private BundleContext bundleContext;
37
38 @Mock
39 private ModuleDescriptor moduleDescriptor;
40
41 @Mock
42 private ServiceReference serviceReference;
43
44 private final String moduleKey = "MODULE_KEY";
45
46 @Before
47 public void setUp() throws Exception {
48 when(serviceReference.getBundle()).thenReturn(bundle);
49 when(plugin.getBundle()).thenReturn(bundle);
50 when(bundle.getBundleContext()).thenReturn(bundleContext);
51 when(bundleContext.getService(serviceReference)).thenReturn(moduleDescriptor);
52 when(moduleDescriptor.getKey()).thenReturn(moduleKey);
53 instance = new ModuleDescriptorServiceTrackerCustomizer(plugin, pluginEventManager);
54 }
55
56 @Test
57 public void moduleAddedBeforeEnabling() throws Exception {
58 instance.addingService(serviceReference);
59 final InOrder inOrder = inOrder(plugin, pluginEventManager);
60 inOrder.verify(plugin).addModuleDescriptor(moduleDescriptor);
61 inOrder.verify(pluginEventManager).broadcast(any(PluginModuleAvailableEvent.class));
62 }
63
64 @Test
65 public void moduleRemovedAfterDisabling() throws Exception {
66 instance.removedService(serviceReference, moduleDescriptor);
67 final InOrder inOrder = inOrder(plugin, pluginEventManager);
68 inOrder.verify(pluginEventManager).broadcast(any(PluginModuleUnavailableEvent.class));
69 inOrder.verify(plugin).clearModuleDescriptor(moduleKey);
70 }
71 }