Skip to content

Commit 9575a48

Browse files
Migrate TestCompileWithFakeSecureBootCore to compile_part_4_test.go and delete test_compile_part_4.py
1 parent 48090d1 commit 9575a48

File tree

4 files changed

+107
-104
lines changed

4 files changed

+107
-104
lines changed

internal/integrationtest/compile/compile_part_4_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,3 +550,91 @@ func TestCompileWithKnownPlatformNotInstalled(t *testing.T) {
550550
// Verifies command to fix error is shown to user
551551
require.Contains(t, string(stderr), "Try running `arduino-cli core install arduino:avr`")
552552
}
553+
554+
func TestCompileWithFakeSecureBootCore(t *testing.T) {
555+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
556+
defer env.CleanUp()
557+
558+
_, _, err := cli.Run("update")
559+
require.NoError(t, err)
560+
561+
_, _, err = cli.Run("core", "install", "arduino:avr@1.8.3")
562+
require.NoError(t, err)
563+
564+
sketchName := "SketchSimple"
565+
sketchPath := cli.SketchbookDir().Join(sketchName)
566+
fqbn := "arduino:avr:uno"
567+
568+
_, _, err = cli.Run("sketch", "new", sketchPath.String())
569+
require.NoError(t, err)
570+
571+
// Verifies compilation works
572+
_, _, err = cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
573+
require.NoError(t, err)
574+
575+
// Overrides default platform adding secure_boot support using platform.local.txt
576+
avrPlatformPath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.3", "platform.local.txt")
577+
testPlatformName := "platform_with_secure_boot"
578+
wd, err := paths.Getwd()
579+
require.NoError(t, err)
580+
err = wd.Parent().Join("testdata", testPlatformName, "platform.local.txt").CopyTo(avrPlatformPath)
581+
require.NoError(t, err)
582+
583+
// Overrides default board adding secure boot support using board.local.txt
584+
avrBoardPath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.3", "boards.local.txt")
585+
err = wd.Parent().Join("testdata", testPlatformName, "boards.local.txt").CopyTo(avrBoardPath)
586+
require.NoError(t, err)
587+
588+
// Verifies compilation works with secure boot disabled
589+
stdout, _, err := cli.Run("compile", "--clean", "-b", fqbn+":security=none", sketchPath.String(), "-v")
590+
require.NoError(t, err)
591+
require.Contains(t, string(stdout), "echo exit")
592+
593+
// Verifies compilation works with secure boot enabled
594+
stdout, _, err = cli.Run("compile", "--clean", "-b", fqbn+":security=sien", sketchPath.String(), "-v")
595+
require.NoError(t, err)
596+
require.Contains(t, string(stdout), "Default_Keys/default-signing-key.pem")
597+
require.Contains(t, string(stdout), "Default_Keys/default-encrypt-key.pem")
598+
599+
// Verifies compilation does not work with secure boot enabled and using only one flag
600+
_, stderr, err := cli.Run(
601+
"compile",
602+
"--clean",
603+
"-b",
604+
fqbn+":security=sien",
605+
sketchPath.String(),
606+
"--keys-keychain",
607+
cli.SketchbookDir().String(),
608+
"-v",
609+
)
610+
require.Error(t, err)
611+
require.Contains(t, string(stderr), "Flag --sign-key is mandatory when used in conjunction with flag --keys-keychain")
612+
613+
// Verifies compilation works with secure boot enabled and when overriding the sign key and encryption key used
614+
keysDir := cli.SketchbookDir().Join("keys_dir")
615+
err = keysDir.Mkdir()
616+
require.NoError(t, err)
617+
signKeyPath := keysDir.Join("my-sign-key.pem")
618+
_, err = signKeyPath.Create()
619+
require.NoError(t, err)
620+
encryptKeyPath := cli.SketchbookDir().Join("my-encrypt-key.pem")
621+
_, err = encryptKeyPath.Create()
622+
require.NoError(t, err)
623+
stdout, _, err = cli.Run(
624+
"compile",
625+
"--clean",
626+
"-b",
627+
fqbn+":security=sien",
628+
sketchPath.String(),
629+
"--keys-keychain",
630+
keysDir.String(),
631+
"--sign-key",
632+
"my-sign-key.pem",
633+
"--encrypt-key",
634+
"my-encrypt-key.pem",
635+
"-v",
636+
)
637+
require.NoError(t, err)
638+
require.Contains(t, string(stdout), "my-sign-key.pem")
639+
require.Contains(t, string(stdout), "my-encrypt-key.pem")
640+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
menu.security=Security setting
2+
3+
uno.menu.security.none=None
4+
uno.menu.security.sien=Signature + Encryption
5+
6+
uno.menu.security.sien.build.postbuild.cmd="{tools.imgtool.cmd}" {tools.imgtool.flags}
7+
uno.menu.security.none.build.postbuild.cmd="{tools.imgtool.cmd}" exit
8+
9+
uno.menu.security.sien.build.keys.keychain={runtime.hardware.path}/Default_Keys
10+
uno.menu.security.sien.build.keys.sign_key=default-signing-key.pem
11+
uno.menu.security.sien.build.keys.encrypt_key=default-encrypt-key.pem
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## Create output secure image (bin file)
2+
recipe.hooks.objcopy.postobjcopy.1.pattern={build.postbuild.cmd}
3+
#
4+
# IMGTOOL
5+
#
6+
7+
tools.imgtool.cmd=echo
8+
tools.imgtool.flags=sign --key "{build.keys.keychain}/{build.keys.sign_key}" --encrypt "{build.keys.keychain}/{build.keys.encrypt_key}" "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.bin" --align {build.alignment} --max-align {build.alignment} --version {build.version} --header-size {build.header_size} --pad-header --slot-size {build.slot_size}

test/test_compile_part_4.py

Lines changed: 0 additions & 104 deletions
This file was deleted.

0 commit comments

Comments
 (0)