Ctrl K
ComunidadGuías…

api/handler/service_tenant_namespace_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package handler

import (
	"context"
	"testing"

	"github.com/goodrain/rainbond/db"
	dbdao "github.com/goodrain/rainbond/db/dao"
	dbmodel "github.com/goodrain/rainbond/db/model"
	"github.com/goodrain/rainbond/util/constants"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	kubefake "k8s.io/client-go/kubernetes/fake"
)

func TestMarkExistingNamespaceManagedPreservesExistingLabels(t *testing.T) {
	kubeClient := kubefake.NewSimpleClientset(&corev1.Namespace{
		ObjectMeta: metav1.ObjectMeta{
			Name: "default",
			Labels: map[string]string{
				"kubernetes.io/metadata.name": "default",
			},
		},
	})
	action := &ServiceAction{kubeClient: kubeClient}

	exists, err := action.markExistingNamespaceManaged(context.Background(), "default")
	if err != nil {
		t.Fatalf("mark namespace managed: %v", err)
	}
	if !exists {
		t.Fatalf("expected default namespace to exist")
	}

	ns, err := kubeClient.CoreV1().Namespaces().Get(context.Background(), "default", metav1.GetOptions{})
	if err != nil {
		t.Fatalf("get namespace: %v", err)
	}
	if got := ns.Labels[constants.ResourceManagedByLabel]; got != constants.Rainbond {
		t.Fatalf("expected managed-by label %q, got %q", constants.Rainbond, got)
	}
	if got := ns.Labels["kubernetes.io/metadata.name"]; got != "default" {
		t.Fatalf("expected existing label to be preserved, got %q", got)
	}
}

type tenantNamespaceLabelTestManager struct {
	db.Manager
	tenantDao dbdao.TenantDao
}

func (m tenantNamespaceLabelTestManager) TenantDao() dbdao.TenantDao {
	return m.tenantDao
}

type tenantNamespaceLabelTenantDao struct {
	dbdao.TenantDao
	tenants []*dbmodel.Tenants
}

func (d tenantNamespaceLabelTenantDao) GetALLTenants(query string) ([]*dbmodel.Tenants, error) {
	return d.tenants, nil
}

func TestSyncManagedTenantNamespaceLabelsLabelsExistingTenantNamespaces(t *testing.T) {
	kubeClient := kubefake.NewSimpleClientset(&corev1.Namespace{
		ObjectMeta: metav1.ObjectMeta{
			Name: "default",
			Labels: map[string]string{
				"kubernetes.io/metadata.name": "default",
			},
		},
	})
	manager := tenantNamespaceLabelTestManager{
		tenantDao: tenantNamespaceLabelTenantDao{
			tenants: []*dbmodel.Tenants{
				{UUID: "tenant-1", Namespace: "default"},
			},
		},
	}
	action := &ServiceAction{
		kubeClient: kubeClient,
		dbmanager:  manager,
	}

	if err := action.syncManagedTenantNamespaceLabels(context.Background()); err != nil {
		t.Fatalf("sync tenant namespace labels: %v", err)
	}

	ns, err := kubeClient.CoreV1().Namespaces().Get(context.Background(), "default", metav1.GetOptions{})
	if err != nil {
		t.Fatalf("get namespace: %v", err)
	}
	if got := ns.Labels[constants.ResourceManagedByLabel]; got != constants.Rainbond {
		t.Fatalf("expected managed-by label %q, got %q", constants.Rainbond, got)
	}
	if got := ns.Labels["kubernetes.io/metadata.name"]; got != "default" {
		t.Fatalf("expected existing label to be preserved, got %q", got)
	}
}