github.com/robgonnella/ardi/v2@v2.4.5-0.20230102052001-11a49de978c3/core/upload_test.go (about)

     1  package core_test
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  
     8  	rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
     9  	"github.com/golang/mock/gomock"
    10  	"github.com/robgonnella/ardi/v2/testutil"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestUploadCore(t *testing.T) {
    15  	testutil.RunUnitTest("returns nil on success ", t, func(env *testutil.UnitTestEnv) {
    16  		connectedBoard := testutil.GenerateRPCBoard("someboard", "somefqbn")
    17  		rpcPort := &rpc.Port{
    18  			Address: connectedBoard.Port,
    19  		}
    20  		projectDir := testutil.BlinkProjectDir()
    21  
    22  		instance := &rpc.Instance{Id: int32(1)}
    23  		req := &rpc.UploadRequest{
    24  			Instance:   instance,
    25  			Fqbn:       connectedBoard.FQBN,
    26  			Port:       rpcPort,
    27  			SketchPath: projectDir,
    28  			Verbose:    true,
    29  		}
    30  
    31  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance).AnyTimes()
    32  		env.ArduinoCli.EXPECT().Upload(gomock.Any(), req, gomock.Any(), gomock.Any())
    33  
    34  		err := env.ArdiCore.Uploader.Upload(connectedBoard, projectDir)
    35  		assert.Nil(env.T, err)
    36  	})
    37  
    38  	testutil.RunUnitTest("returns upload error", t, func(env *testutil.UnitTestEnv) {
    39  		board := testutil.GenerateRPCBoard("whatever", "fqbn")
    40  		rpcPort := &rpc.Port{
    41  			Address: board.Port,
    42  		}
    43  		dummyErr := errors.New("dummy error")
    44  		projectDir := testutil.BlinkProjectDir()
    45  
    46  		instance := &rpc.Instance{Id: int32(1)}
    47  		req := &rpc.UploadRequest{
    48  			Instance:   instance,
    49  			Fqbn:       board.FQBN,
    50  			Port:       rpcPort,
    51  			SketchPath: projectDir,
    52  			Verbose:    true,
    53  		}
    54  
    55  		env.ArduinoCli.EXPECT().CreateInstance().Return(instance).AnyTimes()
    56  		env.ArduinoCli.EXPECT().Upload(gomock.Any(), req, gomock.Any(), gomock.Any()).Return(nil, dummyErr)
    57  
    58  		err := env.ArdiCore.Uploader.Upload(board, projectDir)
    59  		assert.EqualError(env.T, err, dummyErr.Error())
    60  	})
    61  
    62  	testutil.RunUnitTest("attaches to board port to print logs", t, func(env *testutil.UnitTestEnv) {
    63  		device := "/dev/null"
    64  		baud := 9600
    65  
    66  		env.SerialPort.EXPECT().SetTargets(device, baud).MaxTimes(1)
    67  		env.SerialPort.EXPECT().Close().MaxTimes(1)
    68  		env.SerialPort.EXPECT().Watch().MaxTimes(1)
    69  
    70  		env.ArdiCore.Uploader.SetPortTargets(device, baud)
    71  		env.ArdiCore.Uploader.Attach()
    72  	})
    73  
    74  	testutil.RunUnitTest("detaches from board port", t, func(env *testutil.UnitTestEnv) {
    75  		device := "/dev/null"
    76  		baud := 9600
    77  
    78  		env.SerialPort.EXPECT().SetTargets(device, baud).MaxTimes(1)
    79  		env.SerialPort.EXPECT().SetTargets("", 0).MaxTimes(1)
    80  		env.SerialPort.EXPECT().Close().MaxTimes(1)
    81  		env.SerialPort.EXPECT().Watch().MaxTimes(1)
    82  
    83  		env.ArdiCore.Uploader.SetPortTargets(device, baud)
    84  		go env.ArdiCore.Uploader.Attach()
    85  
    86  		time.Sleep(time.Second)
    87  		env.ArdiCore.Uploader.Detach()
    88  	})
    89  }