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 }