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
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 }