Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix crash when loading boards #1354

Merged
merged 1 commit into from
Jul 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions arduino/cores/packagemanager/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,19 +384,16 @@ func (pm *PackageManager) loadBoards(platform *cores.PlatformRelease) error {
} else {
platform.Menus = properties.NewMap()
}
// This is not a board id so we remove it to correctly
// set all other boards properties
delete(propertiesByBoard, "menu")

if !platform.PluggableDiscoveryAware {
for _, boardProperties := range propertiesByBoard {
convertVidPidIdentificationPropertiesToPluggableDiscovery(boardProperties)
}
}

platform.Menus = propertiesByBoard["menu"]

// This is not a board id so we remove it to correctly
// set all other boards properties
delete(propertiesByBoard, "menu")

skippedBoards := []string{}
for boardID, boardProperties := range propertiesByBoard {
var board *cores.Board
Expand Down
36 changes: 36 additions & 0 deletions test/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -712,3 +712,39 @@ def test_core_with_wrong_custom_board_options_is_loaded(run_command, data_dir):
+ "skipping loading of boards arduino-beta-dev:platform_with_wrong_custom_board_options:nessuno: "
+ "malformed custom board options"
) in res.stderr


def test_core_with_missing_custom_board_options_is_loaded(run_command, data_dir):
test_platform_name = "platform_with_missing_custom_board_options"
platform_install_dir = Path(data_dir, "hardware", "arduino-beta-dev", test_platform_name)
platform_install_dir.mkdir(parents=True)

# Install platform in Sketchbook hardware dir
shutil.copytree(
Path(__file__).parent / "testdata" / test_platform_name, platform_install_dir, dirs_exist_ok=True,
)

assert run_command("update")

res = run_command("core list --format json")
assert res.ok

cores = json.loads(res.stdout)
mapped = {core["id"]: core for core in cores}
assert len(mapped) == 1
# Verifies platform is loaded except excluding board with missing options
assert "arduino-beta-dev:platform_with_missing_custom_board_options" in mapped
boards = {b["fqbn"]: b for b in mapped["arduino-beta-dev:platform_with_missing_custom_board_options"]["boards"]}
assert len(boards) == 1
# Verify board with malformed options is not loaded
assert "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" not in boards
# Verify other board is loaded
assert "arduino-beta-dev:platform_with_missing_custom_board_options:altra" in boards
# Verify warning is shown to user
assert (
"Error initializing instance: "
+ "loading platform release arduino-beta-dev:platform_with_missing_custom_board_options@4.2.0: "
+ "loading boards: "
+ "skipping loading of boards arduino-beta-dev:platform_with_missing_custom_board_options:nessuno: "
+ "malformed custom board options"
) in res.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
nessuno.name=Arduino Nessuno
nessuno.vid.0=0x2341
nessuno.pid.0=0x0043
nessuno.vid.1=0x2341
nessuno.pid.1=0x0001
nessuno.vid.2=0x2A03
nessuno.pid.2=0x0043
nessuno.vid.3=0x2341
nessuno.pid.3=0x0243
nessuno.upload.tool=avrdude
nessuno.upload.protocol=arduino
nessuno.upload.maximum_size=32256
nessuno.upload.maximum_data_size=2048
nessuno.upload.speed=115200
nessuno.bootloader.tool=avrdude
nessuno.bootloader.low_fuses=0xFF
nessuno.bootloader.high_fuses=0xDE
nessuno.bootloader.extended_fuses=0xFD
nessuno.bootloader.unlock_bits=0x3F
nessuno.bootloader.lock_bits=0x0F
nessuno.bootloader.file=optiboot/optiboot_atmega328.hex
nessuno.build.mcu=atmega328p
nessuno.build.f_cpu=16000000L
nessuno.build.board=AVR_NESSUNO
nessuno.build.core=arduino
nessuno.build.variant=standard

nessuno.menu.cache.on=Enabled
nessuno.menu.cache.on.build.cache_flags=-DENABLE_CACHE
nessuno.menu.cache.off=Disabled
nessuno.menu.cache.off.build.cache_flags=

altra.name=Arduino Altra
altra.vid.0=0x2341
altra.pid.0=0x0043
altra.vid.1=0x2341
altra.pid.1=0x0001
altra.vid.2=0x2A03
altra.pid.2=0x0043
altra.vid.3=0x2341
altra.pid.3=0x0243
altra.upload.tool=avrdude
altra.upload.protocol=arduino
altra.upload.maximum_size=32256
altra.upload.maximum_data_size=2048
altra.upload.speed=115200
altra.bootloader.tool=avrdude
altra.bootloader.low_fuses=0xFF
altra.bootloader.high_fuses=0xDE
altra.bootloader.extended_fuses=0xFD
altra.bootloader.unlock_bits=0x3F
altra.bootloader.lock_bits=0x0F
altra.bootloader.file=optiboot/optiboot_atmega328.hex
altra.build.mcu=atmega328p
altra.build.f_cpu=16000000L
altra.build.board=AVR_ALTRA
altra.build.core=arduino
altra.build.variant=standard
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name=Arduino Test Boards
version=4.2.0