View Javadoc

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