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