From d1637001477e3e6984cbdf28174ea364fb4acbe6 Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Sun, 6 Jul 2025 15:31:21 +0200 Subject: [PATCH] feat(tests): Add tests for label structures --- .../labels/labelstructs/configMap_test.go | 17 ++++++++++ generator/labels/labelstructs/cronJob_test.go | 25 +++++++++++++++ .../labels/labelstructs/dependencies_test.go | 14 +++++++++ generator/labels/labelstructs/envFrom_test.go | 17 ++++++++++ .../labelstructs/exchangeVolume_test.go | 17 ++++++++++ generator/labels/labelstructs/ingress.go | 4 +-- generator/labels/labelstructs/ingress_test.go | 31 +++++++++++++++++++ generator/labels/labelstructs/mapenv_test.go | 11 +++++++ generator/labels/labelstructs/ports_test.go | 23 ++++++++++++++ generator/labels/labelstructs/probes_test.go | 16 ++++++++++ generator/labels/labelstructs/secrets_test.go | 17 ++++++++++ .../labels/labelstructs/valueFrom_test.go | 25 +++++++++++++++ 12 files changed, 215 insertions(+), 2 deletions(-) create mode 100644 generator/labels/labelstructs/configMap_test.go create mode 100644 generator/labels/labelstructs/cronJob_test.go create mode 100644 generator/labels/labelstructs/dependencies_test.go create mode 100644 generator/labels/labelstructs/envFrom_test.go create mode 100644 generator/labels/labelstructs/exchangeVolume_test.go create mode 100644 generator/labels/labelstructs/ingress_test.go create mode 100644 generator/labels/labelstructs/mapenv_test.go create mode 100644 generator/labels/labelstructs/ports_test.go create mode 100644 generator/labels/labelstructs/probes_test.go create mode 100644 generator/labels/labelstructs/secrets_test.go create mode 100644 generator/labels/labelstructs/valueFrom_test.go diff --git a/generator/labels/labelstructs/configMap_test.go b/generator/labels/labelstructs/configMap_test.go new file mode 100644 index 0000000..55f11f2 --- /dev/null +++ b/generator/labels/labelstructs/configMap_test.go @@ -0,0 +1,17 @@ +package labelstructs_test + +import ( + "katenary/generator/labels/labelstructs" + "testing" +) + +func TestConfigMapFileFrom(t *testing.T) { + ts := "- foo/bar" + tc2, _ := labelstructs.ConfigMapFileFrom(ts) + if len(tc2) != 1 { + t.Errorf("Expected ConfigMapFile to have 1 item, got %d", len(tc2)) + } + if tc2[0] != "foo/bar" { + t.Errorf("Expected ConfigMapFile to contain 'foo/bar', got %s", tc2[0]) + } +} diff --git a/generator/labels/labelstructs/cronJob_test.go b/generator/labels/labelstructs/cronJob_test.go new file mode 100644 index 0000000..85dfe75 --- /dev/null +++ b/generator/labels/labelstructs/cronJob_test.go @@ -0,0 +1,25 @@ +package labelstructs + +import "testing" + +func TestCronJobFrom(t *testing.T) { + ts := ` +image: fooimage +command: thecommand +schedule: "0/3 0 * * *" +Rbac: false +` + tc, _ := CronJobFrom(ts) + if tc.Image != "fooimage" { + t.Errorf("Expected CronJob image to be 'fooimage', got %s", tc.Image) + } + if tc.Command != "thecommand" { + t.Errorf("Expected CronJob command to be 'thecommand', got %s", tc.Command) + } + if tc.Schedule != "0/3 0 * * *" { + t.Errorf("Expected CronJob schedule to be '0/3 0 * * *', got %s", tc.Schedule) + } + if tc.Rbac != false { + t.Errorf("Expected CronJob rbac to be false, got %t", tc.Rbac) + } +} diff --git a/generator/labels/labelstructs/dependencies_test.go b/generator/labels/labelstructs/dependencies_test.go new file mode 100644 index 0000000..b6fdd6c --- /dev/null +++ b/generator/labels/labelstructs/dependencies_test.go @@ -0,0 +1,14 @@ +package labelstructs + +import "testing" + +func TestDependenciesLabel(t *testing.T) { + ts := "- name: mongodb" + tc, _ := DependenciesFrom(ts) + if len(tc) != 1 { + t.Errorf("Expected DependenciesLabel to have 1 item, got %d", len(tc)) + } + if tc[0].Name != "mongodb" { + t.Errorf("Expected DependenciesLabel to contain 'mongodb', got %s", tc[0].Name) + } +} diff --git a/generator/labels/labelstructs/envFrom_test.go b/generator/labels/labelstructs/envFrom_test.go new file mode 100644 index 0000000..0f35d46 --- /dev/null +++ b/generator/labels/labelstructs/envFrom_test.go @@ -0,0 +1,17 @@ +package labelstructs + +import "testing" + +func TestEnvFromLabel(t *testing.T) { + ts := "- foo\n- bar" + tc, _ := EnvFromFrom(ts) + if len(tc) != 2 { + t.Errorf("Expected EnvFrom to have 2 items, got %d", len(tc)) + } + if tc[0] != "foo" { + t.Errorf("Expected EnvFrom to contain 'foo', got %s", tc[0]) + } + if tc[1] != "bar" { + t.Errorf("Expected EnvFrom to contain 'bar', got %s", tc[1]) + } +} diff --git a/generator/labels/labelstructs/exchangeVolume_test.go b/generator/labels/labelstructs/exchangeVolume_test.go new file mode 100644 index 0000000..a3f380c --- /dev/null +++ b/generator/labels/labelstructs/exchangeVolume_test.go @@ -0,0 +1,17 @@ +package labelstructs + +import "testing" + +func TestExchangeVolumeLabel(t *testing.T) { + ts := "- name: exchange-volume\n mountPath: /exchange\n readOnly: true" + tc, _ := NewExchangeVolumes(ts) + if len(tc) != 1 { + t.Errorf("Expected ExchangeVolumeLabel to have 1 item, got %d", len(tc)) + } + if tc[0].Name != "exchange-volume" { + t.Errorf("Expected ExchangeVolumeLabel to contain 'exchange-volume', got %s", tc[0].Name) + } + if tc[0].MountPath != "/exchange" { + t.Errorf("Expected MountPath to be '/exchange', got %s", tc[0].MountPath) + } +} diff --git a/generator/labels/labelstructs/ingress.go b/generator/labels/labelstructs/ingress.go index 34e3429..b7285cb 100644 --- a/generator/labels/labelstructs/ingress.go +++ b/generator/labels/labelstructs/ingress.go @@ -14,10 +14,10 @@ type TLS struct { type Ingress struct { Port *int32 `yaml:"port,omitempty" json:"port,omitempty"` Annotations map[string]string `yaml:"annotations,omitempty" jsonschema:"nullable" json:"annotations,omitempty"` - Hostname string `yaml:"hostname" json:"hostname,omitempty"` + Hostname string `yaml:"hostname,omitempty" json:"hostname,omitempty"` Path *string `yaml:"path,omitempty" json:"path,omitempty"` Class *string `yaml:"class,omitempty" json:"class,omitempty" jsonschema:"default:-"` - Enabled bool `yaml:"enabled" json:"enabled,omitempty"` + Enabled bool `yaml:"enabled,omitempty" json:"enabled,omitempty"` TLS *TLS `yaml:"tls,omitempty" json:"tls,omitempty"` } diff --git a/generator/labels/labelstructs/ingress_test.go b/generator/labels/labelstructs/ingress_test.go new file mode 100644 index 0000000..d4fe8c1 --- /dev/null +++ b/generator/labels/labelstructs/ingress_test.go @@ -0,0 +1,31 @@ +package labelstructs + +import "testing" + +func TestIngressLabel(t *testing.T) { + ts := "\nhostname: example.com\npath: /\nenabled: true\nport: 8888" + tc, err := IngressFrom(ts) + if err != nil { + t.Errorf("Error parsing IngressLabel: %v", err) + } + if tc.Hostname != "example.com" { + t.Errorf("Expected IngressLabel to contain 'example.com', got %s", tc.Hostname) + } + if tc.Path == nil || *tc.Path != "/" { + t.Errorf("Expected IngressLabel to contain '/', got %v", tc.Path) + } + if tc.Enabled != true { + t.Errorf("Expected IngressLabel to be enabled, got %v", tc.Enabled) + } + if tc.Port == nil || *tc.Port != 8888 { + t.Errorf("Expected IngressLabel to have port 8888, got %d", tc.Port) + } +} + +func TestIngressLabelNoPort(t *testing.T) { + ts := "\nhostname: example.com\npath: /\nenabled: true" + _, err := IngressFrom(ts) + if err == nil { + t.Errorf("Expected error when parsing IngressLabel without port, got nil") + } +} diff --git a/generator/labels/labelstructs/mapenv_test.go b/generator/labels/labelstructs/mapenv_test.go new file mode 100644 index 0000000..67171c1 --- /dev/null +++ b/generator/labels/labelstructs/mapenv_test.go @@ -0,0 +1,11 @@ +package labelstructs + +import "testing" + +func TestConfigMapLabel(t *testing.T) { + ts := "foo: bar" + tc, _ := MapEnvFrom(ts) + if len(tc) != 1 { + t.Errorf("Expected ConfigMapFile to have 1 item, got %d", len(tc)) + } +} diff --git a/generator/labels/labelstructs/ports_test.go b/generator/labels/labelstructs/ports_test.go new file mode 100644 index 0000000..032568b --- /dev/null +++ b/generator/labels/labelstructs/ports_test.go @@ -0,0 +1,23 @@ +package labelstructs + +import "testing" + +func TestPortsFromLabel(t *testing.T) { + data := "- 8080\n- 9090\n" + expected := Ports{8080, 9090} + + ports, err := PortsFrom(data) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + + if len(ports) != len(expected) { + t.Fatalf("expected length %d, got %d", len(expected), len(ports)) + } + + for i, port := range ports { + if port != expected[i] { + t.Errorf("expected port %d at index %d, got %d", expected[i], i, port) + } + } +} diff --git a/generator/labels/labelstructs/probes_test.go b/generator/labels/labelstructs/probes_test.go new file mode 100644 index 0000000..2ceaf4c --- /dev/null +++ b/generator/labels/labelstructs/probes_test.go @@ -0,0 +1,16 @@ +package labelstructs + +import "testing" + +func TestProbesLabel(t *testing.T) { + readiness := "readinessProbe:\n httpGet:\n path: /healthz\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10" + tc, err := ProbeFrom(readiness) + if err != nil { + t.Errorf("Error parsing ProbesLabel: %v %v", err, tc) + } + liveness := "livenessProbe:\n httpGet:\n path: /healthz\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10" + tc2, err := ProbeFrom(liveness) + if err != nil { + t.Errorf("Error parsing ProbesLabel: %v %v", err, tc2) + } +} diff --git a/generator/labels/labelstructs/secrets_test.go b/generator/labels/labelstructs/secrets_test.go new file mode 100644 index 0000000..5e34b08 --- /dev/null +++ b/generator/labels/labelstructs/secrets_test.go @@ -0,0 +1,17 @@ +package labelstructs + +import "testing" + +func TestSecretLabel(t *testing.T) { + data := "- foo\n- bar" + tc, err := SecretsFrom(data) + if err != nil { + t.Errorf("Error parsing SecretLabel: %v %v", err, tc) + } + items := []string{"foo", "bar"} + for i, item := range tc { + if item != items[i] { + t.Errorf("Expected SecretLabel to contain '%s', got '%s'", items[i], item) + } + } +} diff --git a/generator/labels/labelstructs/valueFrom_test.go b/generator/labels/labelstructs/valueFrom_test.go new file mode 100644 index 0000000..5eb1f15 --- /dev/null +++ b/generator/labels/labelstructs/valueFrom_test.go @@ -0,0 +1,25 @@ +package labelstructs + +import ( + "testing" +) + +func TestValueFromLabel(t *testing.T) { + data := "data: foo\ndata2: bar" + tc, err := GetValueFrom(data) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if tc == nil { + t.Fatalf("expected non-nil map, got nil") + } + if len(*tc) != 2 { + t.Errorf("expected 2 items, got %d", len(*tc)) + } + if (*tc)["data"] != "foo" { + t.Errorf("expected 'data' to be 'foo', got %s", (*tc)["data"]) + } + if (*tc)["data2"] != "bar" { + t.Errorf("expected 'data2' to be 'bar', got %s", (*tc)["data2"]) + } +}