Skip to content

Commit 86d5cc6

Browse files
[release-1.15] workaround DeepDerivative CreationTimestamp comparison (#8234)
workaround DeepDerivative CreationTimestamp comparison Co-authored-by: Marek Schmidt <[email protected]>
1 parent 7fedbd0 commit 86d5cc6

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

pkg/auth/serviceaccount.go

+3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ func EnsureOIDCServiceAccountExistsForResource(ctx context.Context, serviceAccou
109109
return fmt.Errorf("service account %s not owned by %s %s", sa.Name, gvk.Kind, objectMeta.Name)
110110
}
111111

112+
// DeepDerivative does not understand default metav1.Time{} as an empty value
113+
expected.CreationTimestamp = sa.CreationTimestamp
114+
112115
if !equality.Semantic.DeepDerivative(expected, sa) {
113116
expected.ResourceVersion = sa.ResourceVersion
114117

pkg/auth/serviceaccount_test.go

+41-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ package auth
1919
import (
2020
"context"
2121
"testing"
22+
"time"
2223

24+
"k8s.io/apimachinery/pkg/api/equality"
25+
clientgotesting "k8s.io/client-go/testing"
2326
duckv1 "knative.dev/pkg/apis/duck/v1"
2427
kubeclient "knative.dev/pkg/client/injection/kube/client/fake"
2528

@@ -133,18 +136,51 @@ func TestEnsureOIDCServiceAccountExistsForResource(t *testing.T) {
133136
eventtypes := make([]runtime.Object, 0, 10)
134137
listers := rttestingv1.NewListers(eventtypes)
135138

136-
err := EnsureOIDCServiceAccountExistsForResource(ctx, listers.GetServiceAccountLister(), kubeclient.Get(ctx), gvk, objectMeta)
137-
if err != nil {
138-
t.Errorf("EnsureOIDCServiceAccountExistsForResource failed: %s", err)
139+
client := kubeclient.Get(ctx)
139140

141+
err := EnsureOIDCServiceAccountExistsForResource(ctx, listers.GetServiceAccountLister(), client, gvk, objectMeta)
142+
if err != nil {
143+
t.Fatalf("EnsureOIDCServiceAccountExistsForResource failed: %s", err)
140144
}
141145
expected := GetOIDCServiceAccountForResource(gvk, objectMeta)
142146
sa, err := kubeclient.Get(ctx).CoreV1().ServiceAccounts(objectMeta.Namespace).Get(context.TODO(), expected.Name, metav1.GetOptions{})
143147
if err != nil {
144-
t.Errorf("get ServiceAccounts failed: %s", err)
148+
t.Fatalf("get ServiceAccounts failed: %s", err)
145149
}
146150
if sa == nil || sa.Name != expected.Name {
147-
t.Errorf("EnsureOIDCServiceAccountExistsForResource create ServiceAccounts failed: %s", err)
151+
t.Fatalf("EnsureOIDCServiceAccountExistsForResource create ServiceAccounts failed: %s", err)
152+
}
153+
154+
updated := expected.DeepCopy()
155+
updated.Secrets = []v1.ObjectReference{{
156+
Kind: "Secret",
157+
Name: "test-secret",
158+
APIVersion: "v1",
159+
}}
160+
updated.Annotations["testannotation"] = "testvalue"
161+
updated.CreationTimestamp = metav1.Time{Time: time.Now()}
162+
163+
listers = rttestingv1.NewListers([]runtime.Object{updated})
164+
165+
_, err = client.CoreV1().ServiceAccounts(objectMeta.Namespace).Update(context.TODO(), updated, metav1.UpdateOptions{})
166+
if err != nil {
167+
t.Fatalf("Update ServiceAccounts failed: %s", err)
168+
}
169+
err = EnsureOIDCServiceAccountExistsForResource(ctx, listers.GetServiceAccountLister(), client, gvk, objectMeta)
170+
if err != nil {
171+
t.Fatalf("EnsureOIDCServiceAccountExistsForResource failed: %s", err)
172+
}
173+
client.Fake.AddReactor("*", "*", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) {
174+
t.Fatalf("Action detected %#v", action)
175+
return
176+
})
177+
sa, err = client.CoreV1().ServiceAccounts(objectMeta.Namespace).Get(context.TODO(), expected.Name, metav1.GetOptions{})
178+
if err != nil {
179+
t.Fatalf("get ServiceAccounts failed: %s", err)
180+
}
181+
182+
if len(sa.Secrets) != len(updated.Secrets) || !equality.Semantic.DeepEqual(sa.Secrets, updated.Secrets) {
183+
t.Fatalf("Got secrets is not equal to updated secret, got %#v, want %#v", sa.Secrets, updated.Secrets)
148184
}
149185
}
150186

0 commit comments

Comments
 (0)