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.

PluginDependencyTest.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*
  2. * Copyright (C) 2012-present the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.pf4j;
  17. import org.junit.jupiter.api.BeforeEach;
  18. import org.junit.jupiter.api.Test;
  19. import org.junit.jupiter.api.io.TempDir;
  20. import org.pf4j.test.PluginZip;
  21. import java.nio.file.Path;
  22. import static org.junit.jupiter.api.Assertions.assertEquals;
  23. import static org.junit.jupiter.api.Assertions.assertFalse;
  24. import static org.junit.jupiter.api.Assertions.assertTrue;
  25. /**
  26. * @author Mario Franco
  27. */
  28. public class PluginDependencyTest {
  29. private DefaultPluginManager pluginManager;
  30. @TempDir
  31. Path pluginsPath;
  32. @BeforeEach
  33. public void setUp() {
  34. pluginManager = new DefaultPluginManager(pluginsPath);
  35. }
  36. /**
  37. * Test of getPluginId method, of class PluginDependency.
  38. */
  39. @Test
  40. public void testPluginDependecy() {
  41. PluginDependency instance = new PluginDependency("test");
  42. PluginDependency instance2 = new PluginDependency("test");
  43. assertEquals(instance, instance2);
  44. assertEquals("test", instance.getPluginId());
  45. assertEquals("*", instance.getPluginVersionSupport());
  46. assertFalse(instance.isOptional());
  47. instance = new PluginDependency("test@");
  48. instance2 = new PluginDependency("test@");
  49. assertEquals(instance, instance2);
  50. assertEquals("test", instance.getPluginId());
  51. assertEquals("*", instance.getPluginVersionSupport());
  52. assertFalse(instance.isOptional());
  53. instance = new PluginDependency("test?");
  54. instance2 = new PluginDependency("test?");
  55. assertEquals(instance, instance2);
  56. assertEquals("test", instance.getPluginId());
  57. assertEquals("*", instance.getPluginVersionSupport());
  58. assertTrue(instance.isOptional());
  59. instance = new PluginDependency("test?@");
  60. instance2 = new PluginDependency("test?@");
  61. assertEquals(instance, instance2);
  62. assertEquals("test", instance.getPluginId());
  63. assertEquals("*", instance.getPluginVersionSupport());
  64. assertTrue(instance.isOptional());
  65. instance = new PluginDependency("test@1.0");
  66. instance2 = new PluginDependency("test@1.0");
  67. assertEquals(instance, instance2);
  68. assertEquals("test", instance.getPluginId());
  69. assertEquals("1.0", instance.getPluginVersionSupport());
  70. assertFalse(instance.isOptional());
  71. assertEquals("PluginDependency [pluginId=test, pluginVersionSupport=1.0, optional=false]", instance.toString());
  72. instance = new PluginDependency("test?@1.0");
  73. instance2 = new PluginDependency("test?@1.0");
  74. assertEquals(instance, instance2);
  75. assertEquals("test", instance.getPluginId());
  76. assertEquals("1.0", instance.getPluginVersionSupport());
  77. assertTrue(instance.isOptional());
  78. assertEquals("PluginDependency [pluginId=test, pluginVersionSupport=1.0, optional=true]", instance.toString());
  79. }
  80. @Test
  81. public void dependentStop() throws Exception {
  82. // B depends on A
  83. PluginZip pluginA = new PluginZip.Builder(pluginsPath.resolve("A-plugin-1.2.3.zip"), "plugin.a")
  84. .pluginVersion("1.2.3").build();
  85. PluginZip pluginB = new PluginZip.Builder(pluginsPath.resolve("B-plugin-1.2.3.zip"), "plugin.b")
  86. .pluginDependencies("plugin.a")
  87. .pluginVersion("1.2.3").build();
  88. pluginManager.loadPlugins();
  89. assertEquals(2, pluginManager.getPlugins().size());
  90. pluginManager.startPlugins();
  91. assertEquals(2, pluginManager.getStartedPlugins().size());
  92. // stop A, both A and B should be stopped
  93. pluginManager.stopPlugin("plugin.a");
  94. assertEquals(0, pluginManager.getStartedPlugins().size());
  95. // start all again
  96. pluginManager.startPlugins();
  97. assertEquals(2, pluginManager.getStartedPlugins().size());
  98. // dependent info should be kept. #394
  99. pluginManager.stopPlugin("plugin.a");
  100. assertEquals(0, pluginManager.getStartedPlugins().size());
  101. }
  102. @Test
  103. public void dependentUnload() throws Exception {
  104. // B depends on A
  105. PluginZip pluginA = new PluginZip.Builder(pluginsPath.resolve("A-plugin-1.2.3.zip"), "plugin.a")
  106. .pluginVersion("1.2.3").build();
  107. PluginZip pluginB = new PluginZip.Builder(pluginsPath.resolve("B-plugin-1.2.3.zip"), "plugin.b")
  108. .pluginDependencies("plugin.a")
  109. .pluginVersion("1.2.3").build();
  110. pluginManager.loadPlugins();
  111. assertEquals(2, pluginManager.getPlugins().size());
  112. pluginManager.startPlugins();
  113. assertEquals(2, pluginManager.getStartedPlugins().size());
  114. // stop A, both A and B should be stopped
  115. pluginManager.stopPlugin("plugin.a");
  116. assertEquals(0, pluginManager.getStartedPlugins().size());
  117. // unload A, both A and B should be unloaded
  118. pluginManager.unloadPlugin("plugin.a");
  119. assertEquals(0, pluginManager.getResolvedPlugins().size());
  120. assertEquals(0, pluginManager.getPlugins().size());
  121. }
  122. }