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