View Javadoc

1   package com.atlassian.plugin.osgi.factory;
2   
3   import java.util.Collections;
4   import java.util.List;
5   import java.util.Map;
6   
7   import com.atlassian.plugin.ModuleDescriptor;
8   import com.atlassian.plugin.descriptors.UnrecognisedModuleDescriptor;
9   import com.atlassian.plugin.event.PluginEventManager;
10  import com.atlassian.plugin.module.ModuleFactory;
11  import com.atlassian.plugin.osgi.StubServletModuleDescriptor;
12  import com.atlassian.plugin.osgi.external.ListableModuleDescriptorFactory;
13  import com.atlassian.plugin.servlet.ServletModuleManager;
14  import com.atlassian.plugin.servlet.descriptors.ServletModuleDescriptor;
15  
16  import org.dom4j.Element;
17  import org.dom4j.dom.DOMElement;
18  import org.junit.Before;
19  import org.junit.Test;
20  import org.osgi.framework.Bundle;
21  import org.osgi.framework.BundleContext;
22  import org.osgi.framework.ServiceReference;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertTrue;
26  import static org.mockito.Mockito.mock;
27  import static org.mockito.Mockito.verify;
28  import static org.mockito.Mockito.when;
29  
30  public class TestUnrecognizedModuleDescriptorServiceTrackerCustomizer
31  {
32      private PluginEventManager pluginEventManager;
33      private OsgiPlugin plugin;
34      private UnrecognizedModuleDescriptorServiceTrackerCustomizer instance;
35      private Bundle bundle;
36      private BundleContext bundleContext;
37  
38      @Before
39      public void setUp() throws Exception
40      {
41          pluginEventManager = mock(PluginEventManager.class);
42          plugin = mock(OsgiPlugin.class);
43          bundle = mock(Bundle.class);
44          when(plugin.getBundle()).thenReturn(bundle);
45          bundleContext = mock(BundleContext.class);
46          when(bundle.getBundleContext()).thenReturn(bundleContext);
47          instance = new UnrecognizedModuleDescriptorServiceTrackerCustomizer(plugin, pluginEventManager);
48      }
49  
50      @Test
51      public void testGetModuleDescriptorsByDescriptorClass()
52      {
53          ModuleFactory moduleFactory = mock(ModuleFactory.class);
54          ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
55          StubServletModuleDescriptor stubServletModuleDescriptor =
56                  new StubServletModuleDescriptor(moduleFactory, servletModuleManager);
57          when(plugin.getModuleDescriptors()).thenReturn(
58                  Collections.<ModuleDescriptor<?>>singleton(stubServletModuleDescriptor));
59  
60          List<ServletModuleDescriptor> result = instance.getModuleDescriptorsByDescriptorClass(
61                  ServletModuleDescriptor.class);
62          assertEquals(Collections.<ServletModuleDescriptor>singletonList(stubServletModuleDescriptor), result);
63      }
64  
65      @Test
66      public void testGetModuleDescriptorsByDescriptorClassWithSubclass()
67      {
68          ModuleFactory moduleFactory = mock(ModuleFactory.class);
69          ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
70          ServletModuleDescriptor servletModuleDescriptor =
71                  new ServletModuleDescriptor(moduleFactory, servletModuleManager);
72          when(plugin.getModuleDescriptors()).thenReturn(
73                  Collections.<ModuleDescriptor<?>>singleton(servletModuleDescriptor));
74  
75          List<StubServletModuleDescriptor> result = instance.getModuleDescriptorsByDescriptorClass(
76                  StubServletModuleDescriptor.class);
77          assertTrue(result.isEmpty());
78      }
79  
80      @Test
81      public void unrecognisedModuleDescriptorIsRecognisedOnceAvailable() throws Exception
82      {
83          UnrecognisedModuleDescriptor unrecognised = new UnrecognisedModuleDescriptor();
84          unrecognised.setKey("unique-key");
85          unrecognised.setPlugin(plugin);
86          Element elem = new DOMElement("not-initially-known");
87  
88          Map<String, Element> moduleElements = Collections.singletonMap("unique-key", elem);
89          when(plugin.getModuleElements()).thenReturn(moduleElements);
90  
91          when(plugin.getModuleDescriptors()).thenReturn(
92                  Collections.<ModuleDescriptor<?>>singleton(unrecognised));
93  
94          ListableModuleDescriptorFactory moduleDescriptorFactory = mock(ListableModuleDescriptorFactory.class);
95          when(moduleDescriptorFactory.hasModuleDescriptor("not-initially-known")).thenReturn(true);
96          ModuleDescriptor md = mock(ModuleDescriptor.class);
97          when(moduleDescriptorFactory.getModuleDescriptor("not-initially-known")).thenReturn(md);
98  
99          ServiceReference serviceReference = mock(ServiceReference.class);
100         when(bundleContext.getService(serviceReference)).thenReturn(moduleDescriptorFactory);
101         instance.addingService(serviceReference);
102 
103         verify(md).init(plugin, elem);
104         verify(plugin).addModuleDescriptor(md);
105     }
106 }