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 }