Skip to content

Commit 22e49ad

Browse files
committed
Added test to trigger conflicting-tools bug
As explained in #73
1 parent 090a50b commit 22e49ad

File tree

17 files changed

+14637
-0
lines changed

17 files changed

+14637
-0
lines changed

Diff for: arduino/cores/packagemanager/package_manager_test.go

+60
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,21 @@
1818
package packagemanager_test
1919

2020
import (
21+
"net/url"
2122
"testing"
2223

24+
"go.bug.st/relaxed-semver"
25+
26+
"github.com/arduino/arduino-cli/arduino/cores"
2327
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
28+
"github.com/arduino/arduino-cli/configs"
2429
"github.com/arduino/go-paths-helper"
2530
"github.com/arduino/go-properties-orderedmap"
2631
"github.com/stretchr/testify/require"
2732
)
2833

2934
var customHardware = paths.New("testdata", "custom_hardware")
35+
var dataDir1 = paths.New("testdata", "data_dir_1")
3036

3137
func TestFindBoardWithFQBN(t *testing.T) {
3238
pm := packagemanager.NewPackageManager(customHardware, customHardware, customHardware, customHardware)
@@ -79,3 +85,57 @@ func TestBoardOptionsFunctions(t *testing.T) {
7985
require.Equal(t, k, v)
8086
}
8187
}
88+
89+
func TestFindToolsRequiredForBoard(t *testing.T) {
90+
pm := packagemanager.NewPackageManager(
91+
dataDir1,
92+
dataDir1.Join("packages"),
93+
dataDir1.Join("staging"),
94+
dataDir1)
95+
conf := &configs.Configuration{
96+
DataDir: dataDir1,
97+
}
98+
loadIndex := func(addr string) {
99+
res, err := url.Parse(addr)
100+
require.NoError(t, err)
101+
require.NoError(t, pm.LoadPackageIndex(res))
102+
}
103+
loadIndex("https://dl.espressif.com/dl/package_esp32_index.json")
104+
loadIndex("http://arduino.esp8266.com/stable/package_esp8266com_index.json")
105+
require.NoError(t, pm.LoadHardware(conf))
106+
esp32, err := pm.FindBoardWithFQBN("esp32:esp32:esp32")
107+
require.NoError(t, err)
108+
esptool231 := pm.FindToolDependency(&cores.ToolDependency{
109+
ToolPackager: "esp32",
110+
ToolName: "esptool",
111+
ToolVersion: semver.ParseRelaxed("2.3.1"),
112+
})
113+
require.NotNil(t, esptool231)
114+
esptool0413 := pm.FindToolDependency(&cores.ToolDependency{
115+
ToolPackager: "esp8266",
116+
ToolName: "esptool",
117+
ToolVersion: semver.ParseRelaxed("0.4.13"),
118+
})
119+
require.NotNil(t, esptool0413)
120+
121+
testConflictingToolsInDifferentPackages := func() {
122+
tools, err := pm.FindToolsRequiredForBoard(esp32)
123+
require.NoError(t, err)
124+
require.Contains(t, tools, esptool231)
125+
require.NotContains(t, tools, esptool0413)
126+
}
127+
128+
// As seen in https://github.com/arduino/arduino-cli/issues/73 the map randomess
129+
// may make the function fail half of the times. Repeating the test 10 times
130+
// greatly increases the chances to trigger the bad case.
131+
testConflictingToolsInDifferentPackages()
132+
testConflictingToolsInDifferentPackages()
133+
testConflictingToolsInDifferentPackages()
134+
testConflictingToolsInDifferentPackages()
135+
testConflictingToolsInDifferentPackages()
136+
testConflictingToolsInDifferentPackages()
137+
testConflictingToolsInDifferentPackages()
138+
testConflictingToolsInDifferentPackages()
139+
testConflictingToolsInDifferentPackages()
140+
testConflictingToolsInDifferentPackages()
141+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
{
2+
"packages": [
3+
{
4+
"name": "esp32",
5+
"maintainer": "Espressif Systems",
6+
"websiteURL": "https://github.com/espressif/arduino-esp32",
7+
"email": "[email protected]",
8+
"help": {
9+
"online": "http://esp32.com"
10+
},
11+
"platforms": [
12+
{
13+
"name": "esp32",
14+
"architecture": "esp32",
15+
"version": "1.0.0",
16+
"category": "ESP32",
17+
"url": "https://github.com/espressif/arduino-esp32/releases/download/1.0.0/esp32-1.0.0.zip",
18+
"archiveFileName": "esp32-1.0.0.zip",
19+
"checksum": "SHA-256:94d586174f103e2014be590ab307c5cdda6fa2ec70204c7f121882ace5e05c80",
20+
"size": "26381887",
21+
"help": {
22+
"online": ""
23+
},
24+
"boards": [
25+
{
26+
"name": "ESP32 Dev Module"
27+
},
28+
{
29+
"name": "WEMOS LoLin32"
30+
}
31+
],
32+
"toolsDependencies": [
33+
{
34+
"packager": "esp32",
35+
"name": "xtensa-esp32-elf-gcc",
36+
"version": "1.22.0-80-g6c4433a-5.2.0"
37+
},
38+
{
39+
"packager": "esp32",
40+
"name": "esptool",
41+
"version": "2.3.1"
42+
},
43+
{
44+
"packager": "esp32",
45+
"name": "mkspiffs",
46+
"version": "0.2.3"
47+
}
48+
]
49+
}
50+
],
51+
"tools": [
52+
{
53+
"name": "xtensa-esp32-elf-gcc",
54+
"version": "1.22.0-80-g6c4433a-5.2.0",
55+
"systems": [
56+
{
57+
"host": "i686-mingw32",
58+
"url": "https://dl.espressif.com/dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip",
59+
"archiveFileName": "xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip",
60+
"checksum": "SHA-256:f217fccbeaaa8c92db239036e0d6202458de4488b954a3a38f35ac2ec48058a4",
61+
"size": "125719261"
62+
},
63+
{
64+
"host": "x86_64-apple-darwin",
65+
"url": "https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz",
66+
"archiveFileName": "xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz",
67+
"checksum": "SHA-256:a4307a97945d2f2f2745f415fbe80d727750e19f91f9a1e7e2f8a6065652f9da",
68+
"size": "46517409"
69+
},
70+
{
71+
"host": "x86_64-pc-linux-gnu",
72+
"url": "https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz",
73+
"archiveFileName": "xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz",
74+
"checksum": "SHA-256:3fe96c151d46c1d4e5edc6ed690851b8e53634041114bad04729bc16b0445156",
75+
"size": "44219107"
76+
},
77+
{
78+
"host": "i686-pc-linux-gnu",
79+
"url": "https://dl.espressif.com/dl/xtensa-esp32-elf-linux32-1.22.0-80-g6c4433a-5.2.0.tar.gz",
80+
"archiveFileName": "xtensa-esp32-elf-linux32-1.22.0-80-g6c4433a-5.2.0.tar.gz",
81+
"checksum": "SHA-256:b4055695ffc2dfc0bcb6dafdc2572a6e01151c4179ef5fa972b3fcb2183eb155",
82+
"size": "45566336"
83+
}
84+
]
85+
},
86+
{
87+
"name": "esptool",
88+
"version": "2.3.1",
89+
"systems": [
90+
{
91+
"host": "i686-mingw32",
92+
"url": "https://dl.espressif.com/dl/esptool-2.3.1-windows.zip",
93+
"archiveFileName": "esptool-2.3.1-windows.zip",
94+
"checksum": "SHA-256:c187763d0faac7da7c30a292a23c759bbc256fcd084dc8846ed284000cb0fe29",
95+
"size": "3396085"
96+
},
97+
{
98+
"host": "x86_64-apple-darwin",
99+
"url": "https://dl.espressif.com/dl/esptool-2.3.1-macos.tar.gz",
100+
"archiveFileName": "esptool-2.3.1-macos.tar.gz",
101+
"checksum": "SHA-256:cd922418f02e0ca11dc066b36a22646a1b441da00d762b4464ca598c902c5ecb",
102+
"size": "3810932"
103+
},
104+
{
105+
"host": "x86_64-pc-linux-gnu",
106+
"url": "https://dl.espressif.com/dl/esptool-2.3.1-linux.tar.gz",
107+
"archiveFileName": "esptool-2.3.1-linux.tar.gz",
108+
"checksum": "SHA-256:cff30841dad80ed5d7d2d58a31843b63afa57528979a9c839806568167691d8e",
109+
"size": "39563"
110+
},
111+
{
112+
"host": "i686-pc-linux-gnu",
113+
"url": "https://dl.espressif.com/dl/esptool-2.3.1-linux.tar.gz",
114+
"archiveFileName": "esptool-2.3.1-linux.tar.gz",
115+
"checksum": "SHA-256:cff30841dad80ed5d7d2d58a31843b63afa57528979a9c839806568167691d8e",
116+
"size": "39563"
117+
},
118+
{
119+
"host": "arm-linux-gnueabihf",
120+
"url": "https://dl.espressif.com/dl/esptool-2.3.1-linux.tar.gz",
121+
"archiveFileName": "esptool-2.3.1-linux.tar.gz",
122+
"checksum": "SHA-256:cff30841dad80ed5d7d2d58a31843b63afa57528979a9c839806568167691d8e",
123+
"size": "39563"
124+
}
125+
]
126+
},
127+
{
128+
"name": "mkspiffs",
129+
"version": "0.2.3",
130+
"systems": [
131+
{
132+
"host": "i686-mingw32",
133+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-win32.zip",
134+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-win32.zip",
135+
"checksum": "SHA-256:b647f2c2efe6949819c85ea9404271b55c7c9c25bcb98d3b98a1d0ba771adf56",
136+
"size": "249809"
137+
},
138+
{
139+
"host": "x86_64-apple-darwin",
140+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-osx.tar.gz",
141+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-osx.tar.gz",
142+
"checksum": "SHA-256:9f43fc74a858cf564966b5035322c3e5e61c31a647c5a1d71b388ed6efc48423",
143+
"size": "130270"
144+
},
145+
{
146+
"host": "i386-apple-darwin",
147+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-osx.tar.gz",
148+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-osx.tar.gz",
149+
"checksum": "SHA-256:9f43fc74a858cf564966b5035322c3e5e61c31a647c5a1d71b388ed6efc48423",
150+
"size": "130270"
151+
},
152+
{
153+
"host": "x86_64-pc-linux-gnu",
154+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-linux64.tar.gz",
155+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-linux64.tar.gz",
156+
"checksum": "SHA-256:5e1a4ff41385e842f389f6b5254102a547e566a06b49babeffa93ef37115cb5d",
157+
"size": "50646"
158+
},
159+
{
160+
"host": "i686-pc-linux-gnu",
161+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-linux32.tar.gz",
162+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-linux32.tar.gz",
163+
"checksum": "SHA-256:464463a93e8833209cdc29ba65e1a12fec31718dc10075c195a2445b2c3f6cb0",
164+
"size": "48751"
165+
},
166+
{
167+
"host": "arm-linux-gnueabihf",
168+
"url": "https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-linux-armhf.tar.gz",
169+
"archiveFileName": "mkspiffs-0.2.3-arduino-esp32-linux-armhf.tar.gz",
170+
"checksum": "SHA-256:ade3dc00117912ac08a1bdbfbfe76b12d21a34bc5fa1de0cfc45fe7a8d0a0185",
171+
"size": "40665"
172+
}
173+
]
174+
}
175+
]
176+
}
177+
]
178+
}

0 commit comments

Comments
 (0)