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