You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SecurePluginManagerWrapperTest.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package org.pf4j;
  2. import static org.junit.jupiter.api.Assertions.assertTrue;
  3. import static org.junit.Assert.assertNotNull;
  4. import static org.junit.jupiter.api.Assertions.assertEquals;
  5. import static org.junit.jupiter.api.Assertions.assertThrows;
  6. import java.io.IOException;
  7. import java.nio.file.Path;
  8. import java.util.List;
  9. import org.junit.jupiter.api.AfterEach;
  10. import org.junit.jupiter.api.BeforeEach;
  11. import org.junit.jupiter.api.Test;
  12. import org.junit.jupiter.api.io.TempDir;
  13. import org.pf4j.test.PluginJar;
  14. import org.pf4j.test.TestExtension;
  15. import org.pf4j.test.TestExtensionPoint;
  16. import org.pf4j.test.TestPlugin;
  17. public class SecurePluginManagerWrapperTest {
  18. private static final String OTHER_PLUGIN_ID = "test-plugin-2";
  19. private static final String THIS_PLUGIN_ID = "test-plugin-1";
  20. private PluginJar thisPlugin;
  21. private PluginJar otherPlugin;
  22. private PluginManager pluginManager;
  23. private PluginManager wrappedPluginManager;
  24. private int pluginManagerEvents = 0;
  25. private int wrappedPluginManagerEvents = 0;
  26. @TempDir
  27. Path pluginsPath;
  28. @BeforeEach
  29. public void setUp() throws IOException {
  30. pluginManagerEvents = 0;
  31. wrappedPluginManagerEvents = 0;
  32. thisPlugin = new PluginJar.Builder(pluginsPath.resolve("test-plugin1.jar"), THIS_PLUGIN_ID).pluginClass(TestPlugin.class.getName()).pluginVersion("1.2.3").extension(TestExtension.class.getName()).build();
  33. otherPlugin = new PluginJar.Builder(pluginsPath.resolve("test-plugin2.jar"), OTHER_PLUGIN_ID).pluginClass(TestPlugin.class.getName()).pluginVersion("1.2.3").extension(TestExtension.class.getName()).build();
  34. pluginManager = new JarPluginManager(pluginsPath);
  35. wrappedPluginManager = new SecurePluginManagerWrapper(pluginManager, THIS_PLUGIN_ID);
  36. }
  37. @AfterEach
  38. public void tearDown() {
  39. pluginManager.unloadPlugins();
  40. thisPlugin = null;
  41. otherPlugin = null;
  42. pluginManager = null;
  43. }
  44. @Test
  45. public void pluginStateListeners() {
  46. pluginManager.addPluginStateListener(new PluginStateListener() {
  47. @Override
  48. public void pluginStateChanged(PluginStateEvent event) {
  49. pluginManagerEvents++;
  50. }
  51. });
  52. wrappedPluginManager.addPluginStateListener(new PluginStateListener() {
  53. @Override
  54. public void pluginStateChanged(PluginStateEvent event) {
  55. wrappedPluginManagerEvents++;
  56. }
  57. });
  58. pluginManager.loadPlugins();
  59. pluginManager.startPlugins();
  60. assertEquals(4, pluginManagerEvents);
  61. assertEquals(2, wrappedPluginManagerEvents);
  62. }
  63. @Test
  64. public void deletePlugin() {
  65. pluginManager.loadPlugins();
  66. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.deletePlugin(OTHER_PLUGIN_ID));
  67. assertTrue(wrappedPluginManager.deletePlugin(THIS_PLUGIN_ID));
  68. }
  69. @Test
  70. public void disablePlugin() {
  71. pluginManager.loadPlugins();
  72. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.disablePlugin(OTHER_PLUGIN_ID));
  73. assertTrue(wrappedPluginManager.disablePlugin(THIS_PLUGIN_ID));
  74. }
  75. @Test
  76. public void enablePlugin() {
  77. pluginManager.loadPlugins();
  78. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.enablePlugin(OTHER_PLUGIN_ID));
  79. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.enablePlugin(THIS_PLUGIN_ID));
  80. }
  81. @Test
  82. public void getExtensionClasses() {
  83. pluginManager.loadPlugins();
  84. pluginManager.startPlugins();
  85. assertEquals(1, wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class).size());
  86. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class, OTHER_PLUGIN_ID));
  87. assertEquals(1, wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class, THIS_PLUGIN_ID).size());
  88. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClasses(OTHER_PLUGIN_ID));
  89. assertEquals(1, wrappedPluginManager.getExtensionClasses(THIS_PLUGIN_ID).size());
  90. }
  91. @Test
  92. public void getExtensionClassNames() {
  93. pluginManager.loadPlugins();
  94. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClassNames(OTHER_PLUGIN_ID));
  95. assertEquals(1, wrappedPluginManager.getExtensionClassNames(THIS_PLUGIN_ID).size());
  96. }
  97. @Test
  98. public void getExtensionFactory() {
  99. pluginManager.loadPlugins();
  100. assertEquals(pluginManager.getExtensionFactory(), wrappedPluginManager.getExtensionFactory());
  101. }
  102. @Test
  103. public void getExtensions() {
  104. pluginManager.loadPlugins();
  105. pluginManager.startPlugins();
  106. assertEquals(1, wrappedPluginManager.getExtensions(TestExtensionPoint.class).size());
  107. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensions(TestExtensionPoint.class, OTHER_PLUGIN_ID));
  108. assertEquals(1, wrappedPluginManager.getExtensions(TestExtensionPoint.class, THIS_PLUGIN_ID).size());
  109. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensions(OTHER_PLUGIN_ID));
  110. assertEquals(1, wrappedPluginManager.getExtensions(THIS_PLUGIN_ID).size());
  111. }
  112. @Test
  113. public void getPlugin() {
  114. pluginManager.loadPlugins();
  115. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPlugin(OTHER_PLUGIN_ID));
  116. assertEquals(THIS_PLUGIN_ID, wrappedPluginManager.getPlugin(THIS_PLUGIN_ID).getPluginId());
  117. }
  118. @Test
  119. public void getPluginClassLoader() {
  120. pluginManager.loadPlugins();
  121. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginClassLoader(OTHER_PLUGIN_ID));
  122. assertNotNull(wrappedPluginManager.getPluginClassLoader(THIS_PLUGIN_ID));
  123. }
  124. @Test
  125. public void getPlugins() {
  126. pluginManager.loadPlugins();
  127. assertEquals(2, pluginManager.getPlugins().size());
  128. assertEquals(1, wrappedPluginManager.getPlugins().size());
  129. }
  130. @Test
  131. public void getPluginsRoot() {
  132. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginsRoot());
  133. }
  134. @Test
  135. public void getPluginsRoots() {
  136. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginsRoots());
  137. }
  138. @Test
  139. public void getResolvedPlugins() {
  140. pluginManager.loadPlugins();
  141. assertEquals(2, pluginManager.getResolvedPlugins().size());
  142. assertEquals(1, wrappedPluginManager.getResolvedPlugins().size());
  143. }
  144. @Test
  145. public void getRuntimeMode() {
  146. assertEquals(pluginManager.getRuntimeMode(), wrappedPluginManager.getRuntimeMode());
  147. }
  148. @Test
  149. public void getStartedPlugins() {
  150. pluginManager.loadPlugins();
  151. pluginManager.startPlugins();
  152. assertEquals(2, pluginManager.getStartedPlugins().size());
  153. assertEquals(1, wrappedPluginManager.getStartedPlugins().size());
  154. }
  155. @Test
  156. public void getSystemVersion() {
  157. assertEquals(pluginManager.getSystemVersion(), wrappedPluginManager.getSystemVersion());
  158. }
  159. @Test
  160. public void getUnresolvedPlugins() {
  161. assertNotNull(wrappedPluginManager);
  162. assertNotNull(wrappedPluginManager.getUnresolvedPlugins());
  163. assertTrue(wrappedPluginManager.getUnresolvedPlugins().isEmpty());
  164. }
  165. @Test
  166. public void getVersionManager() {
  167. assertEquals(pluginManager.getVersionManager(), wrappedPluginManager.getVersionManager());
  168. }
  169. @Test
  170. public void isDevelopment() {
  171. assertEquals(pluginManager.isDevelopment(), wrappedPluginManager.isDevelopment());
  172. }
  173. @Test
  174. public void isNotDevelopment() {
  175. assertEquals(pluginManager.isNotDevelopment(), wrappedPluginManager.isNotDevelopment());
  176. }
  177. @Test
  178. public void loadPlugin() {
  179. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.loadPlugin(thisPlugin.path()));
  180. }
  181. @Test
  182. public void loadPlugins() {
  183. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.loadPlugins());
  184. }
  185. @Test
  186. public void setSystemVersion() {
  187. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.setSystemVersion("1.0.0"));
  188. }
  189. @Test
  190. public void startPlugin() {
  191. pluginManager.loadPlugins();
  192. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugin(OTHER_PLUGIN_ID));
  193. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugin(THIS_PLUGIN_ID));
  194. }
  195. @Test
  196. public void startPlugins() {
  197. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugins());
  198. }
  199. @Test
  200. public void stopPlugin() {
  201. pluginManager.loadPlugins();
  202. pluginManager.startPlugins();
  203. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.stopPlugin(OTHER_PLUGIN_ID));
  204. assertEquals(PluginState.STOPPED, wrappedPluginManager.stopPlugin(THIS_PLUGIN_ID));
  205. }
  206. @Test
  207. public void stopPlugins() {
  208. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.stopPlugins());
  209. }
  210. @Test
  211. public void unloadPlugin() {
  212. pluginManager.loadPlugins();
  213. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.unloadPlugin(OTHER_PLUGIN_ID));
  214. assertTrue(wrappedPluginManager.unloadPlugin(THIS_PLUGIN_ID));
  215. }
  216. @Test
  217. public void unloadPlugins() {
  218. assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.unloadPlugins());
  219. }
  220. @Test
  221. public void whichPlugin() {
  222. pluginManager.loadPlugins();
  223. pluginManager.startPlugins();
  224. assertEquals(null, wrappedPluginManager.whichPlugin(pluginManager.getExtensionClasses(OTHER_PLUGIN_ID).get(0)));
  225. assertEquals(THIS_PLUGIN_ID, wrappedPluginManager.whichPlugin(pluginManager.getExtensionClasses(THIS_PLUGIN_ID).get(0)).getPluginId());
  226. }
  227. }