This is an automated email from the ASF dual-hosted git repository. liuxun 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 af3930d0d [#5928] fix(CLI): Fix columns details command produces no output (#5945) af3930d0d is described below commit af3930d0d762f6c7ca18f1f8a9097f4c31ce7d8a Author: Lord of Abyss <103809695+abyss-l...@users.noreply.github.com> AuthorDate: Mon Dec 23 17:07:33 2024 +0800 [#5928] fix(CLI): Fix columns details command produces no output (#5945) ### What changes were proposed in this pull request? Fix columns details command produces no output, when command without --audit option, cli should tell user that command is not support. ### Why are the changes needed? Fix: #5928 ### Does this PR introduce _any_ user-facing change? NO ### How was this patch tested? local test. --- .../apache/gravitino/cli/GravitinoCommandLine.java | 3 ++ .../apache/gravitino/cli/TestColumnCommands.java | 47 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) 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 9545b2a66..bc825443e 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 @@ -777,6 +777,9 @@ public class GravitinoCommandLine extends TestableCommandLine { case CommandActions.DETAILS: if (line.hasOption(GravitinoOptions.AUDIT)) { newColumnAudit(url, ignore, metalake, catalog, schema, table, column).handle(); + } else { + System.err.println(ErrorMessages.UNSUPPORTED_ACTION); + Main.exit(-1); } break; diff --git a/clients/cli/src/test/java/org/apache/gravitino/cli/TestColumnCommands.java b/clients/cli/src/test/java/org/apache/gravitino/cli/TestColumnCommands.java index e26759e2d..2eb4c5364 100644 --- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestColumnCommands.java +++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestColumnCommands.java @@ -19,12 +19,18 @@ package org.apache.gravitino.cli; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.nio.charset.StandardCharsets; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Options; import org.apache.gravitino.cli.commands.AddColumn; @@ -38,17 +44,30 @@ import org.apache.gravitino.cli.commands.UpdateColumnDefault; import org.apache.gravitino.cli.commands.UpdateColumnName; import org.apache.gravitino.cli.commands.UpdateColumnNullability; import org.apache.gravitino.cli.commands.UpdateColumnPosition; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class TestColumnCommands { private CommandLine mockCommandLine; private Options mockOptions; + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + private final PrintStream originalErr = System.err; @BeforeEach void setUp() { mockCommandLine = mock(CommandLine.class); mockOptions = mock(Options.class); + System.setOut(new PrintStream(outContent)); + System.setErr(new PrintStream(errContent)); + } + + @AfterEach + public void restoreStreams() { + System.setOut(originalOut); + System.setErr(originalErr); } @Test @@ -98,6 +117,34 @@ class TestColumnCommands { verify(mockAudit).handle(); } + @Test + void testColumnDetailsCommand() { + Main.useExit = false; + when(mockCommandLine.hasOption(GravitinoOptions.METALAKE)).thenReturn(true); + when(mockCommandLine.getOptionValue(GravitinoOptions.METALAKE)).thenReturn("metalake_demo"); + when(mockCommandLine.hasOption(GravitinoOptions.NAME)).thenReturn(true); + when(mockCommandLine.getOptionValue(GravitinoOptions.NAME)) + .thenReturn("catalog.schema.users.name"); + GravitinoCommandLine commandLine = + spy( + new GravitinoCommandLine( + mockCommandLine, mockOptions, CommandEntities.COLUMN, CommandActions.DETAILS)); + + assertThrows(RuntimeException.class, commandLine::handleCommandLine); + verify(commandLine, never()) + .newColumnAudit( + GravitinoCommandLine.DEFAULT_URL, + false, + "metalake_demo", + "catalog", + "schema", + "users", + "name"); + + String output = new String(errContent.toByteArray(), StandardCharsets.UTF_8).trim(); + assertEquals(output, ErrorMessages.UNSUPPORTED_ACTION); + } + @Test void testAddColumn() { AddColumn mockAddColumn = mock(AddColumn.class);