github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/test/e2e/29_mismatched_checks_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package test provides e2e tests for Jackal. 5 package test 6 7 import ( 8 "encoding/base64" 9 "encoding/json" 10 "fmt" 11 "path/filepath" 12 "testing" 13 14 "github.com/Racer159/jackal/src/types" 15 "github.com/stretchr/testify/require" 16 ) 17 18 // TestMismatchedArchitectures ensures that jackal produces an error 19 // when the package architecture doesn't match the target cluster architecture. 20 func TestMismatchedArchitectures(t *testing.T) { 21 t.Log("E2E: Mismatched architectures") 22 e2e.SetupWithCluster(t) 23 24 var ( 25 mismatchedArch = e2e.GetMismatchedArch() 26 mismatchedGamesPackage = fmt.Sprintf("jackal-package-dos-games-%s-1.0.0.tar.zst", mismatchedArch) 27 expectedErrorMessage = fmt.Sprintf("this package architecture is %s", mismatchedArch) 28 ) 29 30 // Build dos-games package with different arch than the cluster arch. 31 stdOut, stdErr, err := e2e.Jackal("package", "create", "examples/dos-games/", "--architecture", mismatchedArch, "--confirm") 32 require.NoError(t, err, stdOut, stdErr) 33 defer e2e.CleanFiles(mismatchedGamesPackage) 34 35 // Ensure jackal package deploy returns an error because of the mismatched architectures. 36 _, stdErr, err = e2e.Jackal("package", "deploy", mismatchedGamesPackage, "--confirm") 37 require.Error(t, err, stdErr) 38 require.Contains(t, e2e.StripMessageFormatting(stdErr), expectedErrorMessage) 39 } 40 41 // TestMismatchedVersions ensures that jackal produces a warning 42 // when the initialized version of Jackal doesn't match the current CLI 43 func TestMismatchedVersions(t *testing.T) { 44 t.Log("E2E: Mismatched versions") 45 e2e.SetupWithCluster(t) 46 47 var ( 48 expectedWarningMessage = "Potential Breaking Changes" 49 ) 50 51 // Get the current init package secret 52 initPkg := types.DeployedPackage{} 53 base64Pkg, _, err := e2e.Kubectl("get", "secret", "jackal-package-init", "-n", "jackal", "-o", "jsonpath={.data.data}") 54 require.NoError(t, err) 55 jsonPkg, err := base64.StdEncoding.DecodeString(base64Pkg) 56 require.NoError(t, err) 57 fmt.Println(string(jsonPkg)) 58 err = json.Unmarshal(jsonPkg, &initPkg) 59 require.NoError(t, err) 60 61 // Edit the build data to trigger the breaking change check 62 initPkg.Data.Build.Version = "v0.25.0" 63 64 // Delete the package secret 65 _, _, err = e2e.Kubectl("delete", "secret", "jackal-package-init", "-n", "jackal") 66 require.NoError(t, err) 67 68 // Create a new secret with the modified data 69 jsonPkgModified, err := json.Marshal(initPkg) 70 require.NoError(t, err) 71 _, _, err = e2e.Kubectl("create", "secret", "generic", "jackal-package-init", "-n", "jackal", fmt.Sprintf("--from-literal=data=%s", string(jsonPkgModified))) 72 require.NoError(t, err) 73 74 path := filepath.Join("build", fmt.Sprintf("jackal-package-dos-games-%s-1.0.0.tar.zst", e2e.Arch)) 75 76 // Deploy the games package 77 stdOut, stdErr, err := e2e.Jackal("package", "deploy", path, "--confirm") 78 require.NoError(t, err, stdOut, stdErr) 79 require.Contains(t, stdErr, expectedWarningMessage) 80 81 // Remove the games package 82 stdOut, stdErr, err = e2e.Jackal("package", "remove", "dos-games", "--confirm") 83 require.NoError(t, err, stdOut, stdErr) 84 85 // Reset the package secret 86 _, _, err = e2e.Kubectl("delete", "secret", "jackal-package-init", "-n", "jackal") 87 require.NoError(t, err) 88 _, _, err = e2e.Kubectl("create", "secret", "generic", "jackal-package-init", "-n", "jackal", fmt.Sprintf("--from-literal=data=%s", string(jsonPkg))) 89 require.NoError(t, err) 90 }