github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/test/e2e/13_find_images_test.go (about) 1 package test 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "strings" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestFindImages(t *testing.T) { 13 t.Log("E2E: Find Images") 14 15 t.Run("jackal prepare find-images", func(t *testing.T) { 16 t.Parallel() 17 // Test `jackal prepare find-images` for a remote asset 18 stdOut, stdErr, err := e2e.Jackal("prepare", "find-images", "examples/helm-charts") 19 require.NoError(t, err, stdOut, stdErr) 20 require.Contains(t, stdOut, "ghcr.io/stefanprodan/podinfo:6.4.0", "The chart image should be found by Jackal") 21 // Test `jackal prepare find-images` with a chart that uses helm annotations 22 stdOut, stdErr, err = e2e.Jackal("prepare", "find-images", "src/test/packages/00-helm-annotations") 23 require.NoError(t, err, stdOut, stdErr) 24 require.Contains(t, stdOut, "registry1.dso.mil/ironbank/opensource/istio/pilot:1.17.2", "The pilot image should be found by Jackal") 25 }) 26 27 t.Run("jackal prepare find-images --kube-version", func(t *testing.T) { 28 t.Parallel() 29 controllerImageWithTag := "quay.io/jetstack/cert-manager-controller:v1.11.1" 30 controlImageWithSignature := "quay.io/jetstack/cert-manager-controller:sha256-4f1782c8316f34aae6b9ab823c3e6b7e6e4d92ec5dac21de6a17c3da44c364f1.sig" 31 32 // Test `jackal prepare find-images` on a chart that has a `kubeVersion` declaration greater than the Helm default (v1.20.0) 33 // This should pass because we build Jackal specifying the kubeVersion value from the kubernetes client-go library instead 34 stdOut, stdErr, err := e2e.Jackal("prepare", "find-images", "src/test/packages/00-kube-version-override") 35 require.NoError(t, err, stdOut, stdErr) 36 require.Contains(t, stdOut, controllerImageWithTag, "The chart image should be found by Jackal") 37 require.Contains(t, stdOut, controlImageWithSignature, "The image signature should be found by Jackal") 38 39 // Test `jackal prepare find-images` with `--kube-version` specified and less than than the declared minimum (v1.21.0) 40 stdOut, stdErr, err = e2e.Jackal("prepare", "find-images", "--kube-version=v1.20.0", "src/test/packages/00-kube-version-override") 41 require.Error(t, err, stdOut, stdErr) 42 require.Contains(t, stdErr, "Problem rendering the helm template for cert-manager", "The kubeVersion declaration should prevent this from templating") 43 require.Contains(t, stdErr, "following charts had errors: [cert-manager]", "Jackal should print an ending error message") 44 }) 45 46 t.Run("jackal dev find-images with helm or manifest vars", func(t *testing.T) { 47 t.Parallel() 48 registry := "coolregistry.gov" 49 agentTag := "test" 50 51 stdOut, _, err := e2e.Jackal("prepare", "find-images", ".", "--registry-url", registry, "--create-set", fmt.Sprintf("agent_image_tag=%s", agentTag)) 52 require.NoError(t, err) 53 internalRegistryImage := fmt.Sprintf("%s/%s:%s", registry, "Racer159/jackal/agent", agentTag) 54 require.Contains(t, stdOut, internalRegistryImage, "registry image should be found with registry url") 55 require.Contains(t, stdOut, "busybox:latest", "Busybox image should be found as long as helm chart doesn't error") 56 57 path := filepath.Join("src", "test", "packages", "00-find-images-with-vars") 58 stdOut, _, err = e2e.Jackal("prepare", "find-images", path, "--deploy-set", "BUSYBOX_IMAGE=busybox:earliest") 59 require.NoError(t, err) 60 require.Contains(t, stdOut, "nginx:latest", "Manifests aren't interpreting vars") 61 require.Contains(t, stdOut, "busybox:earliest", "Values files aren't interpreting vars") 62 }) 63 64 t.Run("jackal test find images --why w/ helm chart success", func(t *testing.T) { 65 t.Parallel() 66 testPackagePath := filepath.Join("examples", "wordpress") 67 sets := []string{"WORDPRESS_USERNAME=jackal", "WORDPRESS_PASSWORD=fake", "WORDPRESS_EMAIL=hello@defenseunicorns.com", "WORDPRESS_FIRST_NAME=jackal", "WORDPRESS_LAST_NAME=jackal", "WORDPRESS_BLOG_NAME=blog"} 68 deploysSet := strings.Join(sets, ",") 69 stdOut, _, err := e2e.Jackal("dev", "find-images", testPackagePath, "--why", "docker.io/bitnami/apache-exporter:0.13.3-debian-11-r2", "--deploy-set", deploysSet) 70 require.NoError(t, err) 71 require.Contains(t, stdOut, "component: wordpress") 72 require.Contains(t, stdOut, "chart: wordpress") 73 require.Contains(t, stdOut, "image: docker.io/bitnami/wordpress:6.2.0-debian-11-r18") 74 }) 75 76 t.Run("jackal test find images --why w/ manifests success", func(t *testing.T) { 77 t.Parallel() 78 testPackagePath := filepath.Join("examples", "manifests") 79 80 stdOut, _, err := e2e.Jackal("dev", "find-images", testPackagePath, "--why", "httpd:alpine3.18") 81 require.NoError(t, err) 82 require.Contains(t, stdOut, "component: httpd-local") 83 require.Contains(t, stdOut, "manifest: simple-httpd-deployment") 84 require.Contains(t, stdOut, "image: httpd:alpine3.18") 85 86 }) 87 88 }