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.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  }