Skip to content

Commit 1522588

Browse files
committed
config/git: unmarshal JSON RPC response
1 parent aa6dee6 commit 1522588

File tree

2 files changed

+19
-32
lines changed

2 files changed

+19
-32
lines changed

Diff for: internal/cli/config/get.go

+14-13
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package config
1717

1818
import (
19+
"encoding/json"
20+
"fmt"
1921
"os"
2022

2123
"github.com/arduino/arduino-cli/commands/daemon"
@@ -29,11 +31,11 @@ import (
2931
func initGetCommand() *cobra.Command {
3032
getCommand := &cobra.Command{
3133
Use: "get",
32-
Short: tr("Gets settings key values."),
33-
Long: tr("Gets settings key values."),
34+
Short: tr("Gets a settings key value."),
35+
Long: tr("Gets a settings key value."),
3436
Example: "" +
3537
" " + os.Args[0] + " config get logging\n" +
36-
" " + os.Args[0] + " config get logging.level logging.file\n" +
38+
" " + os.Args[0] + " config get daemon.port\n" +
3739
" " + os.Args[0] + " config get board_manager.additional_urls",
3840
Args: cobra.MinimumNArgs(1),
3941
Run: runGetCommand,
@@ -53,27 +55,26 @@ func runGetCommand(cmd *cobra.Command, args []string) {
5355
if err != nil {
5456
feedback.Fatal(tr("Cannot get the key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric)
5557
}
56-
feedback.PrintResult(getResult{key: toGet, data: resp.GetJsonData()})
58+
var result getResult
59+
err = json.Unmarshal([]byte(resp.GetJsonData()), &result.resp)
60+
if err != nil {
61+
feedback.Fatal(tr("Cannot parse JSON for key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric)
62+
}
63+
feedback.PrintResult(result)
5764
}
5865
}
5966

6067
// output from this command may require special formatting.
6168
// create a dedicated feedback.Result implementation to safely handle
6269
// any changes to the configuration.Settings struct.
6370
type getResult struct {
64-
key string
65-
data interface{}
71+
resp interface{}
6672
}
6773

6874
func (gr getResult) Data() interface{} {
69-
return gr.data
75+
return gr.resp
7076
}
7177

7278
func (gr getResult) String() string {
73-
gs, ok := gr.data.(string)
74-
if !ok {
75-
// Should never happen
76-
panic(tr("Cannot get key %s value as string: %v", gr.key, gr.data))
77-
}
78-
return gs
79+
return fmt.Sprintf("%v", gr.resp)
7980
}

Diff for: internal/integrationtest/config/config_test.go

+5-19
Original file line numberDiff line numberDiff line change
@@ -834,31 +834,17 @@ func TestGet(t *testing.T) {
834834
// Get simple key value
835835
stdout, _, err = cli.Run("config", "get", "daemon.port", "--format", "json", "--config-file", "arduino-cli.yaml")
836836
require.NoError(t, err)
837-
require.Equal(t, `"50051"`, stdout)
837+
requirejson.Contains(t, stdout, `"50051"`)
838838

839839
// Get structured key value
840840
stdout, _, err = cli.Run("config", "get", "daemon", "--format", "json", "--config-file", "arduino-cli.yaml")
841841
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)
842+
requirejson.Contains(t, stdout, `{"port":"50051"}`)
848843

849844
// 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)
845+
_, stderr, err := cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
846+
require.Error(t, err)
847+
requirejson.Contains(t, stderr, `{"error":"Cannot get the key foo: key not found in settings"}`)
862848
}
863849

864850
func TestInitializationOrderOfConfigThroughFlagAndEnv(t *testing.T) {

0 commit comments

Comments
 (0)