View Javadoc

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  }