From 695c85e1e5c08a02058ad2f8c422d9dcbb68eabd Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Wed, 12 Mar 2025 08:55:44 +0100 Subject: [PATCH 1/2] integrationtest: add dameon NewSketch tests --- internal/integrationtest/arduino-cli.go | 11 +++++++++++ internal/integrationtest/daemon/daemon_test.go | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/internal/integrationtest/arduino-cli.go b/internal/integrationtest/arduino-cli.go index 5236449d09a..f035e792f55 100644 --- a/internal/integrationtest/arduino-cli.go +++ b/internal/integrationtest/arduino-cli.go @@ -710,3 +710,14 @@ func (inst *ArduinoCLIInstance) BoardIdentify(ctx context.Context, props map[str resp, err := inst.cli.daemonClient.BoardIdentify(ctx, req) return resp, err } + +// NewSketch calls the "NewSketch" gRPC method. +func (inst *ArduinoCLIInstance) NewSketch(ctx context.Context, sketchName, sketchDir string, overwrite bool) (*commands.NewSketchResponse, error) { + req := &commands.NewSketchRequest{ + SketchName: sketchName, + SketchDir: sketchDir, + Overwrite: overwrite, + } + logCallf(">>> NewSketch(%+v)\n", req) + return inst.cli.daemonClient.NewSketch(ctx, req) +} diff --git a/internal/integrationtest/daemon/daemon_test.go b/internal/integrationtest/daemon/daemon_test.go index 53d39566d32..ae094a0d856 100644 --- a/internal/integrationtest/daemon/daemon_test.go +++ b/internal/integrationtest/daemon/daemon_test.go @@ -614,6 +614,22 @@ func TestDaemonUserAgent(t *testing.T) { } } +func TestDaemonCreateSketch(t *testing.T) { + // https://github.com/arduino/arduino-cli/issues/2861 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + sketchName := "test_sketch.ino" + _, err := grpcInst.NewSketch(context.Background(), sketchName, "", false) + require.NoError(t, err) +} + func analyzeUpdateIndexClient(t *testing.T, cl commands.ArduinoCoreService_UpdateIndexClient) (map[string]*commands.DownloadProgressEnd, error) { analyzer := NewDownloadProgressAnalyzer(t) for { From fc495daefb90e7d8e140012088706a05256d5a0d Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Wed, 12 Mar 2025 08:56:30 +0100 Subject: [PATCH 2/2] commands: fix panic when calling `NewSketch` with empty directories.user We were calling directly a function that lookup for user definied settings. In case an user did not set explictly the directory it would return an empty string causing a panic. Instead we should have used a dedicated function `UserDir` that uses a fallback the default directories.user --- commands/service_sketch_new.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commands/service_sketch_new.go b/commands/service_sketch_new.go index ca3143e31b9..8f02908637a 100644 --- a/commands/service_sketch_new.go +++ b/commands/service_sketch_new.go @@ -48,7 +48,7 @@ func (s *arduinoCoreServerImpl) NewSketch(ctx context.Context, req *rpc.NewSketc if len(req.GetSketchDir()) > 0 { sketchesDir = req.GetSketchDir() } else { - sketchesDir = s.settings.GetString("directories.User") + sketchesDir = s.settings.UserDir().String() } if err := validateSketchName(req.GetSketchName()); err != nil {