This is an automated email from the ASF dual-hosted git repository.

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 3a48abad1b [#6220] improve(CLI):  Clean up GravitinoCommandLine class 
now it been refactored (#6227)
3a48abad1b is described below

commit 3a48abad1baafee28531519b6d2ff5c4d92c7c2e
Author: Lord of Abyss <[email protected]>
AuthorDate: Wed Jan 15 06:15:43 2025 +0800

    [#6220] improve(CLI):  Clean up GravitinoCommandLine class now it been 
refactored (#6227)
    
    ### What changes were proposed in this pull request?
    
    Clean up GravitinoCommandLine class now it been refactored
    
    ### Why are the changes needed?
    
    Fix: #6220
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    local ut test.
---
 .../apache/gravitino/cli/ColumnCommandHandler.java |  4 +-
 .../gravitino/cli/FilesetCommandHandler.java       |  4 +-
 .../apache/gravitino/cli/GravitinoCommandLine.java | 98 +---------------------
 .../apache/gravitino/cli/SimpleCommandHandler.java | 53 ++++++++++++
 .../apache/gravitino/cli/TestSimpleCommands.java   | 75 +++++++++++++++++
 5 files changed, 134 insertions(+), 100 deletions(-)

diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java
index 96f056c1a3..c0775dae96 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java
@@ -53,7 +53,7 @@ public class ColumnCommandHandler extends CommandHandler {
     this.command = command;
     this.ignore = ignore;
 
-    this.url = gravitinoCommandLine.getUrl();
+    this.url = getUrl(line);
     this.name = new FullName(line);
     this.metalake = name.getMetalakeName();
     this.catalog = name.getCatalogName();
@@ -65,7 +65,7 @@ public class ColumnCommandHandler extends CommandHandler {
   @Override
   protected void handle() {
     String userName = line.getOptionValue(GravitinoOptions.LOGIN);
-    Command.setAuthenticationMode(gravitinoCommandLine.getAuth(), userName);
+    Command.setAuthenticationMode(getAuth(line), userName);
 
     List<String> missingEntities = Lists.newArrayList();
     if (catalog == null) missingEntities.add(CommandEntities.CATALOG);
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/FilesetCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/FilesetCommandHandler.java
index 33fc1fe9ee..dce797294d 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/FilesetCommandHandler.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/FilesetCommandHandler.java
@@ -54,7 +54,7 @@ public class FilesetCommandHandler extends CommandHandler {
     this.command = command;
     this.ignore = ignore;
 
-    this.url = gravitinoCommandLine.getUrl();
+    this.url = getUrl(line);
     this.name = new FullName(line);
     this.metalake = name.getMetalakeName();
     this.catalog = name.getCatalogName();
@@ -65,7 +65,7 @@ public class FilesetCommandHandler extends CommandHandler {
   @Override
   protected void handle() {
     String userName = line.getOptionValue(GravitinoOptions.LOGIN);
-    Command.setAuthenticationMode(gravitinoCommandLine.getAuth(), userName);
+    Command.setAuthenticationMode(getAuth(line), userName);
 
     List<String> missingEntities = Lists.newArrayList();
     if (catalog == null) missingEntities.add(CommandEntities.CATALOG);
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
index 1173720606..d7e257a8a8 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
@@ -19,13 +19,11 @@
 
 package org.apache.gravitino.cli;
 
-import com.google.common.base.Joiner;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
-import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
@@ -37,18 +35,13 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
   private final Options options;
   private final String entity;
   private final String command;
-  private String urlEnv;
-  private boolean urlSet = false;
   private boolean ignore = false;
   private String ignoreEnv;
   private boolean ignoreSet = false;
-  private String authEnv;
-  private boolean authSet = false;
 
   public static final String CMD = "gcli"; // recommended name
   public static final String DEFAULT_URL = "http://localhost:8090";;
   // This joiner is used to join multiple outputs to be displayed, e.g. roles 
or groups
-  private static final Joiner COMMA_JOINER = Joiner.on(", ").skipNulls();
 
   /**
    * Gravitino Command line.
@@ -97,14 +90,8 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     /* Display command usage. */
     if (line.hasOption(GravitinoOptions.HELP)) {
       displayHelp(options);
-    }
-    /* Display Gravitino client version. */
-    else if (line.hasOption(GravitinoOptions.VERSION)) {
-      newClientVersion(getUrl(), ignore).handle();
-    }
-    /* Display Gravitino server version. */
-    else if (line.hasOption(GravitinoOptions.SERVER)) {
-      newServerVersion(getUrl(), ignore).handle();
+    } else {
+      new SimpleCommandHandler(this, line, ignore).handle();
     }
   }
 
@@ -168,85 +155,4 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
       Main.exit(-1);
     }
   }
-
-  /**
-   * Retrieves the Gravitinno URL from the command line options or the 
GRAVITINO_URL environment
-   * variable or the Gravitio config file.
-   *
-   * @return The Gravitinno URL, or null if not found.
-   */
-  public String getUrl() {
-    GravitinoConfig config = new GravitinoConfig(null);
-
-    // If specified on the command line use that
-    if (line.hasOption(GravitinoOptions.URL)) {
-      return line.getOptionValue(GravitinoOptions.URL);
-    }
-
-    // Cache the Gravitino URL environment variable
-    if (urlEnv == null && !urlSet) {
-      urlEnv = System.getenv("GRAVITINO_URL");
-      urlSet = true;
-    }
-
-    // If set return the Gravitino URL environment variable
-    if (urlEnv != null) {
-      return urlEnv;
-    }
-
-    // Check if the Gravitino URL is specified in the configuration file
-    if (config.fileExists()) {
-      config.read();
-      String configURL = config.getGravitinoURL();
-      if (configURL != null) {
-        return configURL;
-      }
-    }
-
-    // Return the default localhost URL
-    return DEFAULT_URL;
-  }
-
-  /**
-   * Retrieves the Gravitinno authentication from the command line options or 
the GRAVITINO_AUTH
-   * environment variable or the Gravitio config file.
-   *
-   * @return The Gravitinno authentication, or null if not found.
-   */
-  public String getAuth() {
-    // If specified on the command line use that
-    if (line.hasOption(GravitinoOptions.SIMPLE)) {
-      return GravitinoOptions.SIMPLE;
-    }
-
-    // Cache the Gravitino authentication type environment variable
-    if (authEnv == null && !authSet) {
-      authEnv = System.getenv("GRAVITINO_AUTH");
-      authSet = true;
-    }
-
-    // If set return the Gravitino authentication type environment variable
-    if (authEnv != null) {
-      return authEnv;
-    }
-
-    // Check if the authentication type is specified in the configuration file
-    GravitinoConfig config = new GravitinoConfig(null);
-    if (config.fileExists()) {
-      config.read();
-      String configAuthType = config.getGravitinoAuthType();
-      if (configAuthType != null) {
-        return configAuthType;
-      }
-    }
-
-    return null;
-  }
-
-  private void checkEntities(List<String> entities) {
-    if (!entities.isEmpty()) {
-      System.err.println(ErrorMessages.MISSING_ENTITIES + 
COMMA_JOINER.join(entities));
-      Main.exit(-1);
-    }
-  }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/SimpleCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/SimpleCommandHandler.java
new file mode 100644
index 0000000000..48aca9f956
--- /dev/null
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/SimpleCommandHandler.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.cli;
+
+import org.apache.commons.cli.CommandLine;
+
+/** Handles the command execution for simple command based on the command line 
options. */
+public class SimpleCommandHandler extends CommandHandler {
+  private final GravitinoCommandLine gravitinoCommandLine;
+  private final CommandLine line;
+  private final boolean ignore;
+
+  /**
+   * Constructs a {@link SimpleCommandHandler} instance.
+   *
+   * @param gravitinoCommandLine The Gravitino command line instance.
+   * @param line The command line arguments.
+   * @param ignore Ignore server version mismatch.
+   */
+  public SimpleCommandHandler(
+      GravitinoCommandLine gravitinoCommandLine, CommandLine line, boolean 
ignore) {
+    this.gravitinoCommandLine = gravitinoCommandLine;
+    this.line = line;
+    this.ignore = ignore;
+  }
+
+  /** Handles the command execution logic based on the provided command. */
+  @Override
+  protected void handle() {
+    if (line.hasOption(GravitinoOptions.VERSION)) {
+      gravitinoCommandLine.newClientVersion(getUrl(line), 
ignore).validate().handle();
+    } else if (line.hasOption(GravitinoOptions.SERVER)) {
+      gravitinoCommandLine.newServerVersion(getUrl(line), 
ignore).validate().handle();
+    }
+  }
+}
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestSimpleCommands.java 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestSimpleCommands.java
new file mode 100644
index 0000000000..044e06c58f
--- /dev/null
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestSimpleCommands.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.cli;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.apache.gravitino.cli.commands.ClientVersion;
+import org.apache.gravitino.cli.commands.ServerVersion;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class TestSimpleCommands {
+
+  private CommandLine mockCommandLine;
+  private Options mockOptions;
+
+  @BeforeEach
+  void setUp() {
+    mockCommandLine = mock(CommandLine.class);
+    mockOptions = mock(Options.class);
+  }
+
+  @Test
+  void testServerVersion() {
+    ServerVersion mockServerVersion = mock(ServerVersion.class);
+    when(mockCommandLine.hasOption(GravitinoOptions.SERVER)).thenReturn(true);
+    GravitinoCommandLine commandLine =
+        spy(new GravitinoCommandLine(mockCommandLine, mockOptions, null, 
null));
+
+    doReturn(mockServerVersion)
+        .when(commandLine)
+        .newServerVersion(GravitinoCommandLine.DEFAULT_URL, false);
+    doReturn(mockServerVersion).when(mockServerVersion).validate();
+    commandLine.handleSimpleLine();
+    verify(mockServerVersion).handle();
+  }
+
+  @Test
+  void testClientVersion() {
+    ClientVersion mockClientVersion = mock(ClientVersion.class);
+    when(mockCommandLine.hasOption(GravitinoOptions.VERSION)).thenReturn(true);
+    GravitinoCommandLine commandLine =
+        spy(new GravitinoCommandLine(mockCommandLine, mockOptions, null, 
null));
+
+    doReturn(mockClientVersion)
+        .when(commandLine)
+        .newClientVersion(GravitinoCommandLine.DEFAULT_URL, false);
+    doReturn(mockClientVersion).when(mockClientVersion).validate();
+    commandLine.handleSimpleLine();
+    verify(mockClientVersion).handle();
+  }
+}

Reply via email to