package k8s import ( "context" "fmt" "time" "github.com/ocdp/cluster-service/internal/domain/entity" "github.com/ocdp/cluster-service/internal/domain/repository" ) type MockTenantClient struct{} func NewMockTenantClient() repository.TenantKubeClient { return &MockTenantClient{} } func (c *MockTenantClient) EnsureTenant(ctx context.Context, cluster *entity.Cluster, binding entity.TenantBinding) error { return binding.Validate() } func (c *MockTenantClient) IssueKubeconfig(ctx context.Context, cluster *entity.Cluster, binding entity.TenantBinding, ttl time.Duration) (*entity.TenantKubeconfig, error) { if err := binding.Validate(); err != nil { return nil, err } expiresAt := time.Now().Add(entity.TenantTokenTTL(ttl)) return &entity.TenantKubeconfig{ Kubeconfig: fmt.Sprintf("apiVersion: v1\nkind: Config\nclusters:\n- name: %s\n cluster:\n server: %s\ncontexts:\n- name: %s\n context:\n cluster: %s\n namespace: %s\n user: %s\ncurrent-context: %s\nusers:\n- name: %s\n user:\n token: mock-ephemeral-token\n", cluster.Name, cluster.Host, binding.Namespace, cluster.Name, binding.Namespace, binding.ServiceAccountName, binding.Namespace, binding.ServiceAccountName), ExpiresAt: expiresAt, }, nil } func (c *MockTenantClient) GetResourceQuotaUsage(ctx context.Context, cluster *entity.Cluster, binding entity.TenantBinding) (*repository.ResourceQuotaUsage, error) { if err := binding.Validate(); err != nil { return nil, err } return &repository.ResourceQuotaUsage{ Hard: resourceVectorFromList(binding.ResourceQuotaHard), Used: repository.ResourceVector{}, }, nil } func (c *MockTenantClient) SuspendTenant(ctx context.Context, cluster *entity.Cluster, binding entity.TenantBinding) error { return binding.Validate() } func (c *MockTenantClient) DeleteTenant(ctx context.Context, cluster *entity.Cluster, binding entity.TenantBinding) error { if err := binding.Validate(); err != nil { return err } switch binding.Namespace { case "", "default", "kube-system", "kube-public", "kube-node-lease": return entity.ErrProtectedNamespace default: return nil } }