From b5d1135b947e8b663554c494335abd63b10d03f8 Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Mon, 3 Jun 2024 14:59:31 -0400 Subject: [PATCH] Apply feedback Kubernetes-commit: 13f809478f9322341a04715cda1b3912a9e470d5 --- .../handlers/fieldmanager/equality.go | 3 +- .../handlers/fieldmanager/equality_test.go | 31 +++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/pkg/endpoints/handlers/fieldmanager/equality.go b/pkg/endpoints/handlers/fieldmanager/equality.go index 09afc2609..6065607d5 100644 --- a/pkg/endpoints/handlers/fieldmanager/equality.go +++ b/pkg/endpoints/handlers/fieldmanager/equality.go @@ -86,7 +86,8 @@ func equalIgnoringValueAtPath(a, b any, path []string) bool { aMap, aOk := a.(map[string]any) bMap, bOk := b.(map[string]any) if !aOk || !bOk { - return !avoidTimestampEqualities.DeepEqual(a, b) + // Can't traverse into non-maps, ignore + return true } if len(aMap) != len(bMap) { return false diff --git a/pkg/endpoints/handlers/fieldmanager/equality_test.go b/pkg/endpoints/handlers/fieldmanager/equality_test.go index 04c328f64..68b786f85 100644 --- a/pkg/endpoints/handlers/fieldmanager/equality_test.go +++ b/pkg/endpoints/handlers/fieldmanager/equality_test.go @@ -1,5 +1,5 @@ /* -Copyright 20214The Kubernetes Authors. +Copyright 2024 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -91,7 +91,7 @@ func TestEqualIgnoringFieldValueAtPath(t *testing.T) { want: false, }, { - name: "extra spec fields in object a", + name: "extra spec field", a: map[string]any{ "metadata": map[string]any{ "labels": map[string]any{"env": "dev"}, @@ -114,7 +114,7 @@ func TestEqualIgnoringFieldValueAtPath(t *testing.T) { want: false, }, { - name: "different spec field in object b", + name: "different spec field", a: map[string]any{ "metadata": map[string]any{ "labels": map[string]any{"env": "dev"}, @@ -158,6 +158,26 @@ func TestEqualIgnoringFieldValueAtPath(t *testing.T) { }, want: true, }, + { + name: "wrong type for metadata result in differences being ignored", + a: map[string]any{ + "metadata": []any{ + "something", + }, + "spec": map[string]any{ + "field": "value", + }, + }, + b: map[string]any{ + "metadata": []any{ + "something else", + }, + "spec": map[string]any{ + "field": "value", + }, + }, + want: true, + }, } path := []string{"metadata", "managedFields"} @@ -168,6 +188,11 @@ func TestEqualIgnoringFieldValueAtPath(t *testing.T) { if actual != c.want { t.Error("Expected equality check to return ", c.want, ", but got ", actual) } + // Check that equality is commutative + actual = equalIgnoringValueAtPath(c.b, c.a, path) + if actual != c.want { + t.Error("Expected equality check to return ", c.want, ", but got ", actual) + } }) } }