View Javadoc
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  }