blob: b44a963fcaf50c10c3060c44f1350d2898fc42f4 [file]
package cmd
import (
"os"
"path/filepath"
"reflect"
"strings"
"testing"
appsv1 "k8s.io/api/apps/v1"
)
func TestDashboardManifestFiles(t *testing.T) {
dir := t.TempDir()
for _, name := range []string{"prometheus.yaml", "grafana.yaml"} {
if err := os.WriteFile(filepath.Join(dir, name), []byte("apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: "+name+"\n"), 0o600); err != nil {
t.Fatal(err)
}
}
got, err := dashboardManifestFiles(dir)
if err != nil {
t.Fatalf("dashboardManifestFiles() returned error: %v", err)
}
want := []string{filepath.Join(dir, "prometheus.yaml"), filepath.Join(dir, "grafana.yaml")}
if !reflect.DeepEqual(got, want) {
t.Fatalf("dashboardManifestFiles() = %v, want %v", got, want)
}
if dashboardHasTracing(got) {
t.Fatalf("dashboardHasTracing() = true, want false")
}
if names := dashboardWaitDeploymentNames(got); !reflect.DeepEqual(names, []string{"prometheus", "grafana"}) {
t.Fatalf("dashboardWaitDeploymentNames() = %v", names)
}
}
func TestDashboardManifestFilesIncludesTracingWhenPresent(t *testing.T) {
dir := t.TempDir()
for _, name := range []string{"prometheus.yaml", "grafana.yaml", "tracing.yaml"} {
if err := os.WriteFile(filepath.Join(dir, name), []byte("apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: "+name+"\n"), 0o600); err != nil {
t.Fatal(err)
}
}
got, err := dashboardManifestFiles(dir)
if err != nil {
t.Fatalf("dashboardManifestFiles() returned error: %v", err)
}
want := []string{filepath.Join(dir, "prometheus.yaml"), filepath.Join(dir, "grafana.yaml"), filepath.Join(dir, "tracing.yaml")}
if !reflect.DeepEqual(got, want) {
t.Fatalf("dashboardManifestFiles() = %v, want %v", got, want)
}
if !dashboardHasTracing(got) {
t.Fatalf("dashboardHasTracing() = false, want true")
}
if names := dashboardWaitDeploymentNames(got); !reflect.DeepEqual(names, []string{"prometheus", "grafana", "tracing"}) {
t.Fatalf("dashboardWaitDeploymentNames() = %v", names)
}
}
func TestDashboardManifestFilesIncludesOpenTelemetryWhenPresent(t *testing.T) {
dir := t.TempDir()
for _, name := range []string{"prometheus.yaml", "grafana.yaml", "tracing.yaml", "opentelemetry.yaml"} {
if err := os.WriteFile(filepath.Join(dir, name), []byte("apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: "+name+"\n"), 0o600); err != nil {
t.Fatal(err)
}
}
got, err := dashboardManifestFiles(dir)
if err != nil {
t.Fatalf("dashboardManifestFiles() returned error: %v", err)
}
want := []string{
filepath.Join(dir, "prometheus.yaml"),
filepath.Join(dir, "grafana.yaml"),
filepath.Join(dir, "tracing.yaml"),
filepath.Join(dir, "opentelemetry.yaml"),
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("dashboardManifestFiles() = %v, want %v", got, want)
}
if !dashboardHasOpenTelemetry(got) {
t.Fatalf("dashboardHasOpenTelemetry() = false, want true")
}
if names := dashboardWaitDeploymentNames(got); !reflect.DeepEqual(names, []string{"prometheus", "grafana", "tracing", "opentelemetry-collector"}) {
t.Fatalf("dashboardWaitDeploymentNames() = %v", names)
}
}
func TestReadManifestObjects(t *testing.T) {
file := filepath.Join(t.TempDir(), "manifest.yaml")
manifest := strings.Join([]string{
"apiVersion: v1",
"kind: ConfigMap",
"metadata:",
" name: first",
"---",
"apiVersion: v1",
"kind: Service",
"metadata:",
" name: second",
"",
}, "\n")
if err := os.WriteFile(file, []byte(manifest), 0o600); err != nil {
t.Fatal(err)
}
objects, err := readManifestObjects(file)
if err != nil {
t.Fatalf("readManifestObjects() returned error: %v", err)
}
if len(objects) != 2 {
t.Fatalf("readManifestObjects() returned %d objects, want 2", len(objects))
}
if objects[0].GetKind() != "ConfigMap" || objects[1].GetKind() != "Service" {
t.Fatalf("unexpected objects: %s, %s", objects[0].GetKind(), objects[1].GetKind())
}
}
func TestDeploymentAvailable(t *testing.T) {
replicas := int32(2)
if deploymentAvailable(&appsv1.Deployment{Spec: appsv1.DeploymentSpec{Replicas: &replicas}, Status: appsv1.DeploymentStatus{AvailableReplicas: 1}}) {
t.Fatal("deploymentAvailable() = true, want false")
}
if !deploymentAvailable(&appsv1.Deployment{Spec: appsv1.DeploymentSpec{Replicas: &replicas}, Status: appsv1.DeploymentStatus{AvailableReplicas: 2}}) {
t.Fatal("deploymentAvailable() = false, want true")
}
}