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.container.OsgiContainerManager;
6   import com.atlassian.plugin.osgi.factory.transform.TransformContext;
7   import com.atlassian.plugin.osgi.factory.transform.model.SystemExports;
8   import com.atlassian.plugin.test.PluginJarBuilder;
9   import org.junit.Test;
10  import org.osgi.framework.ServiceReference;
11  
12  import java.io.File;
13  import java.util.Collections;
14  
15  import static org.junit.Assert.assertEquals;
16  import static org.junit.Assert.assertFalse;
17  import static org.junit.Assert.assertTrue;
18  import static org.mockito.Mockito.mock;
19  import static org.mockito.Mockito.when;
20  
21  public class TestScanInnerJarsStage {
22  
23      @Test
24      public void testTransform() throws Exception {
25          // create a jar with embedded jars.
26          final File plugin = new PluginJarBuilder("plugin")
27                  .addFormattedResource("atlassian-plugin.xml",
28                          "<atlassian-plugin name='Test Bundle instruction plugin 2' key='test.plugin'>",
29                          "    <plugin-info>",
30                          "        <version>1.0</version>",
31                          "        <bundle-instructions>",
32                          "            <Export-Package>!*.internal.*,*</Export-Package>",
33                          "        </bundle-instructions>",
34                          "    </plugin-info>",
35                          "</atlassian-plugin>")
36                  .addFormattedJava("my.MyFooChild",
37                          "package my;",
38                          "public class MyFooChild extends com.atlassian.plugin.osgi.factory.transform.dummypackage2.DummyClass2 {",
39                          "}")
40                  .addResource(ScanInnerJarsStage.INNER_JARS_BASE_LOCATION + "myjar1.jar", "content1")
41                  .addResource(ScanInnerJarsStage.INNER_JARS_BASE_LOCATION + "myjar2.jar", "content2")
42                  .addResource("myjar3.jar", "content3")
43                  .build();
44  
45          // execute the stage.
46          final ScanInnerJarsStage stage = new ScanInnerJarsStage();
47          OsgiContainerManager osgiContainerManager = mock(OsgiContainerManager.class);
48          when(osgiContainerManager.getRegisteredServices()).thenReturn(new ServiceReference[0]);
49          final TransformContext context = new TransformContext(Collections.emptyList(), SystemExports.NONE, new JarPluginArtifact(plugin),
50                  null, PluginAccessor.Descriptor.FILENAME, osgiContainerManager);
51          stage.execute(context);
52  
53          // the inner jar in wrong location should not be found.
54          assertFalse(context.getBundleClassPathJars().contains("myjar3.jar"));
55  
56          // the inner jars in the right location should be found.
57          assertEquals(context.getBundleClassPathJars().size(), 2);
58          assertTrue(context.getBundleClassPathJars().contains(ScanInnerJarsStage.INNER_JARS_BASE_LOCATION + "myjar1.jar"));
59          assertTrue(context.getBundleClassPathJars().contains(ScanInnerJarsStage.INNER_JARS_BASE_LOCATION + "myjar2.jar"));
60      }
61  }