View Javadoc
1   package com.atlassian.plugin.osgi.factory;
2   
3   import com.atlassian.plugin.DefaultModuleDescriptorFactory;
4   import com.atlassian.plugin.ModuleDescriptorFactory;
5   import com.atlassian.plugin.Plugin;
6   import com.atlassian.plugin.PluginArtifact;
7   import com.atlassian.plugin.PluginException;
8   import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
9   import com.atlassian.plugin.impl.UnloadablePlugin;
10  import org.dom4j.Element;
11  import org.junit.Rule;
12  import org.junit.Test;
13  import org.junit.rules.ExpectedException;
14  
15  import java.io.ByteArrayInputStream;
16  
17  import static org.hamcrest.MatcherAssert.assertThat;
18  import static org.hamcrest.Matchers.nullValue;
19  import static org.junit.Assert.assertEquals;
20  import static org.junit.Assert.assertNotNull;
21  import static org.junit.Assert.assertNull;
22  import static org.junit.Assert.assertTrue;
23  import static org.mockito.Mockito.mock;
24  import static org.mockito.Mockito.when;
25  
26  public class TestUnloadableStaticPluginFactory {
27      @Rule
28      public final ExpectedException expectedException = ExpectedException.none();
29  
30      @Test
31      public void canCreate() {
32          UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
33          PluginArtifact artifact = mock(PluginArtifact.class);
34          when(artifact.getResourceAsStream("foo.xml")).thenReturn(new ByteArrayInputStream(
35                  "<atlassian-plugin key=\"foo\" />".getBytes()
36          ));
37          assertEquals("foo", factory.canCreate(artifact));
38      }
39  
40      @Test
41      public void canCreateWithOsgi() {
42          UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
43          PluginArtifact artifact = mock(PluginArtifact.class);
44          when(artifact.getResourceAsStream("foo.xml")).thenReturn(new ByteArrayInputStream(
45                  "<atlassian-plugin key=\"foo\" plugins-version=\"2\"/>".getBytes()
46          ));
47          assertEquals(null, factory.canCreate(artifact));
48      }
49  
50      @Test
51      public void canCreateWithNoDescriptor() {
52          UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
53          PluginArtifact artifact = mock(PluginArtifact.class);
54          when(artifact.getResourceAsStream("foo.xml")).thenReturn(null);
55          assertEquals(null, factory.canCreate(artifact));
56      }
57  
58      @Test
59      public void create() {
60          UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
61          PluginArtifact artifact = mock(PluginArtifact.class);
62          when(artifact.getResourceAsStream("foo.xml")).thenReturn(new ByteArrayInputStream(
63                  "<atlassian-plugin key=\"foo\" />".getBytes()
64          ));
65          when(artifact.toString()).thenReturn("plugin.jar");
66          UnloadablePlugin plugin = (UnloadablePlugin) factory.create(artifact, new DefaultModuleDescriptorFactory(new DefaultHostContainer()));
67          assertNotNull(plugin);
68          assertEquals("foo", plugin.getKey());
69          assertTrue(plugin.getErrorText().contains("plugin.jar"));
70  
71      }
72  
73      @Test
74      public void createWithNoKey() {
75          UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
76          PluginArtifact artifact = mock(PluginArtifact.class);
77          when(artifact.getResourceAsStream("foo.xml")).thenReturn(new ByteArrayInputStream(
78                  "<atlassian-plugin />".getBytes()
79          ));
80          when(artifact.toString()).thenReturn("plugin.jar");
81          UnloadablePlugin plugin = (UnloadablePlugin) factory.create(artifact, new DefaultModuleDescriptorFactory(new DefaultHostContainer()));
82          assertNotNull(plugin);
83          assertNull(plugin.getKey());
84          assertTrue(plugin.getErrorText().contains("plugin.jar"));
85  
86      }
87  
88      @Test
89      public void createModuleInvalidPluginType() {
90          final UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
91  
92          final Plugin plugin = mock(Plugin.class);
93          final Element module = mock(Element.class);
94          final ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
95  
96          assertThat(factory.createModule(plugin, module, moduleDescriptorFactory), nullValue());
97      }
98  
99      @Test
100     public void createModuleNotForUnloadable() {
101         final UnloadableStaticPluginFactory factory = new UnloadableStaticPluginFactory("foo.xml");
102 
103         final UnloadablePlugin plugin = mock(UnloadablePlugin.class);
104         final Element module = mock(Element.class);
105         final ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
106 
107         expectedException.expect(PluginException.class);
108 
109         factory.createModule(plugin, module, moduleDescriptorFactory);
110     }
111 }