-
Notifications
You must be signed in to change notification settings - Fork 24.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add plugin information for Verbose mode #18051
Changes from all commits
397c9f1
8307a05
f94a749
fb2c1b7
234bc68
ffe41ec
206d2f9
9f87f9f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,16 +19,21 @@ | |
|
||
package org.elasticsearch.plugins; | ||
|
||
|
||
import java.io.IOException; | ||
import java.nio.file.Files; | ||
import java.nio.file.NoSuchFileException; | ||
import java.nio.file.Path; | ||
import java.util.Arrays; | ||
import java.util.stream.Collectors; | ||
|
||
import org.apache.lucene.util.LuceneTestCase; | ||
import org.elasticsearch.cli.ExitCodes; | ||
import org.elasticsearch.cli.MockTerminal; | ||
import org.elasticsearch.common.settings.Settings; | ||
import org.elasticsearch.env.Environment; | ||
import org.elasticsearch.test.ESTestCase; | ||
import org.elasticsearch.Version; | ||
|
||
@LuceneTestCase.SuppressFileSystems("*") | ||
public class ListPluginsCommandTests extends ESTestCase { | ||
|
@@ -43,20 +48,38 @@ Environment createEnv() throws IOException { | |
} | ||
|
||
static MockTerminal listPlugins(Environment env) throws Exception { | ||
return listPlugins(env, new String[0]); | ||
} | ||
|
||
static MockTerminal listPlugins(Environment env, String[] args) throws Exception { | ||
MockTerminal terminal = new MockTerminal(); | ||
String[] args = {}; | ||
int status = new ListPluginsCommand(env).main(args, terminal); | ||
assertEquals(ExitCodes.OK, status); | ||
return terminal; | ||
} | ||
|
||
static String buildMultiline(String... args){ | ||
return Arrays.asList(args).stream().collect(Collectors.joining("\n", "", "\n")); | ||
} | ||
|
||
static void buildFakePlugin(Environment env, String description, String name, String classname) throws IOException { | ||
PluginTestUtil.writeProperties(env.pluginsFile().resolve(name), | ||
"description", description, | ||
"name", name, | ||
"version", "1.0", | ||
"elasticsearch.version", Version.CURRENT.toString(), | ||
"java.version", System.getProperty("java.specification.version"), | ||
"classname", classname); | ||
} | ||
|
||
|
||
public void testPluginsDirMissing() throws Exception { | ||
Environment env = createEnv(); | ||
Files.delete(env.pluginsFile()); | ||
IOException e = expectThrows(IOException.class, () -> { | ||
listPlugins(env); | ||
}); | ||
assertTrue(e.getMessage(), e.getMessage().contains("Plugins directory missing")); | ||
assertEquals(e.getMessage(), "Plugins directory missing: " + env.pluginsFile()); | ||
} | ||
|
||
public void testNoPlugins() throws Exception { | ||
|
@@ -66,18 +89,63 @@ public void testNoPlugins() throws Exception { | |
|
||
public void testOnePlugin() throws Exception { | ||
Environment env = createEnv(); | ||
Files.createDirectory(env.pluginsFile().resolve("fake")); | ||
buildFakePlugin(env, "fake desc", "fake", "org.fake"); | ||
MockTerminal terminal = listPlugins(env); | ||
assertTrue(terminal.getOutput(), terminal.getOutput().contains("fake")); | ||
assertEquals(terminal.getOutput(), buildMultiline("fake")); | ||
} | ||
|
||
public void testTwoPlugins() throws Exception { | ||
Environment env = createEnv(); | ||
Files.createDirectory(env.pluginsFile().resolve("fake1")); | ||
Files.createDirectory(env.pluginsFile().resolve("fake2")); | ||
buildFakePlugin(env, "fake desc", "fake1", "org.fake"); | ||
buildFakePlugin(env, "fake desc 2", "fake2", "org.fake"); | ||
MockTerminal terminal = listPlugins(env); | ||
assertEquals(terminal.getOutput(), buildMultiline("fake1", "fake2")); | ||
} | ||
|
||
public void testPluginWithVerbose() throws Exception { | ||
Environment env = createEnv(); | ||
buildFakePlugin(env, "fake desc", "fake_plugin", "org.fake"); | ||
String[] params = { "-v" }; | ||
MockTerminal terminal = listPlugins(env, params); | ||
assertEquals(terminal.getOutput(), buildMultiline("Plugins directory: " + env.pluginsFile(), "fake_plugin", | ||
"- Plugin information:", "Name: fake_plugin", "Description: fake desc", "Version: 1.0", " * Classname: org.fake")); | ||
} | ||
|
||
public void testPluginWithVerboseMultiplePlugins() throws Exception { | ||
Environment env = createEnv(); | ||
buildFakePlugin(env, "fake desc 1", "fake_plugin1", "org.fake"); | ||
buildFakePlugin(env, "fake desc 2", "fake_plugin2", "org.fake2"); | ||
String[] params = { "-v" }; | ||
MockTerminal terminal = listPlugins(env, params); | ||
assertEquals(terminal.getOutput(), buildMultiline("Plugins directory: " + env.pluginsFile(), | ||
"fake_plugin1", "- Plugin information:", "Name: fake_plugin1", "Description: fake desc 1", "Version: 1.0", | ||
" * Classname: org.fake", "fake_plugin2", "- Plugin information:", "Name: fake_plugin2", | ||
"Description: fake desc 2", "Version: 1.0", " * Classname: org.fake2")); | ||
} | ||
|
||
public void testPluginWithoutVerboseMultiplePlugins() throws Exception { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think this test adds anything over the existing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we assert both things in the other tests, matching the verbose and non-verbose output? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think that the both kinds of tests (verbose and non-verbose) should specify exactly what the output is. Note that as written the non-verbose tests would pass even if the production code was changed to always output the verbose output. So, the output would be wrong but the test would not fail. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Got it! Good idea. |
||
Environment env = createEnv(); | ||
buildFakePlugin(env, "fake desc 1", "fake_plugin1", "org.fake"); | ||
buildFakePlugin(env, "fake desc 2", "fake_plugin2", "org.fake2"); | ||
MockTerminal terminal = listPlugins(env, new String[0]); | ||
String output = terminal.getOutput(); | ||
assertTrue(output, output.contains("fake1")); | ||
assertTrue(output, output.contains("fake2")); | ||
assertEquals(output, buildMultiline("fake_plugin1", "fake_plugin2")); | ||
} | ||
|
||
public void testPluginWithoutDescriptorFile() throws Exception{ | ||
Environment env = createEnv(); | ||
Files.createDirectories(env.pluginsFile().resolve("fake1")); | ||
NoSuchFileException e = expectThrows(NoSuchFileException.class, () -> listPlugins(env)); | ||
assertEquals(e.getFile(), env.pluginsFile().resolve("fake1").resolve(PluginInfo.ES_PLUGIN_PROPERTIES).toString()); | ||
} | ||
|
||
public void testPluginWithWrongDescriptorFile() throws Exception{ | ||
Environment env = createEnv(); | ||
PluginTestUtil.writeProperties(env.pluginsFile().resolve("fake1"), | ||
"description", "fake desc"); | ||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> listPlugins(env)); | ||
assertEquals(e.getMessage(), "Property [name] is missing in [" + | ||
env.pluginsFile().resolve("fake1").resolve(PluginInfo.ES_PLUGIN_PROPERTIES).toString() + "]"); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There should be a newline here between the brace closing the method and the brace closing the class. |
||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This also needs a test for the exceptional case (exception during reading).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added.