View Javadoc

1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.MockPluginAccessor;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginAccessor;
6   import com.atlassian.plugin.PluginController;
7   import com.atlassian.plugin.PluginException;
8   import com.atlassian.plugin.PluginState;
9   import com.atlassian.plugin.exception.NoOpPluginExceptionInterception;
10  import com.atlassian.plugin.exception.PluginExceptionInterception;
11  import com.atlassian.plugin.util.PluginUtils;
12  import com.atlassian.plugin.impl.StaticPlugin;
13  import com.mockobjects.dynamic.Mock;
14  import junit.framework.TestCase;
15  
16  import java.util.Arrays;
17  import java.util.HashSet;
18  import java.util.Set;
19  
20  import static org.mockito.Mockito.mock;
21  
22  public class TestPluginEnabler extends TestCase
23  {
24      private Mock mockAccessor;
25      private Mock mockController;
26      private PluginEnabler enabler;
27      private PluginExceptionInterception pluginExceptionInterception;
28  
29      @Override
30      public void setUp()
31      {
32          mockAccessor = new Mock(PluginAccessor.class);
33          mockController = new Mock(PluginController.class);
34          pluginExceptionInterception = NoOpPluginExceptionInterception.NOOP_INTERCEPTION;
35          enabler = new PluginEnabler((PluginAccessor) mockAccessor.proxy(), (PluginController) mockController.proxy(), pluginExceptionInterception);
36      }
37  
38      public void testEnable()
39      {
40          Plugin plugin = new MyPlugin("foo");
41  
42          enabler.enable(Arrays.asList(plugin));
43          assertEquals(PluginState.ENABLED, plugin.getPluginState());
44      }
45  
46      public void testEnableWithCustomTimeout()
47      {
48  
49          Plugin plugin = new MyPlugin("foo") {
50              @Override
51              protected PluginState enableInternal() throws PluginException
52              {
53                  return PluginState.ENABLING;
54              }
55          };
56  
57          try
58          {
59              System.setProperty(PluginUtils.ATLASSIAN_PLUGINS_ENABLE_WAIT, "1");
60              long start = System.currentTimeMillis();
61              enabler = new PluginEnabler(mock(PluginAccessor.class), mock(PluginController.class), pluginExceptionInterception);
62              enabler.enable(Arrays.asList(plugin));
63              long end = System.currentTimeMillis();
64              assertTrue(end - start < 5000);
65              assertEquals(PluginState.ENABLING, plugin.getPluginState());
66          }
67          finally
68          {
69              System.clearProperty(PluginUtils.ATLASSIAN_PLUGINS_ENABLE_WAIT);
70          }
71      }
72  
73      public void testRecursiveEnable()
74      {
75          Plugin plugin = new MyPlugin("foo", "foo2");
76          Plugin plugin2 = new MyPlugin("foo2", "foo3");
77          Plugin plugin3 = new MyPlugin("foo3");
78  
79          enabler.enable(Arrays.asList(plugin, plugin2, plugin3));
80          assertEquals(PluginState.ENABLED, plugin.getPluginState());
81          assertEquals(PluginState.ENABLED, plugin2.getPluginState());
82          assertEquals(PluginState.ENABLED, plugin3.getPluginState());
83      }
84  
85      public void testEnableAllRecursivelyEnablesDependencies()
86      {
87          Plugin plugin = new MyPlugin("foo", "foo2");
88          Plugin plugin2 = new MyPlugin("foo2", "foo3");
89          Plugin plugin3 = new MyPlugin("foo3");
90          MockPluginAccessor accessor = new MockPluginAccessor();
91          accessor.addPlugin(plugin);
92          accessor.addPlugin(plugin2);
93          accessor.addPlugin(plugin3);
94  
95          enabler = new PluginEnabler(accessor, mock(PluginController.class), pluginExceptionInterception);
96  
97          // Enable a single plugin, which will recursively enable all deps
98          enabler.enableAllRecursively(Arrays.asList(plugin));
99          assertEquals(PluginState.ENABLED, plugin.getPluginState());
100         assertEquals(PluginState.ENABLED, plugin2.getPluginState());
101         assertEquals(PluginState.ENABLED, plugin3.getPluginState());
102     }
103 
104     public void testRecursiveCircular()
105     {
106         Plugin plugin = new MyPlugin("foo", "foo2");
107         Plugin plugin2 = new MyPlugin("foo2", "foo3");
108         Plugin plugin3 = new MyPlugin("foo3", "foo");
109 
110         enabler.enable(Arrays.asList(plugin, plugin2, plugin3));
111         assertEquals(PluginState.ENABLED, plugin.getPluginState());
112         assertEquals(PluginState.ENABLED, plugin2.getPluginState());
113         assertEquals(PluginState.ENABLED, plugin3.getPluginState());
114     }
115 
116     public static class MyPlugin extends StaticPlugin
117     {
118         private final Set<String> deps;
119 
120         public MyPlugin(String key, String... deps)
121         {
122             setKey(key);
123             this.deps = new HashSet<String>(Arrays.asList(deps));
124             setPluginState(PluginState.DISABLED);
125         }
126 
127         @Override
128         public Set<String> getRequiredPlugins()
129         {
130             return deps;
131         }
132     }
133 }