1 package com.atlassian.plugin.loaders;
2
3 import com.atlassian.plugin.ModuleDescriptorFactory;
4 import com.atlassian.plugin.Permissions;
5 import com.atlassian.plugin.Plugin;
6 import com.atlassian.plugin.PluginArtifact;
7 import com.atlassian.plugin.PluginArtifactBackedPlugin;
8 import com.atlassian.plugin.impl.UnloadablePlugin;
9 import com.google.common.collect.ImmutableList;
10 import com.google.common.collect.ImmutableSet;
11 import com.google.common.collect.Iterables;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.mockito.Mock;
16 import org.mockito.runners.MockitoJUnitRunner;
17
18 import java.util.Set;
19
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assert.assertTrue;
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.when;
25
26 @RunWith(MockitoJUnitRunner.class)
27 public final class PermissionCheckingPluginLoaderTest
28 {
29 private PermissionCheckingPluginLoader permissionCheckingPluginLoader;
30
31 @Mock
32 private PluginLoader pluginLoader;
33
34 @Mock
35 private ModuleDescriptorFactory moduleDescriptorFactory;
36
37 @Before
38 public void setUp()
39 {
40 permissionCheckingPluginLoader = new PermissionCheckingPluginLoader(pluginLoader);
41 }
42
43 @Test
44 public void loadAllPluginsWithEmptyCollectionOfPlugins()
45 {
46 when(pluginLoader.loadAllPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of());
47 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadAllPlugins(moduleDescriptorFactory);
48 assertTrue(Iterables.isEmpty(plugins));
49 }
50
51 @Test
52 public void loadFoundPluginsWithEmptyCollectionOfPlugins()
53 {
54 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of());
55 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
56 assertTrue(Iterables.isEmpty(plugins));
57 }
58
59 @Test
60 public void loadFoundPluginsWithPluginWithoutExecuteJavaPermissionAndNoJava()
61 {
62 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), false, false);
63
64 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
65 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
66
67 assertEquals(1, Iterables.size(plugins));
68 assertSame(plugin, Iterables.get(plugins, 0));
69 }
70
71 @Test
72 public void loadAllPluginsWithPluginWithoutExecuteJavaPermissionAndNoJava()
73 {
74 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), false, false);
75
76 when(pluginLoader.loadAllPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
77 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadAllPlugins(moduleDescriptorFactory);
78
79 assertEquals(1, Iterables.size(plugins));
80 assertSame(plugin, Iterables.get(plugins, 0));
81 }
82
83 @Test
84 public void loadFoundPluginsWithPluginWithoutExecuteJavaPermissionAndSomeJava()
85 {
86 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), true, false);
87
88 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
89 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
90
91 assertEquals(1, Iterables.size(plugins));
92 assertTrue(Iterables.get(plugins, 0) instanceof UnloadablePlugin);
93 }
94
95 @Test
96 public void loadAllPluginsWithPluginWithoutExecuteJavaPermissionAndSomeJava()
97 {
98 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), true, false);
99
100 when(pluginLoader.loadAllPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
101 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadAllPlugins(moduleDescriptorFactory);
102
103 assertEquals(1, Iterables.size(plugins));
104 assertTrue(Iterables.get(plugins, 0) instanceof UnloadablePlugin);
105 }
106
107 @Test
108 public void loadFoundPluginsWithPluginWithJavaPermissionAndSomeJava() throws Exception
109 {
110 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(Permissions.EXECUTE_JAVA), true, false);
111
112 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
113 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
114
115 assertEquals(1, Iterables.size(plugins));
116 assertSame(plugin, Iterables.get(plugins, 0));
117 }
118
119 @Test
120 public void loadFoundPluginsWithPluginWithJavaPermissionAndNoJava() throws Exception
121 {
122 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(Permissions.EXECUTE_JAVA), false, false);
123
124 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
125 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
126
127 assertEquals(1, Iterables.size(plugins));
128 assertSame(plugin, Iterables.get(plugins, 0));
129 }
130
131 @Test
132 public void loadAllPluginsWithPluginWithJavaPermissionAndNoJava() throws Exception
133 {
134 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(Permissions.EXECUTE_JAVA), false, false);
135
136 when(pluginLoader.loadAllPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
137 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadAllPlugins(moduleDescriptorFactory);
138
139 assertEquals(1, Iterables.size(plugins));
140 assertSame(plugin, Iterables.get(plugins, 0));
141 }
142
143 @Test
144 public void loadFoundPluginsWithPluginWithAllPermissionsAndSomeJava() throws Exception
145 {
146 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), true, true);
147
148 when(pluginLoader.loadFoundPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
149 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadFoundPlugins(moduleDescriptorFactory);
150
151 assertEquals(1, Iterables.size(plugins));
152 assertSame(plugin, Iterables.get(plugins, 0));
153 }
154
155 @Test
156 public void loadAllPluginsWithPluginWithAllPermissionsAndSomeJava() throws Exception
157 {
158 final PluginArtifactBackedPlugin plugin = newPlugin(ImmutableSet.<String>of(), true, true);
159
160 when(pluginLoader.loadAllPlugins(moduleDescriptorFactory)).thenReturn(ImmutableList.<Plugin>of(plugin));
161 final Iterable<Plugin> plugins = permissionCheckingPluginLoader.loadAllPlugins(moduleDescriptorFactory);
162
163 assertEquals(1, Iterables.size(plugins));
164 assertSame(plugin, Iterables.get(plugins, 0));
165 }
166
167 private PluginArtifactBackedPlugin newPlugin(Set<String> permissions, boolean hasJava, boolean hasAllPermissions)
168 {
169 final PluginArtifactBackedPlugin plugin = mockPlugin(PluginArtifactBackedPlugin.class);
170 final PluginArtifact pluginArtifact = mock(PluginArtifact.class);
171 when(plugin.hasAllPermissions()).thenReturn(hasAllPermissions);
172 when(plugin.getActivePermissions()).thenReturn(permissions);
173 when(plugin.getPluginArtifact()).thenReturn(pluginArtifact);
174 when(pluginArtifact.containsJavaExecutableCode()).thenReturn(hasJava);
175 return plugin;
176 }
177
178 private <P extends Plugin> P mockPlugin(Class<P> type)
179 {
180 P mock = mock(type);
181 when(mock.getKey()).thenReturn("test-plugin-key");
182 when(mock.getName()).thenReturn("Test Plugin");
183 return mock;
184 }
185 }