Skip to content

Commit 76eca4d

Browse files
committed
use RPC for "config get" and add test cases
1 parent f3bf168 commit 76eca4d

File tree

2 files changed

+54
-21
lines changed

2 files changed

+54
-21
lines changed

internal/cli/config/get.go

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,11 @@ import (
2929
func initGetCommand() *cobra.Command {
3030
getCommand := &cobra.Command{
3131
Use: "get",
32-
Short: tr("Gets a setting value."),
33-
Long: tr("Gets a setting value."),
32+
Short: tr("Gets settings key values."),
33+
Long: tr("Gets settings key values."),
3434
Example: "" +
35-
" " + os.Args[0] + " config get logging.level\n" +
36-
" " + os.Args[0] + " config get logging.file\n" +
37-
" " + os.Args[0] + " config get sketch.always_export_binaries\n" +
35+
" " + os.Args[0] + " config get logging\n" +
36+
" " + os.Args[0] + " config get logging.level logging.file\n" +
3837
" " + os.Args[0] + " config get board_manager.additional_urls",
3938
Args: cobra.MinimumNArgs(1),
4039
Run: runGetCommand,
@@ -47,24 +46,15 @@ func initGetCommand() *cobra.Command {
4746

4847
func runGetCommand(cmd *cobra.Command, args []string) {
4948
logrus.Info("Executing `arduino-cli config get`")
50-
key := args[0]
51-
kind := validateKey(key)
5249

53-
if kind != reflect.Slice && len(args) > 1 {
54-
feedback.Fatal(tr("Can't get multiple key values"), feedback.ErrGeneric)
50+
svc := daemon.ArduinoCoreServerImpl{}
51+
for _, toGet := range args {
52+
resp, err := svc.SettingsGetValue(cmd.Context(), &rpc.SettingsGetValueRequest{Key: toGet})
53+
if err != nil {
54+
feedback.Fatal(tr("Cannot get the key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric)
55+
}
56+
feedback.PrintResult(resp.GetJsonData())
5557
}
56-
57-
var value interface{}
58-
switch kind {
59-
case reflect.Slice:
60-
value = configuration.Settings.GetStringSlice(key)
61-
case reflect.String:
62-
value = configuration.Settings.GetString(key)
63-
case reflect.Bool:
64-
value = configuration.Settings.GetBool(key)
65-
}
66-
67-
feedback.PrintResult(getResult{value})
6858
}
6959

7060
// output from this command may require special formatting.

internal/integrationtest/config/config_test.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,49 @@ func TestDelete(t *testing.T) {
818818
require.NotContains(t, configLines, "board_manager")
819819
}
820820

821+
func TestGet(t *testing.T) {
822+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
823+
defer env.CleanUp()
824+
825+
// Create a config file
826+
_, _, err := cli.Run("config", "init", "--dest-dir", ".")
827+
require.NoError(t, err)
828+
829+
// Verifies default state
830+
stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml")
831+
require.NoError(t, err)
832+
requirejson.Query(t, stdout, ".config | .daemon | .port", `"50051"`)
833+
834+
// Get simple key value
835+
stdout, _, err = cli.Run("config", "get", "daemon.port", "--format", "json", "--config-file", "arduino-cli.yaml")
836+
require.NoError(t, err)
837+
require.Equal(t, `"50051"`, stdout)
838+
839+
// Get structured key value
840+
stdout, _, err = cli.Run("config", "get", "daemon", "--format", "json", "--config-file", "arduino-cli.yaml")
841+
require.NoError(t, err)
842+
require.Equal(t, `{"port":"50051"}`, stdout)
843+
844+
// Get multiple key values
845+
stdout, _, err = cli.Run("config", "get", "logging.format", "logging.level", "--format", "json", "--config-file", "arduino-cli.yaml")
846+
require.NoError(t, err)
847+
require.Equal(t,`"text"` + "\n" + `"info"`, stdout)
848+
849+
// Get undefined key
850+
stdout, _, err = cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
851+
require.Empty(t, stdout)
852+
require.Contains(t, err, "Cannot get key foo")
853+
854+
// Set undefined key
855+
_, _, err = cli.Run("config", "set", "foo", "bar", "--config-file", "arduino-cli.yaml")
856+
require.NoError(t, err)
857+
858+
// Get previously-undefined key
859+
stdout, _, err = cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
860+
require.NoError(t, err)
861+
require.Equal(t, `"bar"`, stdout)
862+
}
863+
821864
func TestInitializationOrderOfConfigThroughFlagAndEnv(t *testing.T) {
822865
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
823866
defer env.CleanUp()

0 commit comments

Comments
 (0)