1 package com.atlassian.plugin.loaders;
2
3 import com.atlassian.plugin.event.impl.DefaultPluginEventManager;
4 import com.atlassian.plugin.loaders.classloading.DeploymentUnit;
5 import com.atlassian.plugin.test.PluginJarBuilder;
6 import com.atlassian.plugin.factories.PluginFactory;
7 import com.atlassian.plugin.test.PluginTestUtils;
8 import junit.framework.TestCase;
9 import org.apache.commons.io.FileUtils;
10
11 import java.io.File;
12 import java.io.IOException;
13 import java.net.URISyntaxException;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.Collection;
17 import java.util.Collections;
18 import java.util.List;
19
20 public class TestBundledPluginLoader extends TestCase
21 {
22 private File pluginDir;
23
24 public void setUp() throws IOException, URISyntaxException
25 {
26 pluginDir = PluginTestUtils.createTempDirectory(TestBundledPluginLoader.class);
27 }
28
29 public void tearDown() throws Exception
30 {
31 FileUtils.deleteDirectory(pluginDir);
32 pluginDir = null;
33 }
34
35 public void testCreateWithUnzip() throws IOException {
36 File bundledZip = new PluginJarBuilder("bundledPlugins")
37 .addResource("foo.txt", "foo")
38 .build();
39
40 final BundledPluginLoader loader = new BundledPluginLoader(bundledZip.toURL(), pluginDir, Collections.<PluginFactory>emptyList(), new DefaultPluginEventManager());
41 assertLoaderContains(loader, "foo.txt");
42 }
43
44 public void testCreateWithDirectoryOfFiles() throws IOException {
45 final File dir = PluginTestUtils.createTempDirectory(TestBundledPluginLoader.class);
46 FileUtils.writeStringToFile(new File(dir, "foo.txt"), "hello");
47
48 final BundledPluginLoader loader = new BundledPluginLoader(dir.toURL(), pluginDir, Collections.<PluginFactory>emptyList(), new DefaultPluginEventManager());
49 assertLoaderContains(loader, "foo.txt");
50 }
51
52 public void testCreateWithListFile() throws IOException {
53 final File dir = PluginTestUtils.createTempDirectory(TestBundledPluginLoader.class);
54 FileUtils.writeStringToFile(new File(dir, "foo.txt"), "hello");
55 FileUtils.writeStringToFile(new File(dir, "bar.txt"), "world");
56 File listFile = new File(dir, "bundled-plugins.list");
57 FileUtils.writeStringToFile(listFile, "foo.txt\nbar.txt");
58
59 final BundledPluginLoader loader = new BundledPluginLoader(listFile.toURL(), pluginDir, Collections.<PluginFactory>emptyList(), new DefaultPluginEventManager());
60 assertLoaderContains(loader, "foo.txt", "bar.txt");
61 }
62
63 private void assertLoaderContains(final BundledPluginLoader loader, String ... expectedEntries)
64 {
65 List<String> expected = new ArrayList<String>(Arrays.asList(expectedEntries));
66
67 final Collection<DeploymentUnit> scanned = loader.scanner.scan();
68
69 for (DeploymentUnit unit : scanned)
70 {
71 final File file = unit.getPath();
72 if (file.isDirectory())
73 {
74 assertEquals("META-INF", file.getName());
75 }
76 else
77 {
78 assertTrue("found file in scanner " + file + " but expected " + expected, expected.contains(file.getName()));
79 expected.remove(file.getName());
80 }
81 }
82 assertTrue("Contained: " + expected, expected.isEmpty());
83 }
84
85 }