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.junit.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.ArgumentMatchers.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
24 @Mock
25 private PluginEventManager pluginEventManager;
26 @Mock
27 private OsgiPlugin plugin;
28 @Mock
29 private ModuleDescriptorServiceTrackerCustomizer instance;
30 @Mock
31 private Bundle bundle;
32 @Mock
33 private BundleContext bundleContext;
34 @Mock
35 private ModuleDescriptor moduleDescriptor;
36 @Mock
37 private ServiceReference serviceReference;
38
39 private final String moduleKey = "MODULE_KEY";
40
41 @Before
42 public void setUp() {
43 when(serviceReference.getBundle()).thenReturn(bundle);
44 when(plugin.getBundle()).thenReturn(bundle);
45 when(bundle.getBundleContext()).thenReturn(bundleContext);
46 when(bundleContext.getService(serviceReference)).thenReturn(moduleDescriptor);
47 when(moduleDescriptor.getKey()).thenReturn(moduleKey);
48 instance = new ModuleDescriptorServiceTrackerCustomizer(plugin, pluginEventManager);
49 }
50
51 @Test
52 public void moduleAddedBeforeEnabling() {
53 instance.addingService(serviceReference);
54 final InOrder inOrder = inOrder(plugin, pluginEventManager);
55 inOrder.verify(plugin).addModuleDescriptor(moduleDescriptor);
56 inOrder.verify(pluginEventManager).broadcast(any(PluginModuleAvailableEvent.class));
57 }
58
59 @Test
60 public void moduleRemovedAfterDisabling() {
61 instance.removedService(serviceReference, moduleDescriptor);
62 final InOrder inOrder = inOrder(plugin, pluginEventManager);
63 inOrder.verify(pluginEventManager).broadcast(any(PluginModuleUnavailableEvent.class));
64 inOrder.verify(plugin).clearModuleDescriptor(moduleKey);
65 }
66 }