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 junit.framework.TestCase;
8   import org.osgi.util.tracker.ServiceTracker;
9   
10  import static org.mockito.Mockito.mock;
11  import static org.mockito.Mockito.when;
12  
13  /**
14   *
15   */
16  public class TestOsgiChainedModuleDescriptorFactoryCreator extends TestCase {
17      private OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory serviceTrackerFactory;
18      private ServiceTracker tracker;
19      private OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator resourceLocator;
20      private ModuleDescriptorFactory moduleDescriptorFactory;
21      private OsgiChainedModuleDescriptorFactoryCreator creator;
22      private ModuleDescriptor fooModuleDescriptor;
23  
24      public void testCreate() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
25          ModuleDescriptor dynModuleDescriptor = mock(ModuleDescriptor.class);
26          ModuleDescriptorFactory dynModuleDescriptorFactory = createModuleDescriptorFactory("dyn", dynModuleDescriptor);
27          when(tracker.getServices()).thenReturn(new Object[]{dynModuleDescriptorFactory});
28          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
29          assertNotNull(createdFactory);
30          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
31          assertEquals(dynModuleDescriptor, createdFactory.getModuleDescriptor("dyn"));
32          assertEquals(fooModuleDescriptor, createdFactory.getModuleDescriptor("foo"));
33          assertEquals(UnrecognisedModuleDescriptor.class, createdFactory.getModuleDescriptor("unknown").getClass());
34      }
35  
36      public void testCreateWithOsgiDescriptorOverridingHost() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
37          fooModuleDescriptor = mock(ModuleDescriptor.class);
38          moduleDescriptorFactory = createModuleDescriptorFactory("component", fooModuleDescriptor);
39          when(tracker.getServices()).thenReturn(new Object[0]);
40          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
41          assertNotNull(createdFactory);
42          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
43      }
44  
45      protected void setUp() throws Exception {
46          super.setUp();
47          serviceTrackerFactory = mock(OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory.class);
48          tracker = mock(ServiceTracker.class);
49          when(serviceTrackerFactory.create(ModuleDescriptorFactory.class.getName())).thenReturn(tracker);
50          resourceLocator = mock(OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator.class);
51          fooModuleDescriptor = mock(ModuleDescriptor.class);
52          moduleDescriptorFactory = createModuleDescriptorFactory("foo", fooModuleDescriptor);
53          creator = new OsgiChainedModuleDescriptorFactoryCreator(serviceTrackerFactory);
54      }
55  
56      private ModuleDescriptorFactory createModuleDescriptorFactory(String prefix, ModuleDescriptor moduleDescriptor)
57              throws IllegalAccessException, InstantiationException, ClassNotFoundException {
58          ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
59          when(moduleDescriptorFactory.hasModuleDescriptor(prefix)).thenReturn(true);
60          when(moduleDescriptorFactory.getModuleDescriptor(prefix)).thenReturn(moduleDescriptor);
61          return moduleDescriptorFactory;
62      }
63  }