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  }