View Javadoc

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 }