Skip to content

Commit 5bd2978

Browse files
add tests
1 parent e0f033f commit 5bd2978

File tree

2 files changed

+229
-0
lines changed

2 files changed

+229
-0
lines changed

internal/integrationtest/core/core_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,3 +1083,64 @@ func TestCoreListWhenNoPlatformAreInstalled(t *testing.T) {
10831083
require.NoError(t, err)
10841084
require.Equal(t, "No platforms installed.\n", string(stdout))
10851085
}
1086+
1087+
func TestCoreHavingIncompatibleDepTools(t *testing.T) {
1088+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
1089+
defer env.CleanUp()
1090+
1091+
url := env.HTTPServeFile(8000, paths.New("..", "testdata", "test_index.json")).String()
1092+
additionalURLs := "--additional-urls=" + url
1093+
1094+
_, _, err := cli.Run("core", "update-index", additionalURLs)
1095+
require.NoError(t, err)
1096+
1097+
// check that list shows only compatible versions
1098+
stdout, _, err := cli.Run("core", "list", "--all", "--format", "json", additionalURLs)
1099+
require.NoError(t, err)
1100+
t.Log(string(stdout))
1101+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .latest`, `"1.0.2"`)
1102+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .latest_compatible`, `"1.0.1"`)
1103+
1104+
// install latest compatible version
1105+
_, _, err = cli.Run("core", "install", "foo_vendor:avr", additionalURLs)
1106+
require.NoError(t, err)
1107+
stdout, _, err = cli.Run("core", "list", "--all", "--format", "json", additionalURLs)
1108+
require.NoError(t, err)
1109+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .latest_compatible`, `"1.0.1"`)
1110+
1111+
// install incompatible version
1112+
_, stderr, err := cli.Run("core", "install", "foo_vendor:[email protected]", additionalURLs)
1113+
require.Error(t, err)
1114+
require.Contains(t, string(stderr), "no versions available for the current OS")
1115+
1116+
// install compatible version
1117+
_, _, err = cli.Run("core", "install", "foo_vendor:[email protected]", additionalURLs)
1118+
require.NoError(t, err)
1119+
stdout, _, err = cli.Run("core", "list", "--format", "json", additionalURLs)
1120+
require.NoError(t, err)
1121+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .installed`, `"1.0.0"`)
1122+
1123+
// Lists all updatable cores
1124+
stdout, _, err = cli.Run("core", "list", "--updatable", "--format", "json", additionalURLs)
1125+
require.NoError(t, err)
1126+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .latest_compatible`, `"1.0.1"`)
1127+
1128+
// upgrade to latest compatible (1.0.0 -> 1.0.1)
1129+
_, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--format", "json", additionalURLs)
1130+
require.NoError(t, err)
1131+
stdout, _, err = cli.Run("core", "list", "--format", "json", additionalURLs)
1132+
require.NoError(t, err)
1133+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .installed`, `"1.0.1"`)
1134+
1135+
// upgrade to latest incompatible not possible (1.0.1 -> 1.0.2)
1136+
_, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--format", "json", additionalURLs)
1137+
require.NoError(t, err)
1138+
stdout, _, err = cli.Run("core", "list", "--format", "json", additionalURLs)
1139+
require.NoError(t, err)
1140+
requirejson.Query(t, stdout, `.[] | select(.id == "foo_vendor:avr") | .installed`, `"1.0.1"`)
1141+
1142+
// When no compatible version are found return error
1143+
_, stderr, err = cli.Run("core", "install", "incompatible_vendor:avr", additionalURLs)
1144+
require.Error(t, err)
1145+
require.Contains(t, string(stderr), "has no available releases")
1146+
}

internal/integrationtest/testdata/test_index.json

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,174 @@
236236
]
237237
}
238238
]
239+
},
240+
{
241+
"name": "foo_vendor",
242+
"maintainer": "Foo Developer",
243+
"websiteURL": "http://example.com",
244+
"email": "[email protected]",
245+
"help": {
246+
"online": "http://example.com"
247+
},
248+
"platforms": [
249+
{
250+
"name": "Foo Boards",
251+
"architecture": "avr",
252+
"version": "1.0.0",
253+
"category": "Contributed",
254+
"help": {
255+
"online": "http://example.com"
256+
},
257+
"url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
258+
"archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
259+
"checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5",
260+
"size": "5005",
261+
"boards": [],
262+
"toolsDependencies": [
263+
{
264+
"packager": "foo_vendor",
265+
"name": "some_tool",
266+
"version": "1.0.0"
267+
}
268+
]
269+
},
270+
{
271+
"name": "Foo Boards",
272+
"architecture": "avr",
273+
"version": "1.0.1",
274+
"category": "Contributed",
275+
"help": {
276+
"online": "http://example.com"
277+
},
278+
"url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
279+
"archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
280+
"checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1",
281+
"size": "5719",
282+
"boards": [],
283+
"toolsDependencies": [
284+
{
285+
"packager": "foo_vendor",
286+
"name": "some_tool",
287+
"version": "1.0.0"
288+
}
289+
]
290+
},
291+
{
292+
"name": "Foo Boards",
293+
"architecture": "avr",
294+
"version": "1.0.2",
295+
"category": "Contributed",
296+
"help": {
297+
"online": "http://example.com"
298+
},
299+
"url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
300+
"archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
301+
"checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1",
302+
"size": "5719",
303+
"boards": [],
304+
"toolsDependencies": [
305+
{
306+
"packager": "foo_vendor",
307+
"name": "incompatible_tool",
308+
"version": "2.0.0"
309+
}
310+
]
311+
}
312+
],
313+
"tools": [
314+
{
315+
"name": "some_tool",
316+
"version": "1.0.0",
317+
"systems": [
318+
{
319+
"size": "219631",
320+
"checksum": "SHA-256:2a8e68c5d803aa6f902ef219f177ec3a4c28275d85cbe272962ad2cd374f50d1",
321+
"host": "arm-linux-gnueabihf",
322+
"archiveFileName": "avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2",
323+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2"
324+
},
325+
{
326+
"size": "229852",
327+
"checksum": "SHA-256:6cf948f751acfe7b96684537f2291c766ec8b54b4f7dc95539864821456fa9fc",
328+
"host": "aarch64-linux-gnu",
329+
"archiveFileName": "avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2",
330+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2"
331+
},
332+
{
333+
"size": "279045",
334+
"checksum": "SHA-256:120cc9edaae699e7e9ac50b1b8eb0e7d51fdfa555bac54233c2511e6ee5418c9",
335+
"host": "x86_64-apple-darwin12",
336+
"archiveFileName": "avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2",
337+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2"
338+
},
339+
{
340+
"size": "254271",
341+
"checksum": "SHA-256:accdfb920af2aabf4f7461d2ac73c0751760f525216dc4e7657427a78c60d13d",
342+
"host": "x86_64-linux-gnu",
343+
"archiveFileName": "avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2",
344+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2"
345+
},
346+
{
347+
"size": "244550",
348+
"checksum": "SHA-256:5c8cc6c17db9300e1451fe41cd7178b0442b4490ee6fdbc0aed9811aef96c05f",
349+
"host": "i686-linux-gnu",
350+
"archiveFileName": "avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2",
351+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2"
352+
},
353+
{
354+
"size": "328460",
355+
"checksum": "SHA-256:e99188873c7c5ad8f8f906f068c33600e758b2e36cce3adbd518a21bd266749d",
356+
"host": "i686-mingw32",
357+
"archiveFileName": "avrdude-6.3.0-arduino17-i686-w64-mingw32.zip",
358+
"url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-w64-mingw32.zip"
359+
}
360+
]
361+
},
362+
{
363+
"name": "incompatible_tool",
364+
"version": "2.0.0",
365+
"systems": []
366+
}
367+
]
368+
},
369+
{
370+
"name": "incompatible_vendor",
371+
"maintainer": "Incompatible Developer",
372+
"websiteURL": "http://example.com",
373+
"email": "[email protected]",
374+
"help": {
375+
"online": "http://example.com"
376+
},
377+
"platforms": [
378+
{
379+
"name": "Incompatible Boards",
380+
"architecture": "avr",
381+
"version": "1.0.0",
382+
"category": "Contributed",
383+
"help": {
384+
"online": "http://example.com"
385+
},
386+
"url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
387+
"archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
388+
"checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5",
389+
"size": "5005",
390+
"boards": [],
391+
"toolsDependencies": [
392+
{
393+
"packager": "incompatible_vendor",
394+
"name": "incompatible_tool",
395+
"version": "2.0.0"
396+
}
397+
]
398+
}
399+
],
400+
"tools": [
401+
{
402+
"name": "incompatible_tool",
403+
"version": "2.0.0",
404+
"systems": []
405+
}
406+
]
239407
}
240408
]
241409
}

0 commit comments

Comments
 (0)