unit and integration tests
apiserver dedups and adds warning in CREATE/UPDATE/PATCH requests; also handles duplication caused by mutating admission. Kubernetes-commit: 8bcf34a203efa596ac3b65da9afd6b6c764e78a9
This commit is contained in:
parent
00bc4d7843
commit
77d77260fb
|
|
@ -1113,3 +1113,230 @@ want: %#+v`, got, converted)
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDedupOwnerReferences(t *testing.T) {
|
||||
falseA := false
|
||||
falseB := false
|
||||
testCases := []struct {
|
||||
name string
|
||||
ownerReferences []metav1.OwnerReference
|
||||
expected []metav1.OwnerReference
|
||||
}{
|
||||
{
|
||||
name: "simple multiple duplicates",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "2",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "2",
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "2",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "don't dedup same uid different name entries",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name1",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name2",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name1",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name2",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "don't dedup same uid different API version entries",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion1",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion2",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion1",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion2",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "dedup memory-equal entries",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "dedup semantic-equal entries",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseB,
|
||||
BlockOwnerDeletion: &falseB,
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "don't dedup semantic-different entries",
|
||||
ownerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
expected: []metav1.OwnerReference{
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
Controller: &falseA,
|
||||
BlockOwnerDeletion: &falseA,
|
||||
},
|
||||
{
|
||||
APIVersion: "customresourceVersion",
|
||||
Kind: "customresourceKind",
|
||||
Name: "name",
|
||||
UID: "1",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
deduped, _ := dedupOwnerReferences(tc.ownerReferences)
|
||||
if !apiequality.Semantic.DeepEqual(deduped, tc.expected) {
|
||||
t.Errorf("diff: %v", diff.ObjectReflectDiff(deduped, tc.expected))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue