PageRenderTime 24ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-plugins-core/src/test/java/com/atlassian/plugin/manager/TestDefaultPluginManagerEvents.java

https://bitbucket.org/purewind/atlassian-plugins
Java | 238 lines | 196 code | 38 blank | 4 comment | 3 complexity | 2555045c0a6a10e24d09f0e55dde7582 MD5 | raw file
  1. package com.atlassian.plugin.manager;
  2. import com.atlassian.plugin.DefaultModuleDescriptorFactory;
  3. import com.atlassian.plugin.JarPluginArtifact;
  4. import com.atlassian.plugin.PluginAccessor;
  5. import com.atlassian.plugin.event.PluginEventManager;
  6. import com.atlassian.plugin.event.events.PluginDisabledEvent;
  7. import com.atlassian.plugin.event.events.PluginEnabledEvent;
  8. import com.atlassian.plugin.event.events.PluginModuleDisabledEvent;
  9. import com.atlassian.plugin.event.events.PluginModuleEnabledEvent;
  10. import com.atlassian.plugin.event.impl.DefaultPluginEventManager;
  11. import com.atlassian.plugin.event.listeners.RecordingListener;
  12. import com.atlassian.plugin.factories.LegacyDynamicPluginFactory;
  13. import com.atlassian.plugin.factories.PluginFactory;
  14. import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
  15. import com.atlassian.plugin.loaders.DirectoryPluginLoader;
  16. import com.atlassian.plugin.loaders.PluginLoader;
  17. import com.atlassian.plugin.loaders.SinglePluginLoader;
  18. import com.atlassian.plugin.loaders.classloading.DirectoryPluginLoaderUtils;
  19. import com.atlassian.plugin.manager.store.MemoryPluginPersistentStateStore;
  20. import com.atlassian.plugin.mock.MockAnimalModuleDescriptor;
  21. import com.atlassian.plugin.mock.MockMineralModuleDescriptor;
  22. import com.atlassian.plugin.mock.MockVegetableModuleDescriptor;
  23. import com.atlassian.plugin.repositories.FilePluginInstaller;
  24. import com.google.common.collect.ImmutableList;
  25. import junit.framework.TestCase;
  26. import java.io.File;
  27. import java.util.ArrayList;
  28. import java.util.Arrays;
  29. import java.util.List;
  30. import static java.util.Arrays.asList;
  31. public class TestDefaultPluginManagerEvents extends TestCase {
  32. private DefaultPluginManager manager;
  33. private RecordingListener listener;
  34. @Override
  35. protected void setUp() throws Exception {
  36. super.setUp();
  37. listener = new RecordingListener(
  38. PluginEnabledEvent.class,
  39. PluginDisabledEvent.class,
  40. PluginModuleEnabledEvent.class,
  41. PluginModuleDisabledEvent.class);
  42. manager = buildPluginManager(listener);
  43. manager.init();
  44. listener.reset();
  45. }
  46. private DefaultPluginManager buildPluginManager(RecordingListener listener) throws Exception {
  47. PluginEventManager pluginEventManager = new DefaultPluginEventManager();
  48. pluginEventManager.register(listener);
  49. DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(new DefaultHostContainer());
  50. moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
  51. moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
  52. moduleDescriptorFactory.addModuleDescriptor("vegetable", MockVegetableModuleDescriptor.class);
  53. File pluginTempDirectory = DirectoryPluginLoaderUtils.copyTestPluginsToTempDirectory();
  54. List<PluginLoader> pluginLoaders = buildPluginLoaders(pluginEventManager, pluginTempDirectory);
  55. DefaultPluginManager manager = new DefaultPluginManager(new MemoryPluginPersistentStateStore(), pluginLoaders,
  56. moduleDescriptorFactory, pluginEventManager);
  57. manager.setPluginInstaller(new FilePluginInstaller(pluginTempDirectory));
  58. return manager;
  59. }
  60. private List<PluginLoader> buildPluginLoaders(PluginEventManager pluginEventManager, File pluginTempDirectory) {
  61. List<PluginLoader> pluginLoaders = new ArrayList<PluginLoader>();
  62. pluginLoaders.add(new SinglePluginLoader("test-atlassian-plugin.xml"));
  63. pluginLoaders.add(new SinglePluginLoader("test-disabled-plugin.xml"));
  64. DirectoryPluginLoader directoryPluginLoader = new DirectoryPluginLoader(
  65. pluginTempDirectory,
  66. ImmutableList.<PluginFactory>of(
  67. new LegacyDynamicPluginFactory(PluginAccessor.Descriptor.FILENAME)),
  68. pluginEventManager);
  69. pluginLoaders.add(directoryPluginLoader);
  70. return pluginLoaders;
  71. }
  72. @Override
  73. protected void tearDown() throws Exception {
  74. // prevent resources being used until end of all tests
  75. manager = null;
  76. listener = null;
  77. super.tearDown();
  78. }
  79. public void testInitialisationEvents() throws Exception {
  80. DefaultPluginManager manager = buildPluginManager(listener);
  81. manager.init();
  82. assertListEquals(listener.getEventClasses(),
  83. PluginModuleEnabledEvent.class,
  84. PluginModuleEnabledEvent.class,
  85. PluginModuleEnabledEvent.class,
  86. PluginEnabledEvent.class,
  87. PluginModuleEnabledEvent.class,
  88. PluginEnabledEvent.class,
  89. PluginModuleEnabledEvent.class,
  90. PluginEnabledEvent.class);
  91. assertListEquals(listener.getEventPluginOrModuleKeys(),
  92. asList("test.atlassian.plugin:bear",
  93. "test.atlassian.plugin:gold",
  94. "test.atlassian.plugin:veg",
  95. "test.atlassian.plugin",
  96. "test.atlassian.plugin.classloaded:paddington",
  97. "test.atlassian.plugin.classloaded",
  98. "test.atlassian.plugin.classloaded2:pooh",
  99. "test.atlassian.plugin.classloaded2"),
  100. asList("test.atlassian.plugin:bear",
  101. "test.atlassian.plugin:gold",
  102. "test.atlassian.plugin:veg",
  103. "test.atlassian.plugin",
  104. "test.atlassian.plugin.classloaded2:pooh",
  105. "test.atlassian.plugin.classloaded2",
  106. "test.atlassian.plugin.classloaded:paddington",
  107. "test.atlassian.plugin.classloaded"));
  108. ;
  109. }
  110. public void testDisablePlugin() throws Exception {
  111. manager.disablePlugin("test.atlassian.plugin");
  112. assertListEquals(listener.getEventClasses(),
  113. PluginModuleDisabledEvent.class,
  114. PluginModuleDisabledEvent.class,
  115. PluginModuleDisabledEvent.class,
  116. PluginDisabledEvent.class);
  117. assertListEquals(listener.getEventPluginOrModuleKeys(),
  118. "test.atlassian.plugin:veg", // a module that can't be individually disabled can still be disabled with the plugin
  119. "test.atlassian.plugin:gold", // modules in reverse order to enable
  120. "test.atlassian.plugin:bear",
  121. "test.atlassian.plugin");
  122. }
  123. public void testEnablePlugin() throws Exception {
  124. manager.disablePlugin("test.atlassian.plugin");
  125. listener.reset();
  126. manager.enablePlugins("test.atlassian.plugin");
  127. assertListEquals(listener.getEventClasses(),
  128. PluginModuleEnabledEvent.class,
  129. PluginModuleEnabledEvent.class,
  130. PluginModuleEnabledEvent.class,
  131. PluginEnabledEvent.class);
  132. assertListEquals(listener.getEventPluginOrModuleKeys(),
  133. "test.atlassian.plugin:bear",
  134. "test.atlassian.plugin:gold",
  135. "test.atlassian.plugin:veg",
  136. "test.atlassian.plugin");
  137. }
  138. public void testEnableDisabledByDefaultPlugin() throws Exception {
  139. manager.enablePlugin("test.disabled.plugin");
  140. assertListEquals(listener.getEventClasses(), PluginEnabledEvent.class);
  141. assertListEquals(listener.getEventPluginOrModuleKeys(), "test.disabled.plugin");
  142. listener.reset();
  143. manager.enablePluginModule("test.disabled.plugin:gold");
  144. assertListEquals(listener.getEventClasses(), PluginModuleEnabledEvent.class);
  145. assertListEquals(listener.getEventPluginOrModuleKeys(), "test.disabled.plugin:gold");
  146. }
  147. public void testDisableModule() throws Exception {
  148. manager.disablePluginModule("test.atlassian.plugin:bear");
  149. assertListEquals(listener.getEventClasses(), PluginModuleDisabledEvent.class);
  150. assertListEquals(listener.getEventPluginOrModuleKeys(), "test.atlassian.plugin:bear");
  151. }
  152. public void testDisableModuleWithCannotDisableDoesNotFireEvent() throws Exception {
  153. manager.disablePluginModule("test.atlassian.plugin:veg");
  154. assertEquals(listener.getEventClasses().size(), 0);
  155. }
  156. public void testEnableModule() throws Exception {
  157. manager.disablePluginModule("test.atlassian.plugin:bear");
  158. listener.reset();
  159. manager.enablePluginModule("test.atlassian.plugin:bear");
  160. assertListEquals(listener.getEventClasses(), PluginModuleEnabledEvent.class);
  161. assertListEquals(listener.getEventPluginOrModuleKeys(), "test.atlassian.plugin:bear");
  162. }
  163. public void testInstallPlugin() throws Exception {
  164. // have to uninstall one of the directory plugins
  165. manager.uninstall(manager.getPlugin("test.atlassian.plugin.classloaded2"));
  166. listener.reset();
  167. File pluginJar = new File(DirectoryPluginLoaderUtils.getTestPluginsDirectory(),
  168. "pooh-test-plugin.jar");
  169. manager.installPlugin(new JarPluginArtifact(pluginJar));
  170. assertListEquals(listener.getEventClasses(),
  171. PluginModuleEnabledEvent.class,
  172. PluginEnabledEvent.class);
  173. }
  174. public void testUninstallPlugin() throws Exception {
  175. // have to uninstall one of the directory plugins
  176. manager.uninstall(manager.getPlugin("test.atlassian.plugin.classloaded2"));
  177. assertListEquals(listener.getEventClasses(),
  178. PluginModuleDisabledEvent.class,
  179. PluginDisabledEvent.class);
  180. }
  181. // yeah, the expected values should come first in jUnit, but varargs are so convenient...
  182. private static void assertListEquals(List<String> actual, List<String>... oneOfExpected) {
  183. boolean found = false;
  184. for (List<String> expected : oneOfExpected) {
  185. if (actual.equals(expected)) {
  186. found = true;
  187. break;
  188. }
  189. }
  190. assertTrue("Unexpected list: " + actual, found);
  191. }
  192. private static void assertListEquals(List actual, Object... expected) {
  193. String message = "Expected list was: " + Arrays.toString(expected) + ", " +
  194. "but actual was: " + actual;
  195. assertEquals(message, expected.length, actual.size());
  196. for (int i = 0; i < actual.size(); i++) {
  197. assertEquals(message, expected[i], actual.get(i));
  198. }
  199. }
  200. }