PageRenderTime 23ms CodeModel.GetById 0ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://bitbucket.org/atlassian/atlassian-plugins
Java | 150 lines | 130 code | 19 blank | 1 comment | 0 complexity | 471cd0d14db2e66eacc7ed53bd7beee5 MD5 | raw file
  1. package it.com.atlassian.plugin.osgi;
  2. import com.atlassian.plugin.JarPluginArtifact;
  3. import com.atlassian.plugin.osgi.DummyHostComponent;
  4. import com.atlassian.plugin.osgi.PluginInContainerTestBase;
  5. import com.atlassian.plugin.osgi.hostcomponents.ContextClassLoaderStrategy;
  6. import com.atlassian.plugin.osgi.hostcomponents.HostComponentProvider;
  7. import com.atlassian.plugin.test.PluginJarBuilder;
  8. import org.junit.Test;
  9. import java.io.File;
  10. import static org.junit.Assert.assertNotNull;
  11. import static org.junit.Assert.assertNull;
  12. import static org.junit.Assert.assertSame;
  13. public class TestContextClassLoader extends PluginInContainerTestBase {
  14. @Test
  15. public void testCorrectContextClassLoaderForHostComponents() throws Exception {
  16. final DummyHostComponentImpl comp = new DummyHostComponentImpl(TestContextClassLoader.class.getName());
  17. File plugin = new PluginJarBuilder("ccltest")
  18. .addResource("atlassian-plugin.xml",
  19. "<atlassian-plugin key=\"ccltest\" pluginsVersion=\"2\">\n" +
  20. " <plugin-info>\n" +
  21. " <version>1.0</version>\n" +
  22. " </plugin-info>\n" +
  23. " <component key=\"foo\" class=\"my.FooImpl\" />\n" +
  24. "</atlassian-plugin>")
  25. .addJava("my.Foo", "package my;public interface Foo {}")
  26. .addJava("my.FooImpl", "package my;import com.atlassian.plugin.osgi.DummyHostComponent;" +
  27. "public class FooImpl implements Foo {public FooImpl(DummyHostComponent comp) throws Exception { comp.evaluate(); }}")
  28. .build();
  29. HostComponentProvider prov = registrar ->
  30. registrar.register(DummyHostComponent.class)
  31. .forInstance(comp)
  32. .withName("hostComp");
  33. initPluginManager(prov);
  34. pluginController.installPlugins(new JarPluginArtifact(plugin));
  35. assertNotNull(comp.cl);
  36. assertNotNull(comp.testClass);
  37. assertSame(comp.testClass, TestContextClassLoader.class);
  38. }
  39. @Test
  40. public void testCorrectContextClassLoaderForHostComponentsUsePluginStrategy() throws Exception {
  41. final DummyHostComponentImpl comp = new DummyHostComponentImpl(TestContextClassLoader.class.getName());
  42. File plugin = new PluginJarBuilder("ccltest")
  43. .addResource("atlassian-plugin.xml",
  44. "<atlassian-plugin key=\"ccltest\" pluginsVersion=\"2\">\n" +
  45. " <plugin-info>\n" +
  46. " <version>1.0</version>\n" +
  47. " </plugin-info>\n" +
  48. " <component key=\"foo\" class=\"my.FooImpl\" />\n" +
  49. "</atlassian-plugin>")
  50. .addJava("my.Foo", "package my;public interface Foo {}")
  51. .addJava("my.FooImpl", "package my;import com.atlassian.plugin.osgi.DummyHostComponent;" +
  52. "public class FooImpl implements Foo {public FooImpl(DummyHostComponent comp) throws Exception { comp.evaluate(); }}")
  53. .build();
  54. HostComponentProvider prov = registrar ->
  55. registrar.register(DummyHostComponent.class)
  56. .forInstance(comp)
  57. .withName("hostComp")
  58. .withContextClassLoaderStrategy(ContextClassLoaderStrategy.USE_PLUGIN);
  59. initPluginManager(prov);
  60. pluginController.installPlugins(new JarPluginArtifact(plugin));
  61. assertNotNull(comp.cl);
  62. assertNull(comp.testClass);
  63. }
  64. @Test
  65. public void testCorrectContextClassLoaderForHostComponentsUsePluginStrategyLoadingLocalClass() throws Exception {
  66. final DummyHostComponentImpl comp = new DummyHostComponentImpl("my.Foo");
  67. File plugin = new PluginJarBuilder("ccltest")
  68. .addResource("atlassian-plugin.xml",
  69. "<atlassian-plugin key=\"ccltest\" pluginsVersion=\"2\">\n" +
  70. " <plugin-info>\n" +
  71. " <version>1.0</version>\n" +
  72. " </plugin-info>\n" +
  73. " <component key=\"foo\" class=\"my.FooImpl\" />\n" +
  74. "</atlassian-plugin>")
  75. .addJava("my.Foo", "package my;public interface Foo {}")
  76. .addJava("my.FooImpl", "package my;import com.atlassian.plugin.osgi.DummyHostComponent;" +
  77. "public class FooImpl implements Foo {public FooImpl(DummyHostComponent comp) throws Exception { comp.evaluate(); }}")
  78. .build();
  79. HostComponentProvider prov = registrar ->
  80. registrar.register(DummyHostComponent.class)
  81. .forInstance(comp)
  82. .withName("hostComp")
  83. .withContextClassLoaderStrategy(ContextClassLoaderStrategy.USE_PLUGIN);
  84. initPluginManager(prov);
  85. pluginController.installPlugins(new JarPluginArtifact(plugin));
  86. assertNotNull(comp.cl);
  87. assertNotNull(comp.testClass);
  88. }
  89. @Test
  90. public void testCorrectContextClassLoaderForHostComponentsUseHostStrategy() throws Exception {
  91. final DummyHostComponentImpl comp = new DummyHostComponentImpl(TestContextClassLoader.class.getName());
  92. File plugin = new PluginJarBuilder("ccltest")
  93. .addResource("atlassian-plugin.xml",
  94. "<atlassian-plugin key=\"ccltest\" pluginsVersion=\"2\">\n" +
  95. " <plugin-info>\n" +
  96. " <version>1.0</version>\n" +
  97. " </plugin-info>\n" +
  98. " <component key=\"foo\" class=\"my.FooImpl\" />\n" +
  99. "</atlassian-plugin>")
  100. .addJava("my.Foo", "package my;public interface Foo {}")
  101. .addJava("my.FooImpl", "package my;import com.atlassian.plugin.osgi.DummyHostComponent;" +
  102. "public class FooImpl implements Foo {public FooImpl(DummyHostComponent comp) throws Exception { comp.evaluate(); }}")
  103. .build();
  104. HostComponentProvider prov = registrar ->
  105. registrar.register(DummyHostComponent.class)
  106. .forInstance(comp)
  107. .withName("hostComp")
  108. .withContextClassLoaderStrategy(ContextClassLoaderStrategy.USE_HOST);
  109. initPluginManager(prov);
  110. pluginController.installPlugins(new JarPluginArtifact(plugin));
  111. assertNotNull(comp.cl);
  112. assertNotNull(comp.testClass);
  113. assertSame(comp.testClass, TestContextClassLoader.class);
  114. }
  115. public static class DummyHostComponentImpl implements DummyHostComponent {
  116. private ClassLoader cl;
  117. private Class testClass;
  118. private String classToLoad;
  119. public DummyHostComponentImpl(String classToLoad) {
  120. this.classToLoad = classToLoad;
  121. }
  122. public void evaluate() {
  123. cl = Thread.currentThread().getContextClassLoader();
  124. try {
  125. testClass = cl.loadClass(classToLoad);
  126. } catch (ClassNotFoundException ex) {
  127. // ignored
  128. }
  129. }
  130. }
  131. }