mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-19 04:26:45 +00:00
chore: move controller main to cmd/controller (#1962)
Signed-off-by: bakito <github@bakito.ch>
This commit is contained in:
@@ -12,7 +12,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
|
||||
"github.com/projectcapsule/capsule/api/v1beta2"
|
||||
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
||||
"github.com/projectcapsule/capsule/pkg/api/meta"
|
||||
)
|
||||
|
||||
@@ -21,7 +21,7 @@ func TestGetClaimFromStatus(t *testing.T) {
|
||||
testUID := types.UID("test-uid")
|
||||
otherUID := types.UID("wrong-uid")
|
||||
|
||||
claim := &v1beta2.ResourcePoolClaim{
|
||||
claim := &capsulev1beta2.ResourcePoolClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "claim-a",
|
||||
Namespace: ns,
|
||||
@@ -29,11 +29,11 @@ func TestGetClaimFromStatus(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
ns: {
|
||||
&v1beta2.ResourcePoolClaimsItem{
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{
|
||||
NamespacedRFC1123ObjectReferenceWithNamespaceWithUID: meta.NamespacedRFC1123ObjectReferenceWithNamespaceWithUID{
|
||||
UID: testUID,
|
||||
},
|
||||
@@ -77,21 +77,21 @@ func makeResourceList(cpu, memory string) corev1.ResourceList {
|
||||
}
|
||||
}
|
||||
|
||||
func makeClaim(name, ns string, uid types.UID, res corev1.ResourceList) *v1beta2.ResourcePoolClaim {
|
||||
return &v1beta2.ResourcePoolClaim{
|
||||
func makeClaim(name, ns string, uid types.UID, res corev1.ResourceList) *capsulev1beta2.ResourcePoolClaim {
|
||||
return &capsulev1beta2.ResourcePoolClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Namespace: ns,
|
||||
UID: uid,
|
||||
},
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
ResourceClaims: res,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssignNamespaces(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{}
|
||||
pool := &capsulev1beta2.ResourcePool{}
|
||||
|
||||
namespaces := []corev1.Namespace{
|
||||
{ObjectMeta: metav1.ObjectMeta{Name: "active-ns"}, Status: corev1.NamespaceStatus{Phase: corev1.NamespaceActive}},
|
||||
@@ -105,12 +105,12 @@ func TestAssignNamespaces(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAssignClaims(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
"ns": {
|
||||
&v1beta2.ResourcePoolClaimsItem{},
|
||||
&v1beta2.ResourcePoolClaimsItem{},
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{},
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -121,7 +121,7 @@ func TestAssignClaims(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAddRemoveClaimToStatus(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{}
|
||||
pool := &capsulev1beta2.ResourcePool{}
|
||||
|
||||
claim := makeClaim("claim-1", "ns", "uid-1", makeResourceList("1", "1Gi"))
|
||||
pool.AddClaimToStatus(claim)
|
||||
@@ -136,16 +136,16 @@ func TestAddRemoveClaimToStatus(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCalculateResources(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Allocation: v1beta2.ResourcePoolQuotaStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Allocation: capsulev1beta2.ResourcePoolQuotaStatus{
|
||||
Hard: corev1.ResourceList{
|
||||
corev1.ResourceLimitsCPU: resource.MustParse("2"),
|
||||
},
|
||||
},
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
"ns": {
|
||||
&v1beta2.ResourcePoolClaimsItem{
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{
|
||||
Claims: corev1.ResourceList{
|
||||
corev1.ResourceLimitsCPU: resource.MustParse("1"),
|
||||
},
|
||||
@@ -165,9 +165,9 @@ func TestCalculateResources(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCanClaimFromPool(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Allocation: v1beta2.ResourcePoolQuotaStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Allocation: capsulev1beta2.ResourcePoolQuotaStatus{
|
||||
Hard: corev1.ResourceList{
|
||||
corev1.ResourceLimitsMemory: resource.MustParse("1Gi"),
|
||||
},
|
||||
@@ -190,16 +190,16 @@ func TestCanClaimFromPool(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetResourceQuotaHardResources(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Spec: v1beta2.ResourcePoolSpec{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Spec: capsulev1beta2.ResourcePoolSpec{
|
||||
Defaults: corev1.ResourceList{
|
||||
corev1.ResourceLimitsCPU: resource.MustParse("1"),
|
||||
},
|
||||
},
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
"ns": {
|
||||
&v1beta2.ResourcePoolClaimsItem{
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{
|
||||
Claims: corev1.ResourceList{
|
||||
corev1.ResourceLimitsCPU: resource.MustParse("1"),
|
||||
},
|
||||
@@ -215,11 +215,11 @@ func TestGetResourceQuotaHardResources(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetNamespaceClaims(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
"ns": {
|
||||
&v1beta2.ResourcePoolClaimsItem{
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{
|
||||
NamespacedRFC1123ObjectReferenceWithNamespaceWithUID: meta.NamespacedRFC1123ObjectReferenceWithNamespaceWithUID{UID: "uid1"},
|
||||
Claims: corev1.ResourceList{
|
||||
corev1.ResourceLimitsCPU: resource.MustParse("1"),
|
||||
@@ -237,11 +237,11 @@ func TestGetNamespaceClaims(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetClaimedByNamespaceClaims(t *testing.T) {
|
||||
pool := &v1beta2.ResourcePool{
|
||||
Status: v1beta2.ResourcePoolStatus{
|
||||
Claims: v1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
Claims: capsulev1beta2.ResourcePoolNamespaceClaimsStatus{
|
||||
"ns1": {
|
||||
&v1beta2.ResourcePoolClaimsItem{
|
||||
&capsulev1beta2.ResourcePoolClaimsItem{
|
||||
Claims: makeResourceList("1", "1Gi"),
|
||||
},
|
||||
},
|
||||
@@ -259,8 +259,8 @@ func TestGetClaimedByNamespaceClaims(t *testing.T) {
|
||||
|
||||
func TestIsBoundToResourcePool_2(t *testing.T) {
|
||||
t.Run("bound to resource pool (Assigned=True)", func(t *testing.T) {
|
||||
claim := &v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim := &capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{},
|
||||
},
|
||||
}
|
||||
@@ -269,8 +269,8 @@ func TestIsBoundToResourcePool_2(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("not bound - wrong condition type", func(t *testing.T) {
|
||||
claim := &v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim := &capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{
|
||||
meta.Condition{},
|
||||
},
|
||||
@@ -285,8 +285,8 @@ func TestIsBoundToResourcePool_2(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("not bound - condition not true", func(t *testing.T) {
|
||||
claim := &v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim := &capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{
|
||||
meta.Condition{},
|
||||
},
|
||||
@@ -301,8 +301,8 @@ func TestIsBoundToResourcePool_2(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("not bound - condition not true", func(t *testing.T) {
|
||||
claim := &v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim := &capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{
|
||||
meta.Condition{},
|
||||
},
|
||||
|
||||
@@ -9,20 +9,20 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
"github.com/projectcapsule/capsule/api/v1beta2"
|
||||
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
||||
"github.com/projectcapsule/capsule/pkg/api/meta"
|
||||
)
|
||||
|
||||
func TestIsBoundToResourcePool(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
claim v1beta2.ResourcePoolClaim
|
||||
claim capsulev1beta2.ResourcePoolClaim
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "bound to resource pool (Assigned=True)",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Condition: metav1.Condition{
|
||||
Type: meta.BoundCondition,
|
||||
Status: metav1.ConditionTrue,
|
||||
@@ -35,8 +35,8 @@ func TestIsBoundToResourcePool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "not bound - wrong condition type",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{
|
||||
meta.Condition{
|
||||
Type: meta.AssignedCondition,
|
||||
@@ -52,8 +52,8 @@ func TestIsBoundToResourcePool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "not bound - status not true",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Conditions: meta.ConditionList{
|
||||
meta.Condition{
|
||||
Type: meta.AssignedCondition,
|
||||
@@ -69,8 +69,8 @@ func TestIsBoundToResourcePool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "not bound - empty condition",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Status: v1beta2.ResourcePoolClaimStatus{},
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{},
|
||||
},
|
||||
expected: false,
|
||||
},
|
||||
@@ -87,16 +87,16 @@ func TestIsBoundToResourcePool(t *testing.T) {
|
||||
func TestGetPool(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
claim v1beta2.ResourcePoolClaim
|
||||
claim capsulev1beta2.ResourcePoolClaim
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "returns status pool name when set",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
Pool: "spec-pool",
|
||||
},
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
|
||||
Name: meta.RFC1123Name("status-pool"),
|
||||
},
|
||||
@@ -106,11 +106,11 @@ func TestGetPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "falls back to spec pool when status pool name is empty",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
Pool: "spec-pool",
|
||||
},
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
|
||||
Name: meta.RFC1123Name(""),
|
||||
},
|
||||
@@ -120,11 +120,11 @@ func TestGetPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "falls back to spec pool when status pool struct is zero-value",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
Pool: "spec-pool",
|
||||
},
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Pool: meta.LocalRFC1123ObjectReferenceWithUID{},
|
||||
},
|
||||
},
|
||||
@@ -132,11 +132,11 @@ func TestGetPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "returns empty when both status and spec are empty",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
Pool: "",
|
||||
},
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
|
||||
Name: meta.RFC1123Name(""),
|
||||
},
|
||||
@@ -146,11 +146,11 @@ func TestGetPool(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "status wins even if spec differs",
|
||||
claim: v1beta2.ResourcePoolClaim{
|
||||
Spec: v1beta2.ResourcePoolClaimSpec{
|
||||
claim: capsulev1beta2.ResourcePoolClaim{
|
||||
Spec: capsulev1beta2.ResourcePoolClaimSpec{
|
||||
Pool: "spec-pool",
|
||||
},
|
||||
Status: v1beta2.ResourcePoolClaimStatus{
|
||||
Status: capsulev1beta2.ResourcePoolClaimStatus{
|
||||
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
|
||||
Name: meta.RFC1123Name("status-pool"),
|
||||
},
|
||||
|
||||
@@ -9,13 +9,13 @@ import (
|
||||
|
||||
rbacv1 "k8s.io/api/rbac/v1"
|
||||
|
||||
"github.com/projectcapsule/capsule/api/v1beta2"
|
||||
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
||||
capsulerbac "github.com/projectcapsule/capsule/pkg/api/rbac"
|
||||
)
|
||||
|
||||
func testTenant() *v1beta2.Tenant {
|
||||
return &v1beta2.Tenant{
|
||||
Spec: v1beta2.TenantSpec{
|
||||
func testTenant() *capsulev1beta2.Tenant {
|
||||
return &capsulev1beta2.Tenant{
|
||||
Spec: capsulev1beta2.TenantSpec{
|
||||
AdditionalRoleBindings: []capsulerbac.AdditionalRoleBindingsSpec{
|
||||
{
|
||||
ClusterRoleName: "developer",
|
||||
@@ -39,7 +39,7 @@ func testTenant() *v1beta2.Tenant {
|
||||
},
|
||||
},
|
||||
},
|
||||
Status: v1beta2.TenantStatus{
|
||||
Status: capsulev1beta2.TenantStatus{
|
||||
Owners: capsulerbac.OwnerStatusListSpec{
|
||||
{
|
||||
UserSpec: capsulerbac.UserSpec{
|
||||
@@ -127,8 +127,8 @@ func TestGetSubjectsByClusterRoles(t *testing.T) {
|
||||
func TestGetClusterRolesBySubjectSorted(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tenant := &v1beta2.Tenant{
|
||||
Spec: v1beta2.TenantSpec{
|
||||
tenant := &capsulev1beta2.Tenant{
|
||||
Spec: capsulev1beta2.TenantSpec{
|
||||
AdditionalRoleBindings: []capsulerbac.AdditionalRoleBindingsSpec{
|
||||
{
|
||||
ClusterRoleName: "deployer",
|
||||
@@ -150,7 +150,7 @@ func TestGetClusterRolesBySubjectSorted(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Status: v1beta2.TenantStatus{
|
||||
Status: capsulev1beta2.TenantStatus{
|
||||
Owners: capsulerbac.OwnerStatusListSpec{
|
||||
{
|
||||
UserSpec: capsulerbac.UserSpec{
|
||||
@@ -229,7 +229,7 @@ func TestGetClusterRolesBySubjectSorted(t *testing.T) {
|
||||
t.Run("empty tenant yields empty slice", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
empty := &v1beta2.Tenant{}
|
||||
empty := &capsulev1beta2.Tenant{}
|
||||
got := empty.GetClusterRolesBySubject(nil)
|
||||
if len(got) != 0 {
|
||||
t.Fatalf("expected empty, got %#v", got)
|
||||
|
||||
Reference in New Issue
Block a user