View Javadoc
1   package com.atlassian.plugin.osgi.factory;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.ModuleDescriptorFactory;
5   import com.atlassian.plugin.descriptors.UnrecognisedModuleDescriptor;
6   import com.atlassian.plugin.osgi.factory.descriptor.ComponentModuleDescriptor;
7   import org.junit.Before;
8   import org.junit.Test;
9   import org.osgi.util.tracker.ServiceTracker;
10  
11  import static org.junit.Assert.assertEquals;
12  import static org.junit.Assert.assertNotNull;
13  import static org.mockito.Mockito.mock;
14  import static org.mockito.Mockito.when;
15  
16  public class TestOsgiChainedModuleDescriptorFactoryCreator {
17  
18      private OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory serviceTrackerFactory;
19      private ServiceTracker tracker;
20      private OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator resourceLocator;
21      private ModuleDescriptorFactory moduleDescriptorFactory;
22      private OsgiChainedModuleDescriptorFactoryCreator creator;
23      private ModuleDescriptor fooModuleDescriptor;
24  
25      @Before
26      public  void setUp() throws Exception {
27          serviceTrackerFactory = mock(OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory.class);
28          tracker = mock(ServiceTracker.class);
29          when(serviceTrackerFactory.create(ModuleDescriptorFactory.class.getName())).thenReturn(tracker);
30          resourceLocator = mock(OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator.class);
31          fooModuleDescriptor = mock(ModuleDescriptor.class);
32          moduleDescriptorFactory = createModuleDescriptorFactory("foo", fooModuleDescriptor);
33          creator = new OsgiChainedModuleDescriptorFactoryCreator(serviceTrackerFactory);
34      }
35  
36      @Test
37      public void testCreate() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
38          ModuleDescriptor dynModuleDescriptor = mock(ModuleDescriptor.class);
39          ModuleDescriptorFactory dynModuleDescriptorFactory = createModuleDescriptorFactory("dyn", dynModuleDescriptor);
40          when(tracker.getServices()).thenReturn(new Object[]{dynModuleDescriptorFactory});
41          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
42          assertNotNull(createdFactory);
43          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
44          assertEquals(dynModuleDescriptor, createdFactory.getModuleDescriptor("dyn"));
45          assertEquals(fooModuleDescriptor, createdFactory.getModuleDescriptor("foo"));
46          assertEquals(UnrecognisedModuleDescriptor.class, createdFactory.getModuleDescriptor("unknown").getClass());
47      }
48  
49      @Test
50      public void testCreateWithOsgiDescriptorOverridingHost() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
51          fooModuleDescriptor = mock(ModuleDescriptor.class);
52          moduleDescriptorFactory = createModuleDescriptorFactory("component", fooModuleDescriptor);
53          when(tracker.getServices()).thenReturn(new Object[0]);
54          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
55          assertNotNull(createdFactory);
56          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
57      }
58  
59      private ModuleDescriptorFactory createModuleDescriptorFactory(String prefix, ModuleDescriptor moduleDescriptor)
60              throws IllegalAccessException, InstantiationException, ClassNotFoundException {
61          ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
62          when(moduleDescriptorFactory.hasModuleDescriptor(prefix)).thenReturn(true);
63          when(moduleDescriptorFactory.getModuleDescriptor(prefix)).thenReturn(moduleDescriptor);
64          return moduleDescriptorFactory;
65      }
66  }