-
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 1 commit
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 |
---|---|---|
|
@@ -51,6 +51,18 @@ protected void execute(Terminal terminal, OptionSet options) throws Exception { | |
try (DirectoryStream<Path> stream = Files.newDirectoryStream(env.pluginsFile())) { | ||
for (Path plugin : stream) { | ||
terminal.println(plugin.getFileName().toString()); | ||
PluginInfo info = null; | ||
try { | ||
info = PluginInfo.readFromProperties(env.pluginsFile().resolve(plugin.toAbsolutePath())); | ||
terminal.println(Terminal.Verbosity.VERBOSE, info.toString()); | ||
} | ||
catch(IOException ex) { | ||
terminal.println(Terminal.Verbosity.VERBOSE, "Plugin properties file missing for plugin"); | ||
} | ||
catch (Exception ex){ | ||
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 dont think we should add leniency here. This will only hide the actual problem. Let the exception propagate. 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. This exception should immediately bubble up to the user. Catch it, add which plugin it died on with this as the cause and throw. |
||
terminal.println(Terminal.Verbosity.VERBOSE, "Unable to retrieve plugin information." | ||
+ " Please verify that this plugin is compatible with your current version"); | ||
} | ||
} | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,15 +20,19 @@ | |
package org.elasticsearch.plugins; | ||
|
||
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. 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 commentThe reason will be displayed to describe this comment to others. Learn more. Added. |
||
import java.io.IOException; | ||
import java.nio.charset.Charset; | ||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
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,13 +47,17 @@ 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; | ||
} | ||
|
||
|
||
public void testPluginsDirMissing() throws Exception { | ||
Environment env = createEnv(); | ||
Files.delete(env.pluginsFile()); | ||
|
@@ -80,4 +88,38 @@ public void testTwoPlugins() throws Exception { | |
assertTrue(output, output.contains("fake1")); | ||
assertTrue(output, output.contains("fake2")); | ||
} | ||
|
||
public void testPluginWithVerbose() throws Exception { | ||
Environment env = createEnv(); | ||
Files.createDirectory(env.pluginsFile().resolve("fake1")); | ||
Path configFile = Files.createFile(env.pluginsFile().resolve("fake1").resolve(PluginInfo.ES_PLUGIN_PROPERTIES)); | ||
List<String> config = Arrays.asList("description=fake plugin", | ||
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 is a test helper method that can create plugin property files 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. @rjernst can you point me to the helper class/method? 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 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 are other methods in InstallPluginCommandTests that could potentially be useful if we wanted to share them. |
||
"version=" + Version.CURRENT.toString(), "name=fake_plugin", "name=fake_plugin", | ||
"elasticsearch.version=" + Version.CURRENT.toString(), "java.version=1.8", "classname=org.fake"); | ||
Files.write(configFile, config, Charset.forName("UTF-8")); | ||
String[] params = { "-v" }; | ||
MockTerminal terminal = listPlugins(env, params); | ||
String output = terminal.getOutput(); | ||
assertTrue(output, output.contains("Plugin information")); | ||
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. We will need stronger assertions here too. |
||
} | ||
|
||
public void testPluginWithVerboseMultiplePlugins() throws Exception { | ||
Environment env = createEnv(); | ||
Files.createDirectory(env.pluginsFile().resolve("fake1")); | ||
Files.createDirectory(env.pluginsFile().resolve("fake2")); | ||
Files.createDirectory(env.pluginsFile().resolve("fake3")); | ||
Path configFile = Files.createFile(env.pluginsFile().resolve("fake1").resolve(PluginInfo.ES_PLUGIN_PROPERTIES)); | ||
Path configFile2 = Files.createFile(env.pluginsFile().resolve("fake2").resolve(PluginInfo.ES_PLUGIN_PROPERTIES)); | ||
Path configFile3 = Files.createFile(env.pluginsFile().resolve("fake3").resolve(PluginInfo.ES_PLUGIN_PROPERTIES)); | ||
List<String> config = Arrays.asList("description=fake plugin", | ||
"version=" + Version.CURRENT.toString(), "name=fake_plugin", "name=fake_plugin", | ||
"elasticsearch.version=" + Version.CURRENT.toString(), "java.version=1.8", "classname=org.fake"); | ||
Files.write(configFile, config, Charset.forName("UTF-8")); | ||
Files.write(configFile2, config, Charset.forName("UTF-8")); | ||
Files.write(configFile3, config, Charset.forName("UTF-8")); | ||
String[] params = { "-v" }; | ||
MockTerminal terminal = listPlugins(env, params); | ||
String output = terminal.getOutput(); | ||
assertTrue(output, output.split("Plugin information").length == 4); | ||
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. The assertions here need to stronger than this. 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 like assertThat(output.split("Plugin information"), arrayWithSize(4)); That comment applies to all uses of 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 disagree with this comment. I think using assertTrue and assertFalse is just fine. The message is not useless when you add eg the output like is done here. No matter what the message says, someone looking into a test failure needs to look at the test. 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. Maybe i can change all the messages from the class? I was actually trying to follow the convention on the existing tests in this class. Although it seems that this class was using old/wrong formats? 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.
This I disagree with. The output is just the contents of
This I agree with. 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 will change some of the assertions to use assertEquals. The message is actually much better than assert True. |
||
} | ||
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 is not necessary, I think the file not found is explicit enough (and no different than a user would see when actually starting elasticsearch).
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.
I also don't think we need a separate catch here. Also, not all IOException are because of file not found.