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