PageRenderTime 47ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-plugins-osgi/src/test/java/it/com/atlassian/plugin/osgi/TestPluginModuleCreation.java

https://bitbucket.org/atlassian/atlassian-plugins
Java | 289 lines | 248 code | 38 blank | 3 comment | 0 complexity | 4bea468464bbff3e7b57fb868dd4be92 MD5 | raw file
  1. package it.com.atlassian.plugin.osgi;
  2. import com.atlassian.plugin.DefaultModuleDescriptorFactory;
  3. import com.atlassian.plugin.JarPluginArtifact;
  4. import com.atlassian.plugin.Plugin;
  5. import com.atlassian.plugin.hostcontainer.HostContainer;
  6. import com.atlassian.plugin.impl.UnloadablePlugin;
  7. import com.atlassian.plugin.loaders.ClassPathPluginLoader;
  8. import com.atlassian.plugin.module.ClassPrefixModuleFactory;
  9. import com.atlassian.plugin.module.PrefixDelegatingModuleFactory;
  10. import com.atlassian.plugin.module.PrefixModuleFactory;
  11. import com.atlassian.plugin.osgi.PluginInContainerTestBase;
  12. import com.atlassian.plugin.osgi.SomeInterface;
  13. import com.atlassian.plugin.osgi.StubServletModuleDescriptor;
  14. import com.atlassian.plugin.osgi.module.BeanPrefixModuleFactory;
  15. import com.atlassian.plugin.osgi.test.TestServlet;
  16. import com.atlassian.plugin.servlet.ServletModuleManager;
  17. import com.atlassian.plugin.servlet.descriptors.ServletModuleDescriptor;
  18. import com.atlassian.plugin.test.PluginJarBuilder;
  19. import org.junit.Test;
  20. import java.io.File;
  21. import java.util.HashSet;
  22. import static org.junit.Assert.assertEquals;
  23. import static org.junit.Assert.assertTrue;
  24. import static org.mockito.ArgumentMatchers.any;
  25. import static org.mockito.Mockito.doAnswer;
  26. import static org.mockito.Mockito.mock;
  27. import static org.mockito.Mockito.when;
  28. /**
  29. * Tests around the creation of the module class of {@link com.atlassian.plugin.ModuleDescriptor}
  30. */
  31. public class TestPluginModuleCreation extends PluginInContainerTestBase {
  32. @Test
  33. public void testInstallPlugin2AndGetModuleClass() throws Exception {
  34. final PluginJarBuilder firstBuilder = new PluginJarBuilder("first");
  35. final File jar = firstBuilder
  36. .addFormattedResource("atlassian-plugin.xml",
  37. "<atlassian-plugin name='Test' key='first' pluginsVersion='2'>",
  38. " <plugin-info>",
  39. " <version>1.0</version>",
  40. " </plugin-info>",
  41. " <servlet key='foo' class='first.MyServlet'>",
  42. " <url-pattern>/foo</url-pattern>",
  43. " </servlet>",
  44. " <component key='obj' class='com.atlassian.plugin.osgi.test.TestServlet'/>",
  45. "</atlassian-plugin>")
  46. .addFormattedJava("first.MyServlet",
  47. "package first;",
  48. "import javax.servlet.http.HttpServlet;",
  49. "public class MyServlet extends javax.servlet.http.HttpServlet {",
  50. " public String getServletInfo() {",
  51. " return 'bob';",
  52. " }",
  53. "}")
  54. .build();
  55. final ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
  56. HostContainer hostContainer = mock(HostContainer.class);
  57. when(hostContainer.create(StubServletModuleDescriptor.class)).thenReturn(new StubServletModuleDescriptor(moduleFactory, servletModuleManager));
  58. final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(hostContainer);
  59. moduleDescriptorFactory.addModuleDescriptor("servlet", StubServletModuleDescriptor.class);
  60. initPluginManager(registrar -> {}, moduleDescriptorFactory);
  61. pluginController.installPlugins(new JarPluginArtifact(jar));
  62. assertEquals(1, pluginAccessor.getEnabledPlugins().size());
  63. assertEquals("first.MyServlet", pluginAccessor.getPlugin("first").getModuleDescriptor("foo").getModule().getClass().getName());
  64. assertEquals(1, pluginAccessor.getPlugin("first").getModuleDescriptorsByModuleClass(TestServlet.class).size());
  65. }
  66. @Test
  67. public void testInstallPlugins1AndGetModuleClass() throws Exception {
  68. ClassPathPluginLoader classPathPluginLoader = new ClassPathPluginLoader("testInstallPlugins1AndGetModuleClass.xml");
  69. final ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
  70. final HostContainer hostContainer = mock(HostContainer.class);
  71. moduleFactory = new PrefixDelegatingModuleFactory(new HashSet<PrefixModuleFactory>() {{
  72. add(new ClassPrefixModuleFactory(hostContainer));
  73. add(new BeanPrefixModuleFactory());
  74. }});
  75. when(hostContainer.create(StubServletModuleDescriptor.class)).thenReturn(new StubServletModuleDescriptor(moduleFactory, servletModuleManager));
  76. when(hostContainer.create(TestServlet.class)).thenReturn(new TestServlet());
  77. final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(hostContainer);
  78. moduleDescriptorFactory.addModuleDescriptor("servlet", StubServletModuleDescriptor.class);
  79. initPluginManager(moduleDescriptorFactory, classPathPluginLoader);
  80. assertEquals(1, pluginAccessor.getEnabledPlugins().size());
  81. assertEquals("com.atlassian.plugin.osgi.test.TestServlet", pluginAccessor.getPlugin("first").getModuleDescriptor("foo").getModule().getClass().getName());
  82. }
  83. @Test
  84. public void testInstallPlugins1AndFailToGetModuleClassFromSpring() throws Exception {
  85. ClassPathPluginLoader classPathPluginLoader = new ClassPathPluginLoader("testInstallPlugins1AndFailToGetModuleClassFromSpring.xml");
  86. final ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
  87. final HostContainer hostContainer = mock(HostContainer.class);
  88. moduleFactory = new PrefixDelegatingModuleFactory(new HashSet<PrefixModuleFactory>() {{
  89. add(new ClassPrefixModuleFactory(hostContainer));
  90. add(new BeanPrefixModuleFactory());
  91. }});
  92. when(hostContainer.create(StubServletModuleDescriptor.class)).thenReturn(new StubServletModuleDescriptor(moduleFactory, servletModuleManager));
  93. when(hostContainer.create(TestServlet.class)).thenReturn(new TestServlet());
  94. doAnswer(invocation -> {
  95. invocation.<ServletModuleDescriptor>getArgument(0).getModule();
  96. return null;
  97. }).when(servletModuleManager).addServletModule(any());
  98. final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(hostContainer);
  99. moduleDescriptorFactory.addModuleDescriptor("servlet", StubServletModuleDescriptor.class);
  100. initPluginManager(moduleDescriptorFactory, classPathPluginLoader);
  101. assertEquals(1, pluginAccessor.getPlugins().size());
  102. final Plugin plugin = pluginAccessor.getPlugins().iterator().next();
  103. assertTrue(plugin instanceof UnloadablePlugin);
  104. assertEquals(0, pluginAccessor.getEnabledPlugins().size());
  105. }
  106. @Test
  107. public void testInstallPlugins2AndGetModuleClassFromSpring() throws Exception {
  108. final PluginJarBuilder firstBuilder = new PluginJarBuilder("first");
  109. final File jar = firstBuilder
  110. .addFormattedResource("atlassian-plugin.xml",
  111. "<atlassian-plugin name='Test' key='first' pluginsVersion='2'>",
  112. " <plugin-info>",
  113. " <version>1.0</version>",
  114. " </plugin-info>",
  115. " <servlet key='foo' class='bean:obj'>",
  116. " <url-pattern>/foo</url-pattern>",
  117. " </servlet>",
  118. "<component key='obj' class='first.MyServlet'/>",
  119. "</atlassian-plugin>")
  120. .addFormattedJava("first.MyServlet",
  121. "package first;",
  122. "import javax.servlet.http.HttpServlet;",
  123. "public class MyServlet extends javax.servlet.http.HttpServlet {",
  124. " public String getServletInfo() {",
  125. " return 'bob';",
  126. " }",
  127. "}")
  128. .build();
  129. final ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
  130. HostContainer hostContainer = mock(HostContainer.class);
  131. when(hostContainer.create(StubServletModuleDescriptor.class)).thenReturn(new StubServletModuleDescriptor(moduleFactory, servletModuleManager));
  132. final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(hostContainer);
  133. moduleDescriptorFactory.addModuleDescriptor("servlet", StubServletModuleDescriptor.class);
  134. initPluginManager(registrar -> {}, moduleDescriptorFactory);
  135. pluginController.installPlugins(new JarPluginArtifact(jar));
  136. assertEquals(1, pluginAccessor.getEnabledPlugins().size());
  137. assertEquals("first.MyServlet", pluginAccessor.getPlugin("first").getModuleDescriptor("foo").getModule().getClass().getName());
  138. }
  139. @Test
  140. public void testGetModuleClassFromComponentModuleDescriptor() throws Exception {
  141. final PluginJarBuilder firstBuilder = new PluginJarBuilder("first");
  142. final File jar = firstBuilder
  143. .addFormattedResource("atlassian-plugin.xml",
  144. "<atlassian-plugin name='Test' key='first' pluginsVersion='2'>",
  145. " <plugin-info>",
  146. " <version>1.0</version>",
  147. " </plugin-info>",
  148. "<component key='obj' class='first.MyServlet'/>",
  149. "</atlassian-plugin>")
  150. .addFormattedJava("first.MyServlet",
  151. "package first;",
  152. "import javax.servlet.http.HttpServlet;",
  153. "public class MyServlet extends javax.servlet.http.HttpServlet {",
  154. " public String getServletInfo() {",
  155. " return 'bob';",
  156. " }",
  157. "}")
  158. .build();
  159. initPluginManager();
  160. pluginController.installPlugins(new JarPluginArtifact(jar));
  161. assertEquals(1, pluginAccessor.getEnabledPlugins().size());
  162. assertEquals("first.MyServlet", pluginAccessor.getPlugin("first").getModuleDescriptor("obj").getModule().getClass().getName());
  163. }
  164. @Test
  165. public void testGetModuleClassFromComponentImportModuleDescriptor() throws Exception {
  166. final PluginJarBuilder firstBuilder = new PluginJarBuilder("first");
  167. final File jar1 = firstBuilder
  168. .addFormattedResource("atlassian-plugin.xml",
  169. "<atlassian-plugin name='Test1' key='first' pluginsVersion='2'>",
  170. " <plugin-info>",
  171. " <version>1.0</version>",
  172. " </plugin-info>",
  173. "<component key='obj' class='first.MyServlet' public='true'>",
  174. "<interface>com.atlassian.plugin.osgi.SomeInterface</interface>",
  175. "</component>",
  176. "</atlassian-plugin>")
  177. .addFormattedJava("com.atlassian.plugin.osgi.SomeInterface",
  178. "package com.atlassian.plugin.osgi;",
  179. "public interface SomeInterface {}")
  180. .addFormattedJava("first.MyServlet",
  181. "package first;",
  182. "import javax.servlet.http.HttpServlet;",
  183. "public class MyServlet extends javax.servlet.http.HttpServlet implements com.atlassian.plugin.osgi.SomeInterface {",
  184. " public String getServletInfo() {",
  185. " return 'bob';",
  186. " }",
  187. "}")
  188. .build();
  189. final File jar2 = new PluginJarBuilder("second")
  190. .addFormattedResource("atlassian-plugin.xml",
  191. "<atlassian-plugin name='Test2' key='second' pluginsVersion='2'>",
  192. " <plugin-info>",
  193. " <version>1.0</version>",
  194. " </plugin-info>",
  195. " <component-import key='obj' interface='com.atlassian.plugin.osgi.SomeInterface' />",
  196. "</atlassian-plugin>"
  197. )
  198. .addFormattedJava("com.atlassian.plugin.osgi.SomeInterface",
  199. "package com.atlassian.plugin.osgi;",
  200. "public interface SomeInterface {}")
  201. .build();
  202. initPluginManager();
  203. pluginController.installPlugins(new JarPluginArtifact(jar1));
  204. pluginController.installPlugins(new JarPluginArtifact(jar2));
  205. assertEquals(2, pluginAccessor.getEnabledPlugins().size());
  206. assertEquals("first.MyServlet", pluginAccessor.getPlugin("first").getModuleDescriptor("obj").getModule().getClass().getName());
  207. assertTrue(pluginAccessor.getPlugin("second").getModuleDescriptor("obj").getModule() instanceof SomeInterface);
  208. }
  209. @Test
  210. public void testFailToGetModuleClassFromSpring() throws Exception {
  211. final PluginJarBuilder firstBuilder = new PluginJarBuilder("first");
  212. final File jar = firstBuilder
  213. .addFormattedResource("atlassian-plugin.xml",
  214. "<atlassian-plugin name='Test' key='first' pluginsVersion='2'>",
  215. " <plugin-info>",
  216. " <version>1.0</version>",
  217. " </plugin-info>",
  218. " <servlet key='foo' class='bean:beanId' name='spring bean for servlet'>",
  219. " <url-pattern>/foo</url-pattern>",
  220. " </servlet>",
  221. "<component key='obj' class='first.MyServlet' />",
  222. "</atlassian-plugin>")
  223. .addFormattedJava("first.MyServlet",
  224. "package first;",
  225. "import javax.servlet.http.HttpServlet;",
  226. "public class MyServlet extends javax.servlet.http.HttpServlet {",
  227. " public String getServletInfo() {",
  228. " return 'bob';",
  229. " }",
  230. "}")
  231. .build();
  232. final ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
  233. doAnswer(invocation -> {
  234. invocation.<ServletModuleDescriptor>getArgument(0).getModule();
  235. return null;
  236. }).when(servletModuleManager).addServletModule(any());
  237. final HostContainer hostContainer = mock(HostContainer.class);
  238. moduleFactory = new PrefixDelegatingModuleFactory(new HashSet<PrefixModuleFactory>() {{
  239. add(new ClassPrefixModuleFactory(hostContainer));
  240. add(new BeanPrefixModuleFactory());
  241. }});
  242. when(hostContainer.create(StubServletModuleDescriptor.class)).thenReturn(new StubServletModuleDescriptor(moduleFactory, servletModuleManager));
  243. final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(hostContainer);
  244. moduleDescriptorFactory.addModuleDescriptor("servlet", StubServletModuleDescriptor.class);
  245. initPluginManager(registrar -> {}, moduleDescriptorFactory);
  246. pluginController.installPlugins(new JarPluginArtifact(jar));
  247. assertEquals(0, pluginAccessor.getEnabledPlugins().size());
  248. final Plugin plugin = pluginAccessor.getPlugins().iterator().next();
  249. assertTrue(plugin instanceof UnloadablePlugin);
  250. }
  251. }