Files
capsule/api/v1beta2/resourcepoolclaim_func_test.go

170 lines
4.3 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package v1beta2_test
import (
"testing"
"github.com/stretchr/testify/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/pkg/api/meta"
)
func TestIsBoundToResourcePool(t *testing.T) {
tests := []struct {
name string
claim capsulev1beta2.ResourcePoolClaim
expected bool
}{
{
name: "bound to resource pool (Assigned=True)",
claim: capsulev1beta2.ResourcePoolClaim{
Status: capsulev1beta2.ResourcePoolClaimStatus{
Condition: metav1.Condition{
Type: meta.BoundCondition,
Status: metav1.ConditionTrue,
Reason: meta.SucceededReason,
Message: "reconciled",
LastTransitionTime: metav1.Now(),
},
},
},
},
{
name: "not bound - wrong condition type",
claim: capsulev1beta2.ResourcePoolClaim{
Status: capsulev1beta2.ResourcePoolClaimStatus{
Conditions: meta.ConditionList{
meta.Condition{
Type: meta.AssignedCondition,
Status: metav1.ConditionTrue,
Reason: meta.SucceededReason,
Message: "reconciled",
LastTransitionTime: metav1.Now(),
},
},
},
},
expected: false,
},
{
name: "not bound - status not true",
claim: capsulev1beta2.ResourcePoolClaim{
Status: capsulev1beta2.ResourcePoolClaimStatus{
Conditions: meta.ConditionList{
meta.Condition{
Type: meta.AssignedCondition,
Status: metav1.ConditionTrue,
Reason: meta.SucceededReason,
Message: "reconciled",
LastTransitionTime: metav1.Now(),
},
},
},
},
expected: false,
},
{
name: "not bound - empty condition",
claim: capsulev1beta2.ResourcePoolClaim{
Status: capsulev1beta2.ResourcePoolClaimStatus{},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
actual := tt.claim.IsBoundInResourcePool()
assert.Equal(t, tt.expected, actual)
})
}
}
func TestGetPool(t *testing.T) {
tests := []struct {
name string
claim capsulev1beta2.ResourcePoolClaim
expected string
}{
{
name: "returns status pool name when set",
claim: capsulev1beta2.ResourcePoolClaim{
Spec: capsulev1beta2.ResourcePoolClaimSpec{
Pool: "spec-pool",
},
Status: capsulev1beta2.ResourcePoolClaimStatus{
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
Name: meta.RFC1123Name("status-pool"),
},
},
},
expected: "status-pool",
},
{
name: "falls back to spec pool when status pool name is empty",
claim: capsulev1beta2.ResourcePoolClaim{
Spec: capsulev1beta2.ResourcePoolClaimSpec{
Pool: "spec-pool",
},
Status: capsulev1beta2.ResourcePoolClaimStatus{
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
Name: meta.RFC1123Name(""),
},
},
},
expected: "spec-pool",
},
{
name: "falls back to spec pool when status pool struct is zero-value",
claim: capsulev1beta2.ResourcePoolClaim{
Spec: capsulev1beta2.ResourcePoolClaimSpec{
Pool: "spec-pool",
},
Status: capsulev1beta2.ResourcePoolClaimStatus{
Pool: meta.LocalRFC1123ObjectReferenceWithUID{},
},
},
expected: "spec-pool",
},
{
name: "returns empty when both status and spec are empty",
claim: capsulev1beta2.ResourcePoolClaim{
Spec: capsulev1beta2.ResourcePoolClaimSpec{
Pool: "",
},
Status: capsulev1beta2.ResourcePoolClaimStatus{
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
Name: meta.RFC1123Name(""),
},
},
},
expected: "",
},
{
name: "status wins even if spec differs",
claim: capsulev1beta2.ResourcePoolClaim{
Spec: capsulev1beta2.ResourcePoolClaimSpec{
Pool: "spec-pool",
},
Status: capsulev1beta2.ResourcePoolClaimStatus{
Pool: meta.LocalRFC1123ObjectReferenceWithUID{
Name: meta.RFC1123Name("status-pool"),
},
},
},
expected: "status-pool",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
actual := tt.claim.GetPool()
assert.Equal(t, tt.expected, actual)
})
}
}