Skip to content

Commit 77d7726

Browse files
roycaihwk8s-publishing-bot
authored andcommitted
unit and integration tests
apiserver dedups and adds warning in CREATE/UPDATE/PATCH requests; also handles duplication caused by mutating admission. Kubernetes-commit: 8bcf34a203efa596ac3b65da9afd6b6c764e78a9
1 parent 00bc4d7 commit 77d7726

File tree

1 file changed

+227
-0
lines changed

1 file changed

+227
-0
lines changed

pkg/endpoints/handlers/rest_test.go

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,3 +1113,230 @@ want: %#+v`, got, converted)
11131113
})
11141114
}
11151115
}
1116+
1117+
func TestDedupOwnerReferences(t *testing.T) {
1118+
falseA := false
1119+
falseB := false
1120+
testCases := []struct {
1121+
name string
1122+
ownerReferences []metav1.OwnerReference
1123+
expected []metav1.OwnerReference
1124+
}{
1125+
{
1126+
name: "simple multiple duplicates",
1127+
ownerReferences: []metav1.OwnerReference{
1128+
{
1129+
APIVersion: "customresourceVersion",
1130+
Kind: "customresourceKind",
1131+
Name: "name",
1132+
UID: "1",
1133+
},
1134+
{
1135+
APIVersion: "customresourceVersion",
1136+
Kind: "customresourceKind",
1137+
Name: "name",
1138+
UID: "2",
1139+
},
1140+
{
1141+
APIVersion: "customresourceVersion",
1142+
Kind: "customresourceKind",
1143+
Name: "name",
1144+
UID: "1",
1145+
},
1146+
{
1147+
APIVersion: "customresourceVersion",
1148+
Kind: "customresourceKind",
1149+
Name: "name",
1150+
UID: "1",
1151+
},
1152+
{
1153+
APIVersion: "customresourceVersion",
1154+
Kind: "customresourceKind",
1155+
Name: "name",
1156+
UID: "2",
1157+
},
1158+
},
1159+
expected: []metav1.OwnerReference{
1160+
{
1161+
APIVersion: "customresourceVersion",
1162+
Kind: "customresourceKind",
1163+
Name: "name",
1164+
UID: "1",
1165+
},
1166+
{
1167+
APIVersion: "customresourceVersion",
1168+
Kind: "customresourceKind",
1169+
Name: "name",
1170+
UID: "2",
1171+
},
1172+
},
1173+
},
1174+
{
1175+
name: "don't dedup same uid different name entries",
1176+
ownerReferences: []metav1.OwnerReference{
1177+
{
1178+
APIVersion: "customresourceVersion",
1179+
Kind: "customresourceKind",
1180+
Name: "name1",
1181+
UID: "1",
1182+
},
1183+
{
1184+
APIVersion: "customresourceVersion",
1185+
Kind: "customresourceKind",
1186+
Name: "name2",
1187+
UID: "1",
1188+
},
1189+
},
1190+
expected: []metav1.OwnerReference{
1191+
{
1192+
APIVersion: "customresourceVersion",
1193+
Kind: "customresourceKind",
1194+
Name: "name1",
1195+
UID: "1",
1196+
},
1197+
{
1198+
APIVersion: "customresourceVersion",
1199+
Kind: "customresourceKind",
1200+
Name: "name2",
1201+
UID: "1",
1202+
},
1203+
},
1204+
},
1205+
{
1206+
name: "don't dedup same uid different API version entries",
1207+
ownerReferences: []metav1.OwnerReference{
1208+
{
1209+
APIVersion: "customresourceVersion1",
1210+
Kind: "customresourceKind",
1211+
Name: "name",
1212+
UID: "1",
1213+
},
1214+
{
1215+
APIVersion: "customresourceVersion2",
1216+
Kind: "customresourceKind",
1217+
Name: "name",
1218+
UID: "1",
1219+
},
1220+
},
1221+
expected: []metav1.OwnerReference{
1222+
{
1223+
APIVersion: "customresourceVersion1",
1224+
Kind: "customresourceKind",
1225+
Name: "name",
1226+
UID: "1",
1227+
},
1228+
{
1229+
APIVersion: "customresourceVersion2",
1230+
Kind: "customresourceKind",
1231+
Name: "name",
1232+
UID: "1",
1233+
},
1234+
},
1235+
},
1236+
{
1237+
name: "dedup memory-equal entries",
1238+
ownerReferences: []metav1.OwnerReference{
1239+
{
1240+
APIVersion: "customresourceVersion",
1241+
Kind: "customresourceKind",
1242+
Name: "name",
1243+
UID: "1",
1244+
Controller: &falseA,
1245+
BlockOwnerDeletion: &falseA,
1246+
},
1247+
{
1248+
APIVersion: "customresourceVersion",
1249+
Kind: "customresourceKind",
1250+
Name: "name",
1251+
UID: "1",
1252+
Controller: &falseA,
1253+
BlockOwnerDeletion: &falseA,
1254+
},
1255+
},
1256+
expected: []metav1.OwnerReference{
1257+
{
1258+
APIVersion: "customresourceVersion",
1259+
Kind: "customresourceKind",
1260+
Name: "name",
1261+
UID: "1",
1262+
Controller: &falseA,
1263+
BlockOwnerDeletion: &falseA,
1264+
},
1265+
},
1266+
},
1267+
{
1268+
name: "dedup semantic-equal entries",
1269+
ownerReferences: []metav1.OwnerReference{
1270+
{
1271+
APIVersion: "customresourceVersion",
1272+
Kind: "customresourceKind",
1273+
Name: "name",
1274+
UID: "1",
1275+
Controller: &falseA,
1276+
BlockOwnerDeletion: &falseA,
1277+
},
1278+
{
1279+
APIVersion: "customresourceVersion",
1280+
Kind: "customresourceKind",
1281+
Name: "name",
1282+
UID: "1",
1283+
Controller: &falseB,
1284+
BlockOwnerDeletion: &falseB,
1285+
},
1286+
},
1287+
expected: []metav1.OwnerReference{
1288+
{
1289+
APIVersion: "customresourceVersion",
1290+
Kind: "customresourceKind",
1291+
Name: "name",
1292+
UID: "1",
1293+
Controller: &falseA,
1294+
BlockOwnerDeletion: &falseA,
1295+
},
1296+
},
1297+
},
1298+
{
1299+
name: "don't dedup semantic-different entries",
1300+
ownerReferences: []metav1.OwnerReference{
1301+
{
1302+
APIVersion: "customresourceVersion",
1303+
Kind: "customresourceKind",
1304+
Name: "name",
1305+
UID: "1",
1306+
Controller: &falseA,
1307+
BlockOwnerDeletion: &falseA,
1308+
},
1309+
{
1310+
APIVersion: "customresourceVersion",
1311+
Kind: "customresourceKind",
1312+
Name: "name",
1313+
UID: "1",
1314+
},
1315+
},
1316+
expected: []metav1.OwnerReference{
1317+
{
1318+
APIVersion: "customresourceVersion",
1319+
Kind: "customresourceKind",
1320+
Name: "name",
1321+
UID: "1",
1322+
Controller: &falseA,
1323+
BlockOwnerDeletion: &falseA,
1324+
},
1325+
{
1326+
APIVersion: "customresourceVersion",
1327+
Kind: "customresourceKind",
1328+
Name: "name",
1329+
UID: "1",
1330+
},
1331+
},
1332+
},
1333+
}
1334+
for _, tc := range testCases {
1335+
t.Run(tc.name, func(t *testing.T) {
1336+
deduped, _ := dedupOwnerReferences(tc.ownerReferences)
1337+
if !apiequality.Semantic.DeepEqual(deduped, tc.expected) {
1338+
t.Errorf("diff: %v", diff.ObjectReflectDiff(deduped, tc.expected))
1339+
}
1340+
})
1341+
}
1342+
}

0 commit comments

Comments
 (0)