fetch_ml/tests/integration/traefik_compose_test.go
Jeremie Fraeys 7ff2c6c487
refactor: reorganize integration tests
Move integration-appropriate tests from tests/unit/ to tests/integration/:
- tests/unit/simple_test.go -> tests/integration/simple_test.go
- tests/unit/deployments/traefik_compose_test.go -> tests/integration/traefik_compose_test.go
- tests/unit/worker_trust_test.go -> tests/integration/worker_trust_test.go

Update test package declarations and imports to reflect new locations.

These tests were misplaced in the unit tests directory but actually test
integration between components or external systems (Traefik, worker trust).
2026-03-12 16:37:42 -04:00

119 lines
2.5 KiB
Go

package tests
import (
"os"
"path/filepath"
"runtime"
"strings"
"testing"
"gopkg.in/yaml.v3"
)
func repoRoot(t *testing.T) string {
t.Helper()
_, filename, _, ok := runtime.Caller(0)
if !ok {
t.Fatalf("failed to resolve caller path")
}
return filepath.Clean(filepath.Join(filepath.Dir(filename), "..", ".."))
}
func asMap(t *testing.T, v any) map[string]any {
t.Helper()
m, ok := v.(map[string]any)
if !ok {
t.Fatalf("expected map[string]any, got %T", v)
}
return m
}
func asSlice(t *testing.T, v any) []any {
t.Helper()
s, ok := v.([]any)
if !ok {
t.Fatalf("expected []any, got %T", v)
}
return s
}
func TestProdTraefikComposeHasExpectedConfig(t *testing.T) {
t.Parallel()
composePath := filepath.Join(repoRoot(t), "deployments", "docker-compose.prod.yml")
b, err := os.ReadFile(composePath)
if err != nil {
t.Fatalf("read compose file: %v", err)
}
var doc map[string]any
if err := yaml.Unmarshal(b, &doc); err != nil {
t.Fatalf("parse compose yaml: %v", err)
}
services := asMap(t, doc["services"])
api := asMap(t, services["api-server"])
labels := asSlice(t, api["labels"])
labelStrs := make([]string, 0, len(labels))
for _, l := range labels {
ls, ok := l.(string)
if !ok {
t.Fatalf("expected label string, got %T", l)
}
labelStrs = append(labelStrs, ls)
}
wantLabelPrefixes := []string{
"traefik.enable=true",
"traefik.docker.network=",
"traefik.http.services.fetchml.loadbalancer.server.port=9101",
"traefik.http.routers.fetchml.rule=",
"traefik.http.routers.fetchml.entrypoints=",
"traefik.http.routers.fetchml.tls=true",
}
for _, wantPrefix := range wantLabelPrefixes {
found := false
for _, l := range labelStrs {
if strings.HasPrefix(l, wantPrefix) {
found = true
break
}
}
if !found {
t.Fatalf("missing label with prefix %q; labels=%v", wantPrefix, labelStrs)
}
}
nets := asSlice(t, api["networks"])
foundTraefikNet := false
for _, n := range nets {
ns, ok := n.(string)
if !ok {
t.Fatalf("expected network name string, got %T", n)
}
if ns == "traefik" {
foundTraefikNet = true
break
}
}
if !foundTraefikNet {
t.Fatalf("api-server is not attached to traefik network; networks=%v", nets)
}
networks := asMap(t, doc["networks"])
traefik := asMap(t, networks["traefik"])
external, ok := traefik["external"].(bool)
if !ok {
t.Fatalf("expected networks.traefik.external to be bool, got %T", traefik["external"])
}
if !external {
t.Fatalf("expected networks.traefik.external to be true")
}
}