1 package com.atlassian.plugin.factories;
2
3 import com.atlassian.plugin.Application;
4 import com.atlassian.plugin.ModuleDescriptor;
5 import com.atlassian.plugin.ModuleDescriptorFactory;
6 import com.atlassian.plugin.Plugin;
7 import com.atlassian.plugin.PluginAccessor;
8 import com.atlassian.plugin.PluginArtifact;
9 import com.atlassian.plugin.PluginParseException;
10 import com.atlassian.plugin.impl.DefaultDynamicPlugin;
11 import com.atlassian.plugin.parsers.DescriptorParser;
12 import com.atlassian.plugin.parsers.XmlDescriptorParserFactory;
13 import com.google.common.collect.ImmutableSet;
14 import org.dom4j.Element;
15 import org.junit.Before;
16 import org.junit.Rule;
17 import org.junit.Test;
18 import org.junit.rules.ExpectedException;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.runners.MockitoJUnitRunner;
22
23 import java.io.File;
24 import java.io.IOException;
25 import java.io.InputStream;
26
27 import static org.hamcrest.MatcherAssert.assertThat;
28 import static org.hamcrest.Matchers.is;
29 import static org.hamcrest.Matchers.nullValue;
30 import static org.mockito.Matchers.anyString;
31 import static org.mockito.Mockito.mock;
32 import static org.mockito.Mockito.verify;
33 import static org.mockito.Mockito.when;
34
35 @RunWith(MockitoJUnitRunner.class)
36 public class TestLegacyDynamicPluginFactory {
37 @Rule
38 public ExpectedException expectedException = ExpectedException.none();
39
40 private LegacyDynamicPluginFactory legacyDynamicPluginFactory;
41
42 @Mock
43 private ModuleDescriptorFactory moduleDescriptorFactory;
44 @Mock
45 private XmlDescriptorParserFactory xmlDescriptorParserFactory;
46 @Mock
47 private Element module;
48 @Mock
49 private PluginArtifact pluginArtifact;
50 @Mock
51 private InputStream pluginDescriptor;
52 @Mock
53 private DescriptorParser descriptorParser;
54 @Mock
55 private ModuleDescriptor moduleDescriptor;
56
57 @Before
58 public void before() throws Exception {
59 legacyDynamicPluginFactory = new LegacyDynamicPluginFactory(PluginAccessor.Descriptor.FILENAME, new File(System.getProperty("java.io.tmpdir")), xmlDescriptorParserFactory);
60 }
61
62 @Test
63 public void createCorruptJar() {
64 final PluginArtifact pluginArtifact = mock(PluginArtifact.class);
65 when(pluginArtifact.getResourceAsStream(anyString())).thenReturn(null);
66 when(pluginArtifact.toFile()).thenReturn(new File("sadfasdf"));
67
68 expectedException.expect(PluginParseException.class);
69
70 legacyDynamicPluginFactory.create(pluginArtifact, moduleDescriptorFactory);
71 }
72
73 @Test
74 public void createModule() throws IOException {
75 final DefaultDynamicPlugin plugin = mock(DefaultDynamicPlugin.class);
76
77 when(plugin.getPluginArtifact()).thenReturn(pluginArtifact);
78 when(pluginArtifact.getResourceAsStream(PluginAccessor.Descriptor.FILENAME)).thenReturn(pluginDescriptor);
79 when(xmlDescriptorParserFactory.getInstance(pluginDescriptor, ImmutableSet.<Application>of())).thenReturn(descriptorParser);
80 when(descriptorParser.addModule(moduleDescriptorFactory, plugin, module)).thenReturn(moduleDescriptor);
81
82 assertThat(legacyDynamicPluginFactory.createModule(plugin, module, moduleDescriptorFactory), is(moduleDescriptor));
83
84 verify(pluginDescriptor).close();
85 }
86
87 @Test
88 public void creatModuleIncorrectPluginType() {
89 final Plugin plugin = mock(Plugin.class);
90
91 assertThat(legacyDynamicPluginFactory.createModule(plugin, module, moduleDescriptorFactory), nullValue());
92 }
93 }