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