From 91c462c4092bff1bffcaee7066aed827b1ee4225 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Thu, 21 Sep 2023 04:03:14 -0300 Subject: [PATCH] chore: grafana tests (#182) Co-authored-by: Luca Lanziani --- tests/grafana_addon_test.go | 58 +++++++++++++++++++++++++++++++++++-- tests/helpers.go | 6 ++++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/tests/grafana_addon_test.go b/tests/grafana_addon_test.go index 642ca6695..dd783dd8d 100644 --- a/tests/grafana_addon_test.go +++ b/tests/grafana_addon_test.go @@ -1,12 +1,26 @@ package test import ( + "fmt" "log" + "net/http" + "os" "testing" _ "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" + + "github.com/gruntwork-io/terratest/modules/k8s" ) +type GrafanaValues struct { + GrafanaSource struct { + Service struct { + TargetPort int `yaml:"targetPort"` + } `yaml:"service"` + } `yaml:"grafana-source"` +} + func TestHelmGrafanaAddon(t *testing.T) { // add Istio CRDs to test Istio virtual service istioBaseAddonData := HelmAddonData{ @@ -28,11 +42,13 @@ func TestHelmGrafanaAddon(t *testing.T) { log.Fatal(err) } + grafanaNamespaceAndAddonName := "grafana" + addonData := HelmAddonData{ namespaceName: "", releaseName: "", dependencyRepo: "", - addonName: "grafana", + addonName: grafanaNamespaceAndAddonName, addonAlias: "", chartPath: "", hasCustomValues: true, @@ -45,8 +61,46 @@ func TestHelmGrafanaAddon(t *testing.T) { log.Fatal(err) } - waitUntilServicesAvailable(t, *helmOptions.KubectlOptions, []string{"grafana"}) + waitUntilServicesAvailable(t, *helmOptions.KubectlOptions, []string{grafanaNamespaceAndAddonName}) + waitUntilDeploymentsAvailable(t, *helmOptions.KubectlOptions, []string{grafanaNamespaceAndAddonName}) + + valuesFile, err := os.ReadFile("../addons/grafana/values.yaml") + + if err != nil { + log.Fatal(err) + } + + var yamlData GrafanaValues + + err = yaml.Unmarshal(valuesFile, &yamlData) + + targetPort := 3000 + if err == nil && yamlData.GrafanaSource.Service.TargetPort != 0 { + targetPort = yamlData.GrafanaSource.Service.TargetPort + } + + grafanaKubectlOptions := k8s.NewKubectlOptions("", "", grafanaNamespaceAndAddonName) + tunnel := k8s.NewTunnel(grafanaKubectlOptions, k8s.ResourceTypeService, grafanaNamespaceAndAddonName, 0, targetPort) + defer tunnel.Close() + + tunnel.ForwardPort(t) + + healthCheck, err := http.NewRequest("GET", fmt.Sprintf("http://%s/healthz", tunnel.Endpoint()), nil) + if err != nil { + log.Fatalf("Error when building the request: %s", err) + } + + resp, reqErr := http.DefaultClient.Do(healthCheck) + if reqErr != nil { + log.Fatalf("Error when making the request: %s", reqErr) + } + + if resp.StatusCode != http.StatusOK { + log.Fatalf("Grafana is not ready for metrics: status code %d", resp.StatusCode) + } else { + log.Print("Grafana is ready for metrics!") + } // ---------------------------------- destroyHelmEnvironment(t, addonData, helmOptions) diff --git a/tests/helpers.go b/tests/helpers.go index 3c02c641b..00dcf43e8 100644 --- a/tests/helpers.go +++ b/tests/helpers.go @@ -189,6 +189,12 @@ func waitUntilStatefulSetsAvailable(t *testing.T, kubectlOptions k8s.KubectlOpti return readySS == len(statefulSets) } +func waitUntilDeploymentsAvailable(t *testing.T, kubectlOptions k8s.KubectlOptions, deployments []string) { + for _, v := range deployments { + k8s.WaitUntilDeploymentAvailable(t, &kubectlOptions, v, 10, 30*time.Second) + } +} + func waitUntilLoadBalancerAvailable(t *testing.T, kubectlOptions k8s.KubectlOptions) { for _, v := range k8s.ListServices(t, &kubectlOptions, v1.ListOptions{}) { if v.Spec.Type == "LoadBalancer" {