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  }