mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 23:47:50 +00:00
add conditions for remaining object totals during ns termination
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
||||
"testing"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
|
||||
func TestUpdateConditions(t *testing.T) {
|
||||
@@ -46,6 +47,8 @@ func TestUpdateConditions(t *testing.T) {
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionDiscoveryFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionGVParsingFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionContentFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceContentRemaining),
|
||||
*newSuccessfulCondition(v1.NamespaceFinalizersRemaining),
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -61,6 +64,8 @@ func TestUpdateConditions(t *testing.T) {
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionDiscoveryFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionGVParsingFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionContentFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceContentRemaining),
|
||||
*newSuccessfulCondition(v1.NamespaceFinalizersRemaining),
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -77,6 +82,8 @@ func TestUpdateConditions(t *testing.T) {
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionGVParsingFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionDiscoveryFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionContentFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceContentRemaining),
|
||||
*newSuccessfulCondition(v1.NamespaceFinalizersRemaining),
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -95,6 +102,8 @@ func TestUpdateConditions(t *testing.T) {
|
||||
{Type: v1.NamespaceDeletionGVParsingFailure, Status: v1.ConditionTrue, Reason: "foo", Message: "bar"},
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionDiscoveryFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionContentFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceContentRemaining),
|
||||
*newSuccessfulCondition(v1.NamespaceFinalizersRemaining),
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -112,6 +121,8 @@ func TestUpdateConditions(t *testing.T) {
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionDiscoveryFailure),
|
||||
{Type: v1.NamespaceDeletionGVParsingFailure, Status: v1.ConditionTrue, Reason: "foo", Message: "bar"},
|
||||
*newSuccessfulCondition(v1.NamespaceDeletionContentFailure),
|
||||
*newSuccessfulCondition(v1.NamespaceContentRemaining),
|
||||
*newSuccessfulCondition(v1.NamespaceFinalizersRemaining),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -135,3 +146,89 @@ func TestUpdateConditions(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestProcessContentTotals(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
contentTotals allGVRDeletionMetadata
|
||||
expecteds []v1.NamespaceCondition
|
||||
}{
|
||||
{
|
||||
name: "nothing",
|
||||
|
||||
contentTotals: allGVRDeletionMetadata{
|
||||
gvrToNumRemaining: map[schema.GroupVersionResource]int{},
|
||||
finalizersToNumRemaining: map[string]int{},
|
||||
},
|
||||
expecteds: []v1.NamespaceCondition{},
|
||||
},
|
||||
{
|
||||
name: "just remaining",
|
||||
|
||||
contentTotals: allGVRDeletionMetadata{
|
||||
gvrToNumRemaining: map[schema.GroupVersionResource]int{
|
||||
{Group: "apps.k8s.io", Resource: "daemonsets"}: 5,
|
||||
{Group: "apps.k8s.io", Resource: "deployments"}: 5,
|
||||
},
|
||||
finalizersToNumRemaining: map[string]int{},
|
||||
},
|
||||
expecteds: []v1.NamespaceCondition{
|
||||
{Type: v1.NamespaceContentRemaining, Status: v1.ConditionTrue, Reason: "SomeResourcesRemain", Message: `Some resources are remaining: daemonsets.apps.k8s.io has 5 resource instances, deployments.apps.k8s.io has 5 resource instances`},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "just finalizers", // this shouldn't happen
|
||||
|
||||
contentTotals: allGVRDeletionMetadata{
|
||||
gvrToNumRemaining: map[schema.GroupVersionResource]int{},
|
||||
finalizersToNumRemaining: map[string]int{
|
||||
"service-catalog": 6,
|
||||
"kubedb": 5,
|
||||
},
|
||||
},
|
||||
expecteds: []v1.NamespaceCondition{
|
||||
{Type: v1.NamespaceFinalizersRemaining, Status: v1.ConditionTrue, Reason: "SomeFinalizerRemain", Message: `Some finalizers are remaining: kubedb in 5 resource instances, service-catalog in 6 resource instances`},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "both",
|
||||
|
||||
contentTotals: allGVRDeletionMetadata{
|
||||
gvrToNumRemaining: map[schema.GroupVersionResource]int{
|
||||
{Group: "apps.k8s.io", Resource: "daemonsets"}: 5,
|
||||
{Group: "apps.k8s.io", Resource: "deployments"}: 5,
|
||||
},
|
||||
finalizersToNumRemaining: map[string]int{
|
||||
"service-catalog": 6,
|
||||
"kubedb": 5,
|
||||
},
|
||||
},
|
||||
expecteds: []v1.NamespaceCondition{
|
||||
{Type: v1.NamespaceContentRemaining, Status: v1.ConditionTrue, Reason: "SomeResourcesRemain", Message: `Some resources are remaining: daemonsets.apps.k8s.io has 5 resource instances, deployments.apps.k8s.io has 5 resource instances`},
|
||||
{Type: v1.NamespaceFinalizersRemaining, Status: v1.ConditionTrue, Reason: "SomeFinalizerRemain", Message: `Some finalizers are remaining: kubedb in 5 resource instances, service-catalog in 6 resource instances`},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
u := namespaceConditionUpdater{}
|
||||
|
||||
u.ProcessContentTotals(test.contentTotals)
|
||||
|
||||
actuals := u.newConditions
|
||||
if len(actuals) != len(test.expecteds) {
|
||||
t.Fatal(actuals)
|
||||
}
|
||||
for i := range actuals {
|
||||
actual := actuals[i]
|
||||
expected := test.expecteds[i]
|
||||
expected.LastTransitionTime = actual.LastTransitionTime
|
||||
if !reflect.DeepEqual(expected, actual) {
|
||||
t.Error(actual)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user