PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-plugins-main/src/test/java/it/com/atlassian/plugin/main/TestAtlassianPlugins.java

https://bitbucket.org/atlassian/atlassian-plugins
Java | 138 lines | 119 code | 17 blank | 2 comment | 3 complexity | e9b6e7818b903da714eeedb996926ecd MD5 | raw file
  1. package it.com.atlassian.plugin.main;
  2. import com.atlassian.plugin.main.AtlassianPlugins;
  3. import com.atlassian.plugin.main.PackageScannerConfigurationBuilder;
  4. import com.atlassian.plugin.main.PluginsConfiguration;
  5. import com.atlassian.plugin.test.PluginJarBuilder;
  6. import org.apache.commons.io.FileUtils;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import org.junit.Rule;
  10. import org.junit.Test;
  11. import org.junit.rules.TemporaryFolder;
  12. import java.io.BufferedOutputStream;
  13. import java.io.File;
  14. import java.io.FileOutputStream;
  15. import java.io.IOException;
  16. import java.util.Collections;
  17. import java.util.zip.ZipEntry;
  18. import java.util.zip.ZipOutputStream;
  19. import static com.atlassian.plugin.main.PluginsConfigurationBuilder.pluginsConfiguration;
  20. import static com.atlassian.plugin.osgi.container.felix.FelixOsgiContainerManager.ATLASSIAN_BOOTDELEGATION_EXTRA;
  21. import static org.junit.Assert.assertEquals;
  22. public class TestAtlassianPlugins {
  23. @Rule
  24. public final TemporaryFolder temporaryFolder = new TemporaryFolder();
  25. private File pluginDir;
  26. private File bundledPluginDir;
  27. private File frameworkBundlesDir;
  28. private File bundledPluginZip;
  29. private AtlassianPlugins plugins;
  30. @Before
  31. public void setUp() throws IOException {
  32. // includes the necessary components which have been injected through the com.atlassian.plugin.osgi.container.felix.PluginKeyWeaver
  33. System.setProperty(ATLASSIAN_BOOTDELEGATION_EXTRA, "com.atlassian.plugin.util,com.atlassian.plugin.osgi.advice");
  34. final File tmpDir = temporaryFolder.newFolder("target");
  35. final File targetDir = new File("target");
  36. frameworkBundlesDir = new File(targetDir, "framework-bundles");
  37. bundledPluginZip = new File(targetDir, "atlassian-bundled-plugins.zip");
  38. pluginDir = new File(tmpDir, "plugins");
  39. pluginDir.mkdirs();
  40. bundledPluginDir = new File(tmpDir, "bundled-plugins");
  41. bundledPluginDir.mkdirs();
  42. }
  43. @After
  44. public void tearDown() {
  45. if (plugins != null) {
  46. plugins.getPluginSystemLifecycle().shutdown();
  47. plugins.destroy();
  48. }
  49. }
  50. @Test
  51. public void testStart() throws Exception {
  52. //tests
  53. new PluginJarBuilder().addPluginInformation("mykey", "mykey", "1.0").build(pluginDir);
  54. final PluginsConfiguration config = pluginsConfiguration()
  55. .frameworkBundleDirectory(frameworkBundlesDir)
  56. .pluginDirectory(pluginDir)
  57. .packageScannerConfiguration(
  58. new PackageScannerConfigurationBuilder()
  59. .packagesToInclude("org.apache.*", "com.atlassian.*", "org.dom4j*")
  60. .packagesVersions(Collections.singletonMap("org.apache.commons.logging", "1.1.3"))
  61. .build())
  62. .build();
  63. plugins = new AtlassianPlugins(config);
  64. start(plugins);
  65. assertEquals(1, plugins.getPluginAccessor().getPlugins().size());
  66. }
  67. @Test
  68. public void testInstalledPluginCanDependOnBundledPlugin() throws Exception {
  69. PluginJarBuilder bundledJar = new PluginJarBuilder("bundled")
  70. .addFormattedResource("META-INF/MANIFEST.MF",
  71. "Export-Package: com.atlassian.test.bundled",
  72. "Bundle-SymbolicName: bundled",
  73. "Bundle-Version: 1.0.0",
  74. "Manifest-Version: 1.0",
  75. "")
  76. .addFormattedJava("com.atlassian.test.bundled.BundledInterface",
  77. "package com.atlassian.test.bundled;",
  78. "public interface BundledInterface {}");
  79. bundledJar.build(bundledPluginDir);
  80. new PluginJarBuilder("installed", bundledJar.getClassLoader())
  81. .addFormattedResource("atlassian-plugin.xml",
  82. "<atlassian-plugin name='Installed Plugin' key='installed' pluginsVersion='2'>",
  83. " <plugin-info>",
  84. " <version>1.0</version>",
  85. " </plugin-info>",
  86. " <component key='installed' class='com.atlassian.test.installed.InstalledClass'/>",
  87. "</atlassian-plugin>")
  88. .addFormattedJava("com.atlassian.test.installed.InstalledClass",
  89. "package com.atlassian.test.installed;",
  90. "import com.atlassian.test.bundled.BundledInterface;",
  91. "public class InstalledClass implements BundledInterface {}")
  92. .build(pluginDir);
  93. zipBundledPlugins();
  94. final PluginsConfiguration config = pluginsConfiguration()
  95. .pluginDirectory(pluginDir)
  96. .frameworkBundleDirectory(frameworkBundlesDir)
  97. .bundledPluginUrl(bundledPluginZip.toURI().toURL())
  98. .bundledPluginCacheDirectory(bundledPluginDir)
  99. .packageScannerConfiguration(
  100. new PackageScannerConfigurationBuilder()
  101. .packagesToInclude("com.atlassian.*", "org.slf4j", "org.apache.commons.logging")
  102. .packagesVersions(Collections.singletonMap("org.apache.commons.logging", "1.1.3"))
  103. .build())
  104. .build();
  105. plugins = new AtlassianPlugins(config);
  106. start(plugins);
  107. assertEquals(2, plugins.getPluginAccessor().getEnabledPlugins().size());
  108. }
  109. private void start(AtlassianPlugins plugins) {
  110. plugins.afterPropertiesSet();
  111. plugins.getPluginSystemLifecycle().init();
  112. }
  113. private void zipBundledPlugins() throws IOException {
  114. ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(bundledPluginZip)));
  115. for (File bundledPlugin : bundledPluginDir.listFiles()) {
  116. zip.putNextEntry(new ZipEntry(bundledPlugin.getName()));
  117. zip.write(FileUtils.readFileToByteArray(bundledPlugin));
  118. }
  119. zip.close();
  120. }
  121. }