浏览代码

Add plugin information for Verbose mode

Relates #18051
Gabriel Moskovicz 9 年之前
父节点
当前提交
0660386976

+ 2 - 0
core/src/main/java/org/elasticsearch/plugins/ListPluginsCommand.java

@@ -51,6 +51,8 @@ class ListPluginsCommand extends Command {
         try (DirectoryStream<Path> stream = Files.newDirectoryStream(env.pluginsFile())) {
             for (Path plugin : stream) {
                 terminal.println(plugin.getFileName().toString());
+                PluginInfo info = PluginInfo.readFromProperties(env.pluginsFile().resolve(plugin.toAbsolutePath()));
+                terminal.println(Terminal.Verbosity.VERBOSE, info.toString());
             }
         }
     }

+ 76 - 8
qa/evil-tests/src/test/java/org/elasticsearch/plugins/ListPluginsCommandTests.java

@@ -19,9 +19,13 @@
 
 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;
@@ -29,6 +33,7 @@ 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,12 +48,30 @@ public class ListPluginsCommandTests extends ESTestCase {
     }
 
     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();
@@ -56,7 +79,7 @@ public class ListPluginsCommandTests extends ESTestCase {
         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 class ListPluginsCommandTests extends ESTestCase {
 
     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 {
+        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() + "]");
     }
+    
 }