Skip to content

Commit

Permalink
chore: grafana tests (#182)
Browse files Browse the repository at this point in the history
Co-authored-by: Luca Lanziani <[email protected]>
  • Loading branch information
Pehesi97 and LucaLanziani authored Sep 21, 2023
1 parent 63f1b4e commit 91c462c
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
58 changes: 56 additions & 2 deletions tests/grafana_addon_test.go
Original file line number Diff line number Diff line change
@@ -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{
Expand All @@ -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,
Expand All @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions tests/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -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" {
Expand Down

0 comments on commit 91c462c

Please sign in to comment.