github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/test/e2e/21_connect_creds_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 "crypto/tls" 9 "fmt" 10 "io" 11 "net/http" 12 "strings" 13 "testing" 14 15 "github.com/Racer159/jackal/src/pkg/cluster" 16 "github.com/stretchr/testify/require" 17 ) 18 19 type RegistryResponse struct { 20 Repositories []string `json:"repositories"` 21 } 22 23 func TestConnectAndCreds(t *testing.T) { 24 t.Log("E2E: Connect") 25 e2e.SetupWithCluster(t) 26 27 prevAgentSecretData, _, err := e2e.Kubectl("get", "secret", "agent-hook-tls", "-n", "jackal", "-o", "jsonpath={.data}") 28 require.NoError(t, err) 29 30 connectToJackalServices(t) 31 32 stdOut, stdErr, err := e2e.Jackal("tools", "update-creds", "--confirm") 33 require.NoError(t, err, stdOut, stdErr) 34 35 newAgentSecretData, _, err := e2e.Kubectl("get", "secret", "agent-hook-tls", "-n", "jackal", "-o", "jsonpath={.data}") 36 require.NoError(t, err) 37 require.NotEqual(t, prevAgentSecretData, newAgentSecretData, "agent secrets should not be the same") 38 39 connectToJackalServices(t) 40 41 stdOut, stdErr, err = e2e.Jackal("package", "remove", "init", "--components=logging", "--confirm") 42 require.NoError(t, err, stdOut, stdErr) 43 44 // Prune the images from Grafana and ensure that they are gone 45 stdOut, stdErr, err = e2e.Jackal("tools", "registry", "prune", "--confirm") 46 require.NoError(t, err, stdOut, stdErr) 47 48 stdOut, stdErr, err = e2e.Jackal("tools", "registry", "ls", "127.0.0.1:31337/library/registry") 49 require.NoError(t, err, stdOut, stdErr) 50 require.Contains(t, stdOut, "2.8.3") 51 stdOut, stdErr, err = e2e.Jackal("tools", "registry", "ls", "127.0.0.1:31337/grafana/promtail") 52 require.NoError(t, err, stdOut, stdErr) 53 require.Equal(t, stdOut, "") 54 stdOut, stdErr, err = e2e.Jackal("tools", "registry", "ls", "127.0.0.1:31337/grafana/grafana") 55 require.NoError(t, err, stdOut, stdErr) 56 require.Equal(t, stdOut, "") 57 stdOut, stdErr, err = e2e.Jackal("tools", "registry", "ls", "127.0.0.1:31337/grafana/loki") 58 require.NoError(t, err, stdOut, stdErr) 59 require.Equal(t, stdOut, "") 60 } 61 62 func TestMetrics(t *testing.T) { 63 t.Log("E2E: Emits metrics") 64 e2e.SetupWithCluster(t) 65 66 c, err := cluster.NewCluster() 67 require.NoError(t, err) 68 69 tunnel, err := c.NewTunnel("jackal", "svc", "agent-hook", "", 8888, 8443) 70 require.NoError(t, err) 71 _, err = tunnel.Connect() 72 require.NoError(t, err) 73 defer tunnel.Close() 74 75 // Skip certificate verification 76 // this is an https endpoint being accessed through port-forwarding 77 tr := &http.Transport{ 78 TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 79 } 80 81 client := &http.Client{Transport: tr} 82 httpsEndpoint := strings.ReplaceAll(tunnel.HTTPEndpoint(), "http", "https") 83 resp, err := client.Get(httpsEndpoint + "/metrics") 84 if err != nil { 85 t.Fatal(err) 86 } 87 defer resp.Body.Close() 88 89 // Read the response body 90 body, err := io.ReadAll(resp.Body) 91 if err != nil { 92 t.Fatal(err) 93 } 94 95 desiredString := "go_gc_duration_seconds_count" 96 require.Equal(t, true, strings.Contains(string(body), desiredString)) 97 require.NoError(t, err, resp) 98 require.Equal(t, 200, resp.StatusCode) 99 } 100 101 func connectToJackalServices(t *testing.T) { 102 // Make the Registry contains the images we expect 103 stdOut, stdErr, err := e2e.Jackal("tools", "registry", "catalog") 104 require.NoError(t, err, stdOut, stdErr) 105 registryList := strings.Split(strings.Trim(stdOut, "\n "), "\n") 106 107 // We assert greater than or equal to since the base init has 12 images 108 // HOWEVER during an upgrade we could have mismatched versions/names resulting in more images 109 require.GreaterOrEqual(t, len(registryList), 7) 110 require.Contains(t, stdOut, "Racer159/jackal/agent") 111 require.Contains(t, stdOut, "gitea/gitea") 112 require.Contains(t, stdOut, "grafana/grafana") 113 require.Contains(t, stdOut, "grafana/loki") 114 require.Contains(t, stdOut, "grafana/promtail") 115 require.Contains(t, stdOut, "kiwigrid/k8s-sidecar") 116 require.Contains(t, stdOut, "library/registry") 117 118 // Get the git credentials 119 stdOut, stdErr, err = e2e.Jackal("tools", "get-creds", "git") 120 require.NoError(t, err, stdOut, stdErr) 121 gitPushPassword := strings.TrimSpace(stdOut) 122 stdOut, stdErr, err = e2e.Jackal("tools", "get-creds", "git-readonly") 123 require.NoError(t, err, stdOut, stdErr) 124 gitPullPassword := strings.TrimSpace(stdOut) 125 stdOut, stdErr, err = e2e.Jackal("tools", "get-creds", "artifact") 126 require.NoError(t, err, stdOut, stdErr) 127 gitArtifactToken := strings.TrimSpace(stdOut) 128 129 // Connect to Gitea 130 c, err := cluster.NewCluster() 131 require.NoError(t, err) 132 tunnelGit, err := c.Connect(cluster.JackalGit) 133 require.NoError(t, err) 134 defer tunnelGit.Close() 135 136 // Make sure Gitea comes up cleanly 137 gitPushURL := fmt.Sprintf("http://jackal-git-user:%s@%s/api/v1/user", gitPushPassword, tunnelGit.Endpoint()) 138 respGit, err := http.Get(gitPushURL) 139 require.NoError(t, err) 140 require.Equal(t, 200, respGit.StatusCode) 141 gitPullURL := fmt.Sprintf("http://jackal-git-read-user:%s@%s/api/v1/user", gitPullPassword, tunnelGit.Endpoint()) 142 respGit, err = http.Get(gitPullURL) 143 require.NoError(t, err) 144 require.Equal(t, 200, respGit.StatusCode) 145 gitArtifactURL := fmt.Sprintf("http://jackal-git-user:%s@%s/api/v1/user", gitArtifactToken, tunnelGit.Endpoint()) 146 respGit, err = http.Get(gitArtifactURL) 147 require.NoError(t, err) 148 require.Equal(t, 200, respGit.StatusCode) 149 150 // Connect to the Logging Stack 151 c, err = cluster.NewCluster() 152 require.NoError(t, err) 153 tunnelLog, err := c.Connect(cluster.JackalLogging) 154 require.NoError(t, err) 155 defer tunnelLog.Close() 156 157 // Make sure Grafana comes up cleanly 158 respLog, err := http.Get(tunnelLog.HTTPEndpoint()) 159 require.NoError(t, err) 160 require.Equal(t, 200, respLog.StatusCode) 161 }