github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/test/e2e/24_variables_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  	"fmt"
     9  	"os"
    10  	"path/filepath"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestVariables(t *testing.T) {
    17  	t.Log("E2E: Package variables")
    18  	e2e.SetupWithCluster(t)
    19  
    20  	evilSrc := filepath.Join("src", "test", "packages", "24-evil-variables")
    21  	evilPath := fmt.Sprintf("jackal-package-evil-variables-%s.tar.zst", e2e.Arch)
    22  
    23  	src := filepath.Join("examples", "variables")
    24  	path := filepath.Join("build", fmt.Sprintf("jackal-package-variables-%s.tar.zst", e2e.Arch))
    25  
    26  	tfPath := "modified-terraform.tf"
    27  
    28  	e2e.CleanFiles(tfPath, evilPath)
    29  
    30  	// Test that specifying an invalid setVariable value results in an error
    31  	stdOut, stdErr, err := e2e.Jackal("package", "create", evilSrc, "--set", "NUMB3R5=K1TT3H", "--confirm")
    32  	require.NoError(t, err, stdOut, stdErr)
    33  	expectedOutString := "\"K1TT3H\""
    34  	require.Contains(t, stdErr, "", expectedOutString)
    35  	stdOut, stdErr, err = e2e.Jackal("package", "deploy", evilPath, "--confirm")
    36  	require.Error(t, err, stdOut, stdErr)
    37  	expectedOutString = "variable \"HELLO_KITTEH\" does not match pattern "
    38  	require.Contains(t, stdErr, "", expectedOutString)
    39  
    40  	// Test that specifying an invalid constant value results in an error
    41  	stdOut, stdErr, err = e2e.Jackal("package", "create", src, "--set", "NGINX_VERSION=", "--confirm")
    42  	require.Error(t, err, stdOut, stdErr)
    43  	expectedOutString = "constant \"NGINX_VERSION\" does not match pattern "
    44  	require.Contains(t, stdErr, "", expectedOutString)
    45  
    46  	// Test that not specifying a prompted variable results in an error
    47  	_, stdErr, _ = e2e.Jackal("package", "deploy", path, "--confirm")
    48  	expectedOutString = "variable 'SITE_NAME' must be '--set' when using the '--confirm' flag"
    49  	require.Contains(t, stdErr, "", expectedOutString)
    50  
    51  	// Test that specifying an invalid variable value results in an error
    52  	stdOut, stdErr, err = e2e.Jackal("package", "deploy", path, "--set", "SITE_NAME=#INVALID", "--confirm")
    53  	require.Error(t, err, stdOut, stdErr)
    54  	expectedOutString = "variable \"SITE_NAME\" does not match pattern "
    55  	require.Contains(t, stdErr, "", expectedOutString)
    56  
    57  	// Deploy nginx
    58  	stdOut, stdErr, err = e2e.Jackal("package", "deploy", path, "--confirm", "--set", "SITE_NAME=Lula Web", "--set", "AWS_REGION=unicorn-land", "-l", "trace")
    59  	require.NoError(t, err, stdOut, stdErr)
    60  	// Verify that the variables were shown to the user in the formats we expect
    61  	require.Contains(t, stdErr, "currently set to 'Defense Unicorns' (default)")
    62  	require.Contains(t, stdErr, "currently set to 'Lula Web'")
    63  	require.Contains(t, stdErr, "currently set to '**sanitized**'")
    64  	// Verify that the sensitive variable 'unicorn-land' was not printed to the screen
    65  	require.NotContains(t, stdErr, "unicorn-land")
    66  
    67  	logText := e2e.GetLogFileContents(t, e2e.StripMessageFormatting(stdErr))
    68  	// Verify that the sensitive variable 'unicorn-land' was not included in the log
    69  	require.NotContains(t, logText, "unicorn-land")
    70  
    71  	// Verify the terraform file was templated correctly
    72  	outputTF, err := os.ReadFile(tfPath)
    73  	require.NoError(t, err)
    74  	require.Contains(t, string(outputTF), "unicorn-land")
    75  
    76  	// Verify the configmap was properly templated
    77  	kubectlOut, _, _ := e2e.Kubectl("-n", "nginx", "get", "configmap", "nginx-configmap", "-o", "jsonpath='{.data.index\\.html}' ")
    78  	// OPTIONAL_FOOTER should remain unset because it was not set during deploy
    79  	require.Contains(t, string(kubectlOut), "</pre>\n    \n  </body>")
    80  	// STYLE should take the default value
    81  	require.Contains(t, string(kubectlOut), "body { font-family: sans-serif;")
    82  	// SITE_NAME should take the set value
    83  	require.Contains(t, string(kubectlOut), "Lula Web")
    84  	// ORGANIZATION should take the created value
    85  	require.Contains(t, string(kubectlOut), "Defense Unicorns")
    86  	// AWS_REGION should have been templated and also templated into this config map
    87  	require.Contains(t, string(kubectlOut), "unicorn-land")
    88  	// MODIFIED_TERRAFORM_SHASUM should have been templated
    89  	require.Contains(t, string(kubectlOut), "63af41aebec53e3679948b254073c3c0d603d47ab01b03ab14abd7d98234e101")
    90  
    91  	// Remove the variables example
    92  	stdOut, stdErr, err = e2e.Jackal("package", "remove", path, "--confirm")
    93  	require.NoError(t, err, stdOut, stdErr)
    94  
    95  	e2e.CleanFiles(tfPath, evilPath)
    96  }