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