View Javadoc

1   package com.atlassian.plugin.osgi.factory.transform.stage;
2   
3   import com.atlassian.plugin.JarPluginArtifact;
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.osgi.SomeInterface;
6   import com.atlassian.plugin.osgi.container.OsgiContainerManager;
7   import com.atlassian.plugin.osgi.factory.transform.TransformContext;
8   import com.atlassian.plugin.osgi.factory.transform.model.SystemExports;
9   import com.atlassian.plugin.osgi.hostcomponents.HostComponentRegistration;
10  import com.atlassian.plugin.test.PluginJarBuilder;
11  import junit.framework.TestCase;
12  import org.osgi.framework.ServiceReference;
13  
14  import java.io.File;
15  import java.util.ArrayList;
16  import java.util.Collections;
17  import java.util.List;
18  
19  import static org.mockito.Mockito.mock;
20  import static org.mockito.Mockito.when;
21  
22  public class TestScanDescriptorForHostClassesStage extends TestCase
23  {
24      private OsgiContainerManager osgiContainerManager;
25      private HostComponentRegistration registration;
26  
27      @Override
28      protected void setUp() throws Exception
29      {
30          super.setUp();
31  
32          osgiContainerManager = mock(OsgiContainerManager.class);
33          registration = mock(HostComponentRegistration.class);
34          when(osgiContainerManager.getRegisteredServices()).thenReturn(new ServiceReference[0]);
35      }
36  
37      public void testTransform() throws Exception
38      {
39          final File plugin = new PluginJarBuilder("plugin")
40                  .addFormattedResource("atlassian-plugin.xml",
41                          "<atlassian-plugin name='Test Bundle instruction plugin 2' key='test.plugin'>",
42                          "    <plugin-info>",
43                          "        <version>1.0</version>",
44                          "    </plugin-info>",
45                          "    <foo key='bar' class='com.atlassian.plugin.osgi.Foo' />",
46                          "</atlassian-plugin>")
47                  .build();
48  
49          ScanDescriptorForHostClassesStage stage = new ScanDescriptorForHostClassesStage();
50          SystemExports exports = new SystemExports("com.atlassian.plugin.osgi");
51          final TransformContext context = new TransformContext(Collections.<HostComponentRegistration> emptyList(), exports, new JarPluginArtifact(plugin),
52              null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
53          stage.execute(context);
54          assertTrue(context.getExtraImports().contains("com.atlassian.plugin.osgi"));
55      }
56  
57      public void testTransformButPackageInPlugin() throws Exception
58      {
59          final File plugin = new PluginJarBuilder("plugin")
60                  .addFormattedResource("atlassian-plugin.xml",
61                          "<atlassian-plugin name='Test Bundle instruction plugin 2' key='test.plugin'>",
62                          "    <plugin-info>",
63                          "        <version>1.0</version>",
64                          "    </plugin-info>",
65                          "    <foo key='bar' class='com.atlassian.plugin.osgi.Foo' />",
66                          "</atlassian-plugin>")
67                  .addResource("com/atlassian/plugin/osgi/", "")
68                  .addResource("com/atlassian/plugin/osgi/Foo.class", "asd")
69                  .build();
70  
71          ScanDescriptorForHostClassesStage stage = new ScanDescriptorForHostClassesStage();
72          SystemExports exports = new SystemExports("com.atlassian.plugin.osgi");
73          final TransformContext context = new TransformContext(Collections.<HostComponentRegistration> emptyList(), exports, new JarPluginArtifact(plugin),
74              null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
75          stage.execute(context);
76          assertTrue(!context.getExtraImports().contains("com.atlassian.plugin.osgi"));
77      }
78  
79      public void testTransformIgnoreUnknown() throws Exception
80      {
81          final File plugin = new PluginJarBuilder("plugin")
82                  .addFormattedResource("atlassian-plugin.xml",
83                          "<atlassian-plugin name='Test Bundle instruction plugin 2' key='test.plugin'>",
84                          "    <plugin-info>",
85                          "        <version>1.0</version>",
86                          "    </plugin-info>",
87                          "    <foo key='bar' class='blat.Foo' />",
88                          "</atlassian-plugin>")
89                  .build();
90  
91          ScanDescriptorForHostClassesStage stage = new ScanDescriptorForHostClassesStage();
92          SystemExports exports = new SystemExports("com.atlassian.plugin.osgi");
93          final TransformContext context = new TransformContext(Collections.<HostComponentRegistration> emptyList(), exports, new JarPluginArtifact(plugin),
94              null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
95          stage.execute(context);
96          assertFalse(context.getExtraImports().contains("blat"));
97      }
98  
99      public void testTransformWithHostComponentConstructorReferences() throws Exception
100     {
101         when(registration.getMainInterfaceClasses()).thenReturn(new Class<?>[] {SomeInterface.class});
102         List<HostComponentRegistration> registrations = new ArrayList<HostComponentRegistration>(1);
103         registrations.add(registration);
104 
105         final File plugin = new PluginJarBuilder("testUpgradeOfBundledPlugin")
106                 .addFormattedResource("atlassian-plugin.xml",
107                         "<atlassian-plugin name='Test' key='hostClass' pluginsVersion='2'>",
108                         "    <plugin-info>",
109                         "        <version>1.0</version>",
110                         "    </plugin-info>",
111                         "    <object key='hostClass' class='com.atlassian.plugin.osgi.HostClassUsingHostComponentConstructor'/>",
112                         "</atlassian-plugin>")
113                 .build();
114 
115         ScanDescriptorForHostClassesStage stage = new ScanDescriptorForHostClassesStage();
116         SystemExports exports = new SystemExports("com.atlassian.plugin.osgi");
117         final TransformContext context = new TransformContext(registrations, exports, new JarPluginArtifact(plugin),
118             null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
119         stage.execute(context);
120         assertEquals(1, context.getRequiredHostComponents().size());
121         assertEquals(registration, context.getRequiredHostComponents().iterator().next());
122     }
123 
124     public void testTransformWithHostComponentSetterReferences() throws Exception
125     {
126         when(registration.getMainInterfaceClasses()).thenReturn(new Class<?>[] {SomeInterface.class});
127         List<HostComponentRegistration> registrations = new ArrayList<HostComponentRegistration>(1);
128         registrations.add(registration);
129 
130         final File plugin = new PluginJarBuilder("testUpgradeOfBundledPlugin")
131                 .addFormattedResource("atlassian-plugin.xml",
132                         "<atlassian-plugin name='Test' key='hostClass' pluginsVersion='2'>",
133                         "    <plugin-info>",
134                         "        <version>1.0</version>",
135                         "    </plugin-info>",
136                         "    <object key='hostClass' class='com.atlassian.plugin.osgi.HostClassUsingHostComponentSetter'/>",
137                         "</atlassian-plugin>")
138                 .build();
139 
140         ScanDescriptorForHostClassesStage stage = new ScanDescriptorForHostClassesStage();
141         SystemExports exports = new SystemExports("com.atlassian.plugin.osgi");
142         final TransformContext context = new TransformContext(registrations, exports, new JarPluginArtifact(plugin),
143             null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
144         stage.execute(context);
145         assertEquals(1, context.getRequiredHostComponents().size());
146         assertEquals(registration, context.getRequiredHostComponents().iterator().next());
147     }
148 }