Add verbose mode for extension list command
This is a late follow up of https://github.com/elastic/elasticsearch/pull/18051 Closes elastic/elasticsearch#2806 Original commit: elastic/x-pack-elasticsearch@d1c9a3d7c5
This commit is contained in:
parent
4b4e7158eb
commit
7467652b43
|
@ -36,11 +36,13 @@ class ListXPackExtensionCommand extends SettingCommand {
|
||||||
if (Files.exists(resolveXPackExtensionsFile(env)) == false) {
|
if (Files.exists(resolveXPackExtensionsFile(env)) == false) {
|
||||||
throw new IOException("Extensions directory missing: " + resolveXPackExtensionsFile(env));
|
throw new IOException("Extensions directory missing: " + resolveXPackExtensionsFile(env));
|
||||||
}
|
}
|
||||||
|
terminal.println(VERBOSE, "XPack Extensions directory: " + resolveXPackExtensionsFile(env));
|
||||||
terminal.println(VERBOSE, "Extensions directory: " + resolveXPackExtensionsFile(env));
|
|
||||||
try (DirectoryStream<Path> stream = Files.newDirectoryStream(resolveXPackExtensionsFile(env))) {
|
try (DirectoryStream<Path> stream = Files.newDirectoryStream(resolveXPackExtensionsFile(env))) {
|
||||||
for (Path extension : stream) {
|
for (Path extension : stream) {
|
||||||
terminal.println(extension.getFileName().toString());
|
terminal.println(extension.getFileName().toString());
|
||||||
|
XPackExtensionInfo info =
|
||||||
|
XPackExtensionInfo.readFromProperties(extension);
|
||||||
|
terminal.println(VERBOSE, info.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package org.elasticsearch.xpack.extensions;
|
package org.elasticsearch.xpack.extensions;
|
||||||
|
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
import org.elasticsearch.Version;
|
||||||
import org.elasticsearch.cli.ExitCodes;
|
import org.elasticsearch.cli.ExitCodes;
|
||||||
import org.elasticsearch.cli.MockTerminal;
|
import org.elasticsearch.cli.MockTerminal;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -15,23 +16,44 @@ import org.junit.Before;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@LuceneTestCase.SuppressFileSystems("*")
|
@LuceneTestCase.SuppressFileSystems("*")
|
||||||
public class ListXPackExtensionCommandTests extends ESTestCase {
|
public class ListXPackExtensionCommandTests extends ESTestCase {
|
||||||
|
|
||||||
private Path home;
|
private Path home;
|
||||||
|
private Environment env;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
home = createTempDir();
|
home = createTempDir();
|
||||||
|
Settings settings = Settings.builder()
|
||||||
|
.put("path.home", home)
|
||||||
|
.build();
|
||||||
|
env = new Environment(settings);
|
||||||
|
Files.createDirectories(extensionsFile(env));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Path createExtensionDir(final Path home) throws IOException {
|
static String buildMultiline(String... args){
|
||||||
final Environment env = new Environment(Settings.builder().put("path.home", home.toString()).build());
|
return Arrays.asList(args).stream().collect(Collectors.joining("\n", "", "\n"));
|
||||||
final Path path = env.pluginsFile().resolve("x-pack").resolve("extensions");
|
}
|
||||||
return Files.createDirectories(path);
|
|
||||||
|
static void buildFakeExtension(Environment env, String description, String name, String className) throws IOException {
|
||||||
|
XPackExtensionTestUtil.writeProperties(extensionsFile(env).resolve(name),
|
||||||
|
"description", description,
|
||||||
|
"name", name,
|
||||||
|
"version", "1.0",
|
||||||
|
"xpack.version", Version.CURRENT.toString(),
|
||||||
|
"java.version", System.getProperty("java.specification.version"),
|
||||||
|
"classname", className);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Path extensionsFile(final Environment env) throws IOException {
|
||||||
|
return env.pluginsFile().resolve("x-pack").resolve("extensions");
|
||||||
}
|
}
|
||||||
|
|
||||||
static MockTerminal listExtensions(Path home) throws Exception {
|
static MockTerminal listExtensions(Path home) throws Exception {
|
||||||
|
@ -41,34 +63,88 @@ public class ListXPackExtensionCommandTests extends ESTestCase {
|
||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MockTerminal listExtensions(Path home, String[] args) throws Exception {
|
||||||
|
String[] argsAndHome = new String[args.length + 1];
|
||||||
|
System.arraycopy(args, 0, argsAndHome, 0, args.length);
|
||||||
|
argsAndHome[args.length] = "-Epath.home=" + home;
|
||||||
|
MockTerminal terminal = new MockTerminal();
|
||||||
|
int status = new ListXPackExtensionCommand().main(argsAndHome, terminal);
|
||||||
|
assertEquals(ExitCodes.OK, status);
|
||||||
|
return terminal;
|
||||||
|
}
|
||||||
|
|
||||||
public void testExtensionsDirMissing() throws Exception {
|
public void testExtensionsDirMissing() throws Exception {
|
||||||
Path extDir = createExtensionDir(home);
|
Files.delete(extensionsFile(env));
|
||||||
Files.delete(extDir);
|
|
||||||
IOException e = expectThrows(IOException.class, () -> listExtensions(home));
|
IOException e = expectThrows(IOException.class, () -> listExtensions(home));
|
||||||
assertTrue(e.getMessage(), e.getMessage().contains("Extensions directory missing"));
|
assertTrue(e.getMessage(), e.getMessage().contains("Extensions directory missing"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNoExtensions() throws Exception {
|
public void testNoExtensions() throws Exception {
|
||||||
createExtensionDir(home);
|
|
||||||
MockTerminal terminal = listExtensions(home);
|
MockTerminal terminal = listExtensions(home);
|
||||||
assertTrue(terminal.getOutput(), terminal.getOutput().isEmpty());
|
assertTrue(terminal.getOutput(), terminal.getOutput().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testNoExtensionsVerbose() throws Exception {
|
||||||
|
String[] params = { "-v" };
|
||||||
|
MockTerminal terminal = listExtensions(home, params);
|
||||||
|
assertEquals(terminal.getOutput(), buildMultiline("XPack Extensions directory: " + extensionsFile(env)));
|
||||||
|
}
|
||||||
|
|
||||||
public void testOneExtension() throws Exception {
|
public void testOneExtension() throws Exception {
|
||||||
Path extDir = createExtensionDir(home);
|
buildFakeExtension(env, "", "fake", "org.fake");
|
||||||
Files.createDirectory(extDir.resolve("fake"));
|
|
||||||
MockTerminal terminal = listExtensions(home);
|
MockTerminal terminal = listExtensions(home);
|
||||||
assertTrue(terminal.getOutput(), terminal.getOutput().contains("fake"));
|
assertEquals(terminal.getOutput(), buildMultiline("fake"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testTwoExtensions() throws Exception {
|
public void testTwoExtensions() throws Exception {
|
||||||
Path extDir = createExtensionDir(home);
|
buildFakeExtension(env, "", "fake1", "org.fake1");
|
||||||
Files.createDirectory(extDir.resolve("fake1"));
|
buildFakeExtension(env, "", "fake2", "org.fake2");
|
||||||
Files.createDirectory(extDir.resolve("fake2"));
|
|
||||||
MockTerminal terminal = listExtensions(home);
|
MockTerminal terminal = listExtensions(home);
|
||||||
String output = terminal.getOutput();
|
assertEquals(terminal.getOutput(), buildMultiline("fake1", "fake2"));
|
||||||
assertTrue(output, output.contains("fake1"));
|
|
||||||
assertTrue(output, output.contains("fake2"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testExtensionWithVerbose() throws Exception {
|
||||||
|
buildFakeExtension(env, "fake desc", "fake_extension", "org.fake");
|
||||||
|
String[] params = { "-v" };
|
||||||
|
MockTerminal terminal = listExtensions(home, params);
|
||||||
|
assertEquals(terminal.getOutput(), buildMultiline("XPack Extensions directory: " + extensionsFile(env),
|
||||||
|
"fake_extension", "- XPack Extension information:", "Name: fake_extension",
|
||||||
|
"Description: fake desc", "Version: 1.0", " * Classname: org.fake"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testExtensionWithVerboseMultipleExtensions() throws Exception {
|
||||||
|
buildFakeExtension(env, "fake desc 1", "fake_extension1", "org.fake");
|
||||||
|
buildFakeExtension(env, "fake desc 2", "fake_extension2", "org.fake2");
|
||||||
|
String[] params = { "-v" };
|
||||||
|
MockTerminal terminal = listExtensions(home, params);
|
||||||
|
assertEquals(terminal.getOutput(), buildMultiline("XPack Extensions directory: " + extensionsFile(env),
|
||||||
|
"fake_extension1", "- XPack Extension information:", "Name: fake_extension1",
|
||||||
|
"Description: fake desc 1", "Version: 1.0", " * Classname: org.fake",
|
||||||
|
"fake_extension2", "- XPack Extension information:", "Name: fake_extension2",
|
||||||
|
"Description: fake desc 2", "Version: 1.0", " * Classname: org.fake2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testExtensionWithoutVerboseMultipleExtensions() throws Exception {
|
||||||
|
buildFakeExtension(env, "fake desc 1", "fake_extension1", "org.fake");
|
||||||
|
buildFakeExtension(env, "fake desc 2", "fake_extension2", "org.fake2");
|
||||||
|
MockTerminal terminal = listExtensions(home, new String[0]);
|
||||||
|
String output = terminal.getOutput();
|
||||||
|
assertEquals(output, buildMultiline("fake_extension1", "fake_extension2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testExtensionWithoutDescriptorFile() throws Exception{
|
||||||
|
Files.createDirectories(extensionsFile(env).resolve("fake1"));
|
||||||
|
NoSuchFileException e = expectThrows(NoSuchFileException.class, () -> listExtensions(home));
|
||||||
|
assertEquals(e.getFile(),
|
||||||
|
extensionsFile(env).resolve("fake1").resolve(XPackExtensionInfo.XPACK_EXTENSION_PROPERTIES).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testExtensionWithWrongDescriptorFile() throws Exception{
|
||||||
|
XPackExtensionTestUtil.writeProperties(extensionsFile(env).resolve("fake1"),
|
||||||
|
"description", "fake desc");
|
||||||
|
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> listExtensions(home));
|
||||||
|
assertEquals(e.getMessage(), "Property [name] is missing in [" +
|
||||||
|
extensionsFile(env).resolve("fake1")
|
||||||
|
.resolve(XPackExtensionInfo.XPACK_EXTENSION_PROPERTIES).toString() + "]");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue