Skip to content

Commit 65642ce

Browse files
Rearrange compile tests to share the same environment
1 parent 9575a48 commit 65642ce

File tree

2 files changed

+146
-164
lines changed

2 files changed

+146
-164
lines changed

internal/integrationtest/compile/compile_part_1_test.go

+146
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ func TestCompile(t *testing.T) {
6363
{"OnlyCompilationDatabaseFlag", compileOnlyCompilationDatabaseFlag},
6464
{"UsingPlatformLocalTxt", compileUsingPlatformLocalTxt},
6565
{"UsingBoardsLocalTxt", compileUsingBoardsLocalTxt},
66+
{"WithInvalidBuildOptionJson", compileWithInvalidBuildOptionJson},
67+
{"WithRelativeBuildPath", compileWithRelativeBuildPath},
68+
{"WithFakeSecureBootCore", compileWithFakeSecureBootCore},
6669
}.Run(t, env, cli)
6770
}
6871

@@ -711,3 +714,146 @@ func compileUsingBoardsLocalTxt(t *testing.T, env *integrationtest.Environment,
711714
_, _, err = cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
712715
require.NoError(t, err)
713716
}
717+
718+
func compileWithInvalidBuildOptionJson(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
719+
sketchName := "CompileInvalidBuildOptionsJson"
720+
sketchPath := cli.SketchbookDir().Join(sketchName)
721+
defer sketchPath.RemoveAll()
722+
fqbn := "arduino:avr:uno"
723+
724+
// Create a test sketch
725+
_, _, err := cli.Run("sketch", "new", sketchPath.String())
726+
require.NoError(t, err)
727+
728+
// Get the build directory
729+
md5 := md5.Sum(([]byte(sketchPath.String())))
730+
sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:]))
731+
require.NotEmpty(t, sketchPathMd5)
732+
buildDir := paths.TempDir().Join("arduino-sketch-" + sketchPathMd5)
733+
734+
_, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--verbose")
735+
require.NoError(t, err)
736+
737+
// Breaks the build.options.json file
738+
buildOptionsJson := buildDir.Join("build.options.json")
739+
err = buildOptionsJson.WriteFile([]byte("invalid json"))
740+
require.NoError(t, err)
741+
742+
_, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--verbose")
743+
require.NoError(t, err)
744+
}
745+
746+
func compileWithRelativeBuildPath(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
747+
sketchName := "sketch_simple"
748+
sketchPath := cli.CopySketch(sketchName)
749+
defer sketchPath.RemoveAll()
750+
fqbn := "arduino:avr:uno"
751+
752+
buildPath := paths.New("..").Join("build_path")
753+
newWorkingDir := cli.SketchbookDir().Join("working_dir")
754+
err := newWorkingDir.Mkdir()
755+
require.NoError(t, err)
756+
defer newWorkingDir.RemoveAll()
757+
cli.SetWorkingDir(newWorkingDir)
758+
_, _, err = cli.Run("compile", "-b", fqbn, "--build-path", buildPath.String(), sketchPath.String(), "-v")
759+
require.NoError(t, err)
760+
cli.SetWorkingDir(env.RootDir())
761+
762+
absoluteBuildPath := cli.SketchbookDir().Join("build_path")
763+
builtFiles, err := absoluteBuildPath.ReadDir()
764+
require.NoError(t, err)
765+
require.Contains(t, builtFiles[8].String(), sketchName+".ino.eep")
766+
require.Contains(t, builtFiles[9].String(), sketchName+".ino.elf")
767+
require.Contains(t, builtFiles[10].String(), sketchName+".ino.hex")
768+
require.Contains(t, builtFiles[11].String(), sketchName+".ino.with_bootloader.bin")
769+
require.Contains(t, builtFiles[12].String(), sketchName+".ino.with_bootloader.hex")
770+
require.Contains(t, builtFiles[0].String(), "build.options.json")
771+
require.Contains(t, builtFiles[1].String(), "compile_commands.json")
772+
require.Contains(t, builtFiles[2].String(), "core")
773+
require.Contains(t, builtFiles[3].String(), "includes.cache")
774+
require.Contains(t, builtFiles[4].String(), "libraries")
775+
require.Contains(t, builtFiles[6].String(), "preproc")
776+
require.Contains(t, builtFiles[7].String(), "sketch")
777+
}
778+
779+
func compileWithFakeSecureBootCore(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) {
780+
sketchName := "SketchSimple"
781+
sketchPath := cli.SketchbookDir().Join(sketchName)
782+
defer sketchPath.RemoveAll()
783+
fqbn := "arduino:avr:uno"
784+
785+
_, _, err := cli.Run("sketch", "new", sketchPath.String())
786+
require.NoError(t, err)
787+
788+
// Verifies compilation works
789+
_, _, err = cli.Run("compile", "--clean", "-b", fqbn, sketchPath.String())
790+
require.NoError(t, err)
791+
792+
// Overrides default platform adding secure_boot support using platform.local.txt
793+
avrPlatformPath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.5", "platform.local.txt")
794+
defer avrPlatformPath.Remove()
795+
testPlatformName := "platform_with_secure_boot"
796+
wd, err := paths.Getwd()
797+
require.NoError(t, err)
798+
err = wd.Parent().Join("testdata", testPlatformName, "platform.local.txt").CopyTo(avrPlatformPath)
799+
require.NoError(t, err)
800+
801+
// Overrides default board adding secure boot support using board.local.txt
802+
avrBoardPath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.5", "boards.local.txt")
803+
defer avrBoardPath.Remove()
804+
err = wd.Parent().Join("testdata", testPlatformName, "boards.local.txt").CopyTo(avrBoardPath)
805+
require.NoError(t, err)
806+
807+
// Verifies compilation works with secure boot disabled
808+
stdout, _, err := cli.Run("compile", "--clean", "-b", fqbn+":security=none", sketchPath.String(), "-v")
809+
require.NoError(t, err)
810+
require.Contains(t, string(stdout), "echo exit")
811+
812+
// Verifies compilation works with secure boot enabled
813+
stdout, _, err = cli.Run("compile", "--clean", "-b", fqbn+":security=sien", sketchPath.String(), "-v")
814+
require.NoError(t, err)
815+
require.Contains(t, string(stdout), "Default_Keys/default-signing-key.pem")
816+
require.Contains(t, string(stdout), "Default_Keys/default-encrypt-key.pem")
817+
818+
// Verifies compilation does not work with secure boot enabled and using only one flag
819+
_, stderr, err := cli.Run(
820+
"compile",
821+
"--clean",
822+
"-b",
823+
fqbn+":security=sien",
824+
sketchPath.String(),
825+
"--keys-keychain",
826+
cli.SketchbookDir().String(),
827+
"-v",
828+
)
829+
require.Error(t, err)
830+
require.Contains(t, string(stderr), "Flag --sign-key is mandatory when used in conjunction with flag --keys-keychain")
831+
832+
// Verifies compilation works with secure boot enabled and when overriding the sign key and encryption key used
833+
keysDir := cli.SketchbookDir().Join("keys_dir")
834+
err = keysDir.Mkdir()
835+
require.NoError(t, err)
836+
signKeyPath := keysDir.Join("my-sign-key.pem")
837+
_, err = signKeyPath.Create()
838+
require.NoError(t, err)
839+
encryptKeyPath := cli.SketchbookDir().Join("my-encrypt-key.pem")
840+
_, err = encryptKeyPath.Create()
841+
require.NoError(t, err)
842+
stdout, _, err = cli.Run(
843+
"compile",
844+
"--clean",
845+
"-b",
846+
fqbn+":security=sien",
847+
sketchPath.String(),
848+
"--keys-keychain",
849+
keysDir.String(),
850+
"--sign-key",
851+
"my-sign-key.pem",
852+
"--encrypt-key",
853+
"my-encrypt-key.pem",
854+
"-v",
855+
)
856+
require.NoError(t, err)
857+
require.Contains(t, string(stdout), "my-sign-key.pem")
858+
require.Contains(t, string(stdout), "my-encrypt-key.pem")
859+
}

internal/integrationtest/compile/compile_part_4_test.go

-164
Original file line numberDiff line numberDiff line change
@@ -261,42 +261,6 @@ func TestCompileWithConflictingLibrariesInclude(t *testing.T) {
261261
require.Contains(t, string(stdout), expectedOutput[0]+"\n"+expectedOutput[1]+"\n"+expectedOutput[2]+"\n")
262262
}
263263

264-
func TestCompileWithInvalidBuildOptionJson(t *testing.T) {
265-
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
266-
defer env.CleanUp()
267-
268-
_, _, err := cli.Run("update")
269-
require.NoError(t, err)
270-
271-
_, _, err = cli.Run("core", "install", "arduino:[email protected]")
272-
require.NoError(t, err)
273-
274-
sketchName := "CompileInvalidBuildOptionsJson"
275-
sketchPath := cli.SketchbookDir().Join(sketchName)
276-
fqbn := "arduino:avr:uno"
277-
278-
// Create a test sketch
279-
_, _, err = cli.Run("sketch", "new", sketchPath.String())
280-
require.NoError(t, err)
281-
282-
// Get the build directory
283-
md5 := md5.Sum(([]byte(sketchPath.String())))
284-
sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:]))
285-
require.NotEmpty(t, sketchPathMd5)
286-
buildDir := paths.TempDir().Join("arduino-sketch-" + sketchPathMd5)
287-
288-
_, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--verbose")
289-
require.NoError(t, err)
290-
291-
// Breaks the build.options.json file
292-
buildOptionsJson := buildDir.Join("build.options.json")
293-
err = buildOptionsJson.WriteFile([]byte("invalid json"))
294-
require.NoError(t, err)
295-
296-
_, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--verbose")
297-
require.NoError(t, err)
298-
}
299-
300264
func TestCompileWithEsp32BundledLibraries(t *testing.T) {
301265
// Some esp cores have have bundled libraries that are optimize for that architecture,
302266
// it might happen that if the user has a library with the same name installed conflicts
@@ -449,46 +413,6 @@ func TestCompileSketchWithIppFileInclude(t *testing.T) {
449413
require.NoError(t, err)
450414
}
451415

452-
func TestCompileWithRelativeBuildPath(t *testing.T) {
453-
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
454-
defer env.CleanUp()
455-
456-
_, _, err := cli.Run("update")
457-
require.NoError(t, err)
458-
459-
_, _, err = cli.Run("core", "install", "arduino:[email protected]")
460-
require.NoError(t, err)
461-
462-
sketchName := "sketch_simple"
463-
sketchPath := cli.CopySketch(sketchName)
464-
fqbn := "arduino:avr:uno"
465-
466-
buildPath := paths.New("..").Join("build_path")
467-
workingDir := cli.SketchbookDir().Join("working_dir")
468-
err = workingDir.Mkdir()
469-
require.NoError(t, err)
470-
cli.SetWorkingDir(workingDir)
471-
_, _, err = cli.Run("compile", "-b", fqbn, "--build-path", buildPath.String(), sketchPath.String(), "-v")
472-
require.NoError(t, err)
473-
cli.SetWorkingDir(env.RootDir())
474-
475-
absoluteBuildPath := cli.SketchbookDir().Join("build_path")
476-
builtFiles, err := absoluteBuildPath.ReadDir()
477-
require.NoError(t, err)
478-
require.Contains(t, builtFiles[8].String(), sketchName+".ino.eep")
479-
require.Contains(t, builtFiles[9].String(), sketchName+".ino.elf")
480-
require.Contains(t, builtFiles[10].String(), sketchName+".ino.hex")
481-
require.Contains(t, builtFiles[11].String(), sketchName+".ino.with_bootloader.bin")
482-
require.Contains(t, builtFiles[12].String(), sketchName+".ino.with_bootloader.hex")
483-
require.Contains(t, builtFiles[0].String(), "build.options.json")
484-
require.Contains(t, builtFiles[1].String(), "compile_commands.json")
485-
require.Contains(t, builtFiles[2].String(), "core")
486-
require.Contains(t, builtFiles[3].String(), "includes.cache")
487-
require.Contains(t, builtFiles[4].String(), "libraries")
488-
require.Contains(t, builtFiles[6].String(), "preproc")
489-
require.Contains(t, builtFiles[7].String(), "sketch")
490-
}
491-
492416
func TestCompileWithoutUploadAndFqbn(t *testing.T) {
493417
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
494418
defer env.CleanUp()
@@ -550,91 +474,3 @@ func TestCompileWithKnownPlatformNotInstalled(t *testing.T) {
550474
// Verifies command to fix error is shown to user
551475
require.Contains(t, string(stderr), "Try running `arduino-cli core install arduino:avr`")
552476
}
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:[email protected]")
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-
}

0 commit comments

Comments
 (0)