Skip to content

Commit 65eb91d

Browse files
committed
Added integration tests
1 parent 93b2b86 commit 65eb91d

File tree

8 files changed

+193
-11
lines changed

8 files changed

+193
-11
lines changed

internal/integrationtest/monitor/monitor_test.go

+177-11
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ import (
2121
"testing"
2222

2323
"github.com/arduino/arduino-cli/internal/integrationtest"
24+
"github.com/arduino/go-paths-helper"
2425
"github.com/stretchr/testify/require"
2526
)
2627

28+
// returns a reader that tells the mocked monitor to exit
29+
func quitMonitor() io.Reader {
30+
// tells mocked monitor to exit
31+
return bytes.NewBufferString("QUIT\n")
32+
}
33+
2734
func TestMonitorConfigFlags(t *testing.T) {
2835
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
2936
defer env.CleanUp()
@@ -38,14 +45,8 @@ func TestMonitorConfigFlags(t *testing.T) {
3845
cli.InstallMockedSerialDiscovery(t)
3946
cli.InstallMockedSerialMonitor(t)
4047

41-
// Test monitor command
42-
quit := func() io.Reader {
43-
// tells mocked monitor to exit
44-
return bytes.NewBufferString("QUIT\n")
45-
}
46-
4748
t.Run("NoArgs", func(t *testing.T) {
48-
stdout, _, err := cli.RunWithCustomInput(quit(), "monitor", "-p", "/dev/ttyARG", "--raw")
49+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "--raw")
4950
require.NoError(t, err)
5051
require.Contains(t, string(stdout), "Opened port: /dev/ttyARG")
5152
require.Contains(t, string(stdout), "Configuration baudrate = 9600")
@@ -54,7 +55,7 @@ func TestMonitorConfigFlags(t *testing.T) {
5455
})
5556

5657
t.Run("BaudConfig", func(t *testing.T) {
57-
stdout, _, err := cli.RunWithCustomInput(quit(), "monitor", "-p", "/dev/ttyARG", "-c", "baudrate=115200", "--raw")
58+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "-c", "baudrate=115200", "--raw")
5859
require.NoError(t, err)
5960
require.Contains(t, string(stdout), "Opened port: /dev/ttyARG")
6061
require.Contains(t, string(stdout), "Configuration baudrate = 115200")
@@ -64,7 +65,7 @@ func TestMonitorConfigFlags(t *testing.T) {
6465
})
6566

6667
t.Run("BaudAndParitfyConfig", func(t *testing.T) {
67-
stdout, _, err := cli.RunWithCustomInput(quit(), "monitor", "-p", "/dev/ttyARG",
68+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG",
6869
"-c", "baudrate=115200", "-c", "parity=even", "--raw")
6970
require.NoError(t, err)
7071
require.Contains(t, string(stdout), "Opened port: /dev/ttyARG")
@@ -75,16 +76,181 @@ func TestMonitorConfigFlags(t *testing.T) {
7576
})
7677

7778
t.Run("InvalidConfigKey", func(t *testing.T) {
78-
_, stderr, err := cli.RunWithCustomInput(quit(), "monitor", "-p", "/dev/ttyARG",
79+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG",
7980
"-c", "baud=115200", "-c", "parity=even", "--raw")
8081
require.Error(t, err)
8182
require.Contains(t, string(stderr), "invalid port configuration: baud=115200")
8283
})
8384

8485
t.Run("InvalidConfigValue", func(t *testing.T) {
85-
_, stderr, err := cli.RunWithCustomInput(quit(), "monitor", "-p", "/dev/ttyARG",
86+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG",
8687
"-c", "parity=9600", "--raw")
8788
require.Error(t, err)
8889
require.Contains(t, string(stderr), "invalid port configuration value for parity: 9600")
8990
})
9091
}
92+
93+
func TestMonitorCommandFlagsAndDefaultPortFQBNSelection(t *testing.T) {
94+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
95+
defer env.CleanUp()
96+
97+
// Install AVR platform
98+
_, _, err := cli.Run("core", "install", "arduino:[email protected]")
99+
require.NoError(t, err)
100+
101+
// Patch the Yun board to require special RTS/DTR serial configuration
102+
f, err := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "boards.txt").Append()
103+
require.NoError(t, err)
104+
_, err = f.WriteString(`
105+
uno.serial.disableRTS=true
106+
uno.serial.disableDTR=false
107+
yun.serial.disableRTS=true
108+
yun.serial.disableDTR=true
109+
`)
110+
require.NoError(t, err)
111+
require.NoError(t, f.Close())
112+
113+
// Install mocked discovery and monitor for testing
114+
cli.InstallMockedSerialDiscovery(t)
115+
cli.InstallMockedSerialMonitor(t)
116+
117+
// Create test sketches
118+
getSketchPath := func(sketch string) string {
119+
p, err := paths.New("testdata", sketch).Abs()
120+
require.NoError(t, err)
121+
require.True(t, p.IsDir())
122+
return p.String()
123+
}
124+
sketch := getSketchPath("SketchWithNoProfiles")
125+
sketchWithPort := getSketchPath("SketchWithDefaultPort")
126+
sketchWithFQBN := getSketchPath("SketchWithDefaultFQBN")
127+
sketchWithPortAndFQBN := getSketchPath("SketchWithDefaultPortAndFQBN")
128+
129+
t.Run("NoFlags", func(t *testing.T) {
130+
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
131+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketch)
132+
require.Error(t, err)
133+
require.Contains(t, string(stderr), "No monitor available for the port protocol default")
134+
})
135+
136+
t.Run("WithDefaultPort", func(t *testing.T) {
137+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPort)
138+
require.NoError(t, err)
139+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
140+
require.Contains(t, string(stdout), "Configuration rts = on")
141+
require.Contains(t, string(stdout), "Configuration dtr = on")
142+
})
143+
144+
t.Run("WithDefaultFQBN", func(t *testing.T) {
145+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithFQBN)
146+
require.Error(t, err)
147+
require.Contains(t, string(stderr), "No monitor available for the port protocol default")
148+
})
149+
150+
t.Run("WithDefaultPortAndQBN", func(t *testing.T) {
151+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndFQBN)
152+
require.NoError(t, err)
153+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
154+
require.Contains(t, string(stdout), "Configuration rts = off")
155+
require.Contains(t, string(stdout), "Configuration dtr = off")
156+
})
157+
})
158+
159+
t.Run("WithPortFlag", func(t *testing.T) {
160+
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
161+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketch)
162+
require.NoError(t, err)
163+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
164+
require.Contains(t, string(stdout), "Configuration rts = on")
165+
require.Contains(t, string(stdout), "Configuration dtr = on")
166+
})
167+
168+
t.Run("WithDefaultPort", func(t *testing.T) {
169+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPort)
170+
require.NoError(t, err)
171+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
172+
require.Contains(t, string(stdout), "Configuration rts = on")
173+
require.Contains(t, string(stdout), "Configuration dtr = on")
174+
})
175+
176+
t.Run("WithDefaultFQBN", func(t *testing.T) {
177+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithFQBN)
178+
require.NoError(t, err)
179+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
180+
require.Contains(t, string(stdout), "Configuration rts = off")
181+
require.Contains(t, string(stdout), "Configuration dtr = off")
182+
})
183+
184+
t.Run("WithDefaultPortAndQBN", func(t *testing.T) {
185+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndFQBN)
186+
require.NoError(t, err)
187+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
188+
require.Contains(t, string(stdout), "Configuration rts = off")
189+
require.Contains(t, string(stdout), "Configuration dtr = off")
190+
})
191+
})
192+
193+
t.Run("WithFQBNFlag", func(t *testing.T) {
194+
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
195+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketch)
196+
require.Error(t, err)
197+
require.Contains(t, string(stderr), "No monitor available for the port protocol default")
198+
})
199+
200+
t.Run("WithDefaultPort", func(t *testing.T) {
201+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPort)
202+
require.NoError(t, err)
203+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
204+
require.Contains(t, string(stdout), "Configuration rts = off")
205+
require.Contains(t, string(stdout), "Configuration dtr = on")
206+
})
207+
208+
t.Run("WithDefaultFQBN", func(t *testing.T) {
209+
_, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN)
210+
require.Error(t, err)
211+
require.Contains(t, string(stderr), "No monitor available for the port protocol default")
212+
})
213+
214+
t.Run("WithDefaultPortAndQBN", func(t *testing.T) {
215+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN)
216+
require.NoError(t, err)
217+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
218+
require.Contains(t, string(stdout), "Configuration rts = off")
219+
require.Contains(t, string(stdout), "Configuration dtr = on")
220+
})
221+
})
222+
223+
t.Run("WithPortAndFQBNFlags", func(t *testing.T) {
224+
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
225+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketch)
226+
require.NoError(t, err)
227+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
228+
require.Contains(t, string(stdout), "Configuration rts = off")
229+
require.Contains(t, string(stdout), "Configuration dtr = on")
230+
})
231+
232+
t.Run("WithDefaultPort", func(t *testing.T) {
233+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPort)
234+
require.NoError(t, err)
235+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
236+
require.Contains(t, string(stdout), "Configuration rts = off")
237+
require.Contains(t, string(stdout), "Configuration dtr = on")
238+
})
239+
240+
t.Run("WithDefaultFQBN", func(t *testing.T) {
241+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN)
242+
require.NoError(t, err)
243+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
244+
require.Contains(t, string(stdout), "Configuration rts = off")
245+
require.Contains(t, string(stdout), "Configuration dtr = on")
246+
})
247+
248+
t.Run("WithDefaultPortAndQBN", func(t *testing.T) {
249+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN)
250+
require.NoError(t, err)
251+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
252+
require.Contains(t, string(stdout), "Configuration rts = off")
253+
require.Contains(t, string(stdout), "Configuration dtr = on")
254+
})
255+
})
256+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
default_fqbn: arduino:avr:yun
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
default_port: /dev/ttyDEF
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
default_port: /dev/ttyDEF
2+
default_fqbn: arduino:avr:yun
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}

0 commit comments

Comments
 (0)