87 lines
2.7 KiB
Go
87 lines
2.7 KiB
Go
package k8s
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
fakedynamic "k8s.io/client-go/dynamic/fake"
|
|
"k8s.io/client-go/kubernetes/fake"
|
|
)
|
|
|
|
func TestEnsureNamespace(t *testing.T) {
|
|
t.Run("creates_new_namespace", func(t *testing.T) {
|
|
client := NewClientWithClientset(fake.NewSimpleClientset(), fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()), testCfg)
|
|
ctx := context.Background()
|
|
|
|
err := client.EnsureNamespace(ctx, "alice")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
|
|
ns, err := client.Clientset.CoreV1().Namespaces().Get(ctx, "dev-alice", metav1.GetOptions{})
|
|
if err != nil {
|
|
t.Fatalf("failed to get namespace: %v", err)
|
|
}
|
|
if ns.Name != "dev-alice" {
|
|
t.Errorf("expected namespace dev-alice, got %s", ns.Name)
|
|
}
|
|
if ns.Labels["app"] != "dev-pod" {
|
|
t.Errorf("expected label app=dev-pod, got %s", ns.Labels["app"])
|
|
}
|
|
if ns.Labels["managed-by"] != "dev-pod-api" {
|
|
t.Errorf("expected label managed-by=dev-pod-api, got %s", ns.Labels["managed-by"])
|
|
}
|
|
if ns.Labels["user"] != "alice" {
|
|
t.Errorf("expected label user=alice, got %s", ns.Labels["user"])
|
|
}
|
|
})
|
|
|
|
t.Run("idempotent_on_existing_namespace", func(t *testing.T) {
|
|
client := NewClientWithClientset(fake.NewSimpleClientset(), fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()), testCfg)
|
|
ctx := context.Background()
|
|
|
|
// Create twice - second call should not error
|
|
err := client.EnsureNamespace(ctx, "bob")
|
|
if err != nil {
|
|
t.Fatalf("first create failed: %v", err)
|
|
}
|
|
err = client.EnsureNamespace(ctx, "bob")
|
|
if err != nil {
|
|
t.Fatalf("second create should be idempotent, got: %v", err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestDeleteNamespace(t *testing.T) {
|
|
t.Run("deletes_existing_namespace", func(t *testing.T) {
|
|
client := NewClientWithClientset(fake.NewSimpleClientset(), fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()), testCfg)
|
|
ctx := context.Background()
|
|
|
|
err := client.EnsureNamespace(ctx, "alice")
|
|
if err != nil {
|
|
t.Fatalf("setup failed: %v", err)
|
|
}
|
|
|
|
err = client.DeleteNamespace(ctx, "alice")
|
|
if err != nil {
|
|
t.Fatalf("delete failed: %v", err)
|
|
}
|
|
|
|
_, err = client.Clientset.CoreV1().Namespaces().Get(ctx, "dev-alice", metav1.GetOptions{})
|
|
if err == nil {
|
|
t.Error("expected namespace to be deleted")
|
|
}
|
|
})
|
|
|
|
t.Run("no_error_on_nonexistent_namespace", func(t *testing.T) {
|
|
client := NewClientWithClientset(fake.NewSimpleClientset(), fakedynamic.NewSimpleDynamicClient(runtime.NewScheme()), testCfg)
|
|
ctx := context.Background()
|
|
|
|
err := client.DeleteNamespace(ctx, "nonexistent")
|
|
if err != nil {
|
|
t.Fatalf("expected no error for nonexistent namespace, got: %v", err)
|
|
}
|
|
})
|
|
}
|