View Javadoc

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