|
@@ -37,6 +37,7 @@ import java.nio.file.Path;
|
|
|
|
|
|
import static org.hamcrest.CoreMatchers.containsString;
|
|
|
import static org.hamcrest.CoreMatchers.not;
|
|
|
+import static org.hamcrest.Matchers.hasToString;
|
|
|
|
|
|
@LuceneTestCase.SuppressFileSystems("*")
|
|
|
public class RemovePluginCommandTests extends ESTestCase {
|
|
@@ -58,10 +59,10 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
env = new Environment(settings);
|
|
|
}
|
|
|
|
|
|
- static MockTerminal removePlugin(String name, Path home) throws Exception {
|
|
|
+ static MockTerminal removePlugin(String name, Path home, boolean purge) throws Exception {
|
|
|
Environment env = new Environment(Settings.builder().put("path.home", home).build());
|
|
|
MockTerminal terminal = new MockTerminal();
|
|
|
- new RemovePluginCommand().execute(terminal, name, env);
|
|
|
+ new RemovePluginCommand().execute(terminal, env, name, purge);
|
|
|
return terminal;
|
|
|
}
|
|
|
|
|
@@ -76,7 +77,7 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testMissing() throws Exception {
|
|
|
- UserException e = expectThrows(UserException.class, () -> removePlugin("dne", home));
|
|
|
+ UserException e = expectThrows(UserException.class, () -> removePlugin("dne", home, randomBoolean()));
|
|
|
assertTrue(e.getMessage(), e.getMessage().contains("plugin [dne] not found"));
|
|
|
assertRemoveCleaned(env);
|
|
|
}
|
|
@@ -86,7 +87,7 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
Files.createFile(env.pluginsFile().resolve("fake").resolve("plugin.jar"));
|
|
|
Files.createDirectory(env.pluginsFile().resolve("fake").resolve("subdir"));
|
|
|
Files.createDirectory(env.pluginsFile().resolve("other"));
|
|
|
- removePlugin("fake", home);
|
|
|
+ removePlugin("fake", home, randomBoolean());
|
|
|
assertFalse(Files.exists(env.pluginsFile().resolve("fake")));
|
|
|
assertTrue(Files.exists(env.pluginsFile().resolve("other")));
|
|
|
assertRemoveCleaned(env);
|
|
@@ -97,7 +98,7 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
Path binDir = env.binFile().resolve("fake");
|
|
|
Files.createDirectories(binDir);
|
|
|
Files.createFile(binDir.resolve("somescript"));
|
|
|
- removePlugin("fake", home);
|
|
|
+ removePlugin("fake", home, randomBoolean());
|
|
|
assertFalse(Files.exists(env.pluginsFile().resolve("fake")));
|
|
|
assertTrue(Files.exists(env.binFile().resolve("elasticsearch")));
|
|
|
assertFalse(Files.exists(binDir));
|
|
@@ -106,7 +107,7 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
|
|
|
public void testBinNotDir() throws Exception {
|
|
|
Files.createDirectories(env.pluginsFile().resolve("elasticsearch"));
|
|
|
- UserException e = expectThrows(UserException.class, () -> removePlugin("elasticsearch", home));
|
|
|
+ UserException e = expectThrows(UserException.class, () -> removePlugin("elasticsearch", home, randomBoolean()));
|
|
|
assertTrue(e.getMessage(), e.getMessage().contains("not a directory"));
|
|
|
assertTrue(Files.exists(env.pluginsFile().resolve("elasticsearch"))); // did not remove
|
|
|
assertTrue(Files.exists(env.binFile().resolve("elasticsearch")));
|
|
@@ -118,21 +119,58 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
final Path configDir = env.configFile().resolve("fake");
|
|
|
Files.createDirectories(configDir);
|
|
|
Files.createFile(configDir.resolve("fake.yml"));
|
|
|
- final MockTerminal terminal = removePlugin("fake", home);
|
|
|
+ final MockTerminal terminal = removePlugin("fake", home, false);
|
|
|
assertTrue(Files.exists(env.configFile().resolve("fake")));
|
|
|
assertThat(terminal.getOutput(), containsString(expectedConfigDirPreservedMessage(configDir)));
|
|
|
assertRemoveCleaned(env);
|
|
|
}
|
|
|
|
|
|
+ public void testPurgePluginExists() throws Exception {
|
|
|
+ Files.createDirectories(env.pluginsFile().resolve("fake"));
|
|
|
+ final Path configDir = env.configFile().resolve("fake");
|
|
|
+ if (randomBoolean()) {
|
|
|
+ Files.createDirectories(configDir);
|
|
|
+ Files.createFile(configDir.resolve("fake.yml"));
|
|
|
+ }
|
|
|
+ final MockTerminal terminal = removePlugin("fake", home, true);
|
|
|
+ assertFalse(Files.exists(env.configFile().resolve("fake")));
|
|
|
+ assertThat(terminal.getOutput(), not(containsString(expectedConfigDirPreservedMessage(configDir))));
|
|
|
+ assertRemoveCleaned(env);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testPurgePluginDoesNotExist() throws Exception {
|
|
|
+ final Path configDir = env.configFile().resolve("fake");
|
|
|
+ Files.createDirectories(configDir);
|
|
|
+ Files.createFile(configDir.resolve("fake.yml"));
|
|
|
+ final MockTerminal terminal = removePlugin("fake", home, true);
|
|
|
+ assertFalse(Files.exists(env.configFile().resolve("fake")));
|
|
|
+ assertThat(terminal.getOutput(), not(containsString(expectedConfigDirPreservedMessage(configDir))));
|
|
|
+ assertRemoveCleaned(env);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testPurgeNothingExists() throws Exception {
|
|
|
+ final UserException e = expectThrows(UserException.class, () -> removePlugin("fake", home, true));
|
|
|
+ assertThat(e, hasToString(containsString("plugin [fake] not found")));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testPurgeOnlyMarkerFileExists() throws Exception {
|
|
|
+ final Path configDir = env.configFile().resolve("fake");
|
|
|
+ final Path removing = env.pluginsFile().resolve(".removing-fake");
|
|
|
+ Files.createFile(removing);
|
|
|
+ final MockTerminal terminal = removePlugin("fake", home, randomBoolean());
|
|
|
+ assertFalse(Files.exists(removing));
|
|
|
+ assertThat(terminal.getOutput(), not(containsString(expectedConfigDirPreservedMessage(configDir))));
|
|
|
+ }
|
|
|
+
|
|
|
public void testNoConfigDirPreserved() throws Exception {
|
|
|
Files.createDirectories(env.pluginsFile().resolve("fake"));
|
|
|
final Path configDir = env.configFile().resolve("fake");
|
|
|
- final MockTerminal terminal = removePlugin("fake", home);
|
|
|
+ final MockTerminal terminal = removePlugin("fake", home, randomBoolean());
|
|
|
assertThat(terminal.getOutput(), not(containsString(expectedConfigDirPreservedMessage(configDir))));
|
|
|
}
|
|
|
|
|
|
public void testRemoveUninstalledPluginErrors() throws Exception {
|
|
|
- UserException e = expectThrows(UserException.class, () -> removePlugin("fake", home));
|
|
|
+ UserException e = expectThrows(UserException.class, () -> removePlugin("fake", home, randomBoolean()));
|
|
|
assertEquals(ExitCodes.CONFIG, e.exitCode);
|
|
|
assertEquals("plugin [fake] not found; run 'elasticsearch-plugin list' to get list of installed plugins", e.getMessage());
|
|
|
|
|
@@ -152,7 +190,7 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testMissingPluginName() throws Exception {
|
|
|
- UserException e = expectThrows(UserException.class, () -> removePlugin(null, home));
|
|
|
+ UserException e = expectThrows(UserException.class, () -> removePlugin(null, home, randomBoolean()));
|
|
|
assertEquals(ExitCodes.USAGE, e.exitCode);
|
|
|
assertEquals("plugin name is required", e.getMessage());
|
|
|
}
|
|
@@ -160,12 +198,12 @@ public class RemovePluginCommandTests extends ESTestCase {
|
|
|
public void testRemoveWhenRemovingMarker() throws Exception {
|
|
|
Files.createDirectory(env.pluginsFile().resolve("fake"));
|
|
|
Files.createFile(env.pluginsFile().resolve("fake").resolve("plugin.jar"));
|
|
|
- Files.createFile(env.pluginsFile().resolve("fake").resolve(".removing-fake"));
|
|
|
- removePlugin("fake", home);
|
|
|
+ Files.createFile(env.pluginsFile().resolve(".removing-fake"));
|
|
|
+ removePlugin("fake", home, randomBoolean());
|
|
|
}
|
|
|
|
|
|
private String expectedConfigDirPreservedMessage(final Path configDir) {
|
|
|
- return "-> preserving plugin config files [" + configDir + "] in case of upgrade; delete manually if not needed";
|
|
|
+ return "-> preserving plugin config files [" + configDir + "] in case of upgrade; use --purge if not needed";
|
|
|
}
|
|
|
|
|
|
}
|