1
16
17 package event
18
19 import (
20 "context"
21 "reflect"
22 "testing"
23
24 "github.com/google/go-cmp/cmp"
25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26 "k8s.io/apimachinery/pkg/fields"
27 apitesting "k8s.io/kubernetes/pkg/api/testing"
28 api "k8s.io/kubernetes/pkg/apis/core"
29
30
31 _ "k8s.io/kubernetes/pkg/apis/core/install"
32 )
33
34 func TestGetAttrs(t *testing.T) {
35 eventA := &api.Event{
36 ObjectMeta: metav1.ObjectMeta{
37 Name: "f0118",
38 Namespace: "default",
39 },
40 InvolvedObject: api.ObjectReference{
41 Kind: "Pod",
42 Name: "foo",
43 Namespace: "baz",
44 UID: "long uid string",
45 APIVersion: "v1",
46 ResourceVersion: "0",
47 FieldPath: "",
48 },
49 Reason: "ForTesting",
50 Source: api.EventSource{Component: "test"},
51 Type: api.EventTypeNormal,
52 }
53 field := ToSelectableFields(eventA)
54 expectA := fields.Set{
55 "metadata.name": "f0118",
56 "metadata.namespace": "default",
57 "involvedObject.kind": "Pod",
58 "involvedObject.name": "foo",
59 "involvedObject.namespace": "baz",
60 "involvedObject.uid": "long uid string",
61 "involvedObject.apiVersion": "v1",
62 "involvedObject.resourceVersion": "0",
63 "involvedObject.fieldPath": "",
64 "reason": "ForTesting",
65 "reportingComponent": "",
66 "source": "test",
67 "type": api.EventTypeNormal,
68 }
69 if e, a := expectA, field; !reflect.DeepEqual(e, a) {
70 t.Errorf("diff: %s", cmp.Diff(e, a))
71 }
72
73 eventB := &api.Event{
74 ObjectMeta: metav1.ObjectMeta{
75 Name: "f0118",
76 Namespace: "default",
77 },
78 InvolvedObject: api.ObjectReference{
79 Kind: "Pod",
80 Name: "foo",
81 Namespace: "baz",
82 UID: "long uid string",
83 APIVersion: "v1",
84 ResourceVersion: "0",
85 FieldPath: "",
86 },
87 Reason: "ForTesting",
88 ReportingController: "test",
89 Type: api.EventTypeNormal,
90 }
91 field = ToSelectableFields(eventB)
92 expectB := fields.Set{
93 "metadata.name": "f0118",
94 "metadata.namespace": "default",
95 "involvedObject.kind": "Pod",
96 "involvedObject.name": "foo",
97 "involvedObject.namespace": "baz",
98 "involvedObject.uid": "long uid string",
99 "involvedObject.apiVersion": "v1",
100 "involvedObject.resourceVersion": "0",
101 "involvedObject.fieldPath": "",
102 "reason": "ForTesting",
103 "reportingComponent": "test",
104 "source": "test",
105 "type": api.EventTypeNormal,
106 }
107 if e, a := expectB, field; !reflect.DeepEqual(e, a) {
108 t.Errorf("diff: %s", cmp.Diff(e, a))
109 }
110 }
111
112 func TestSelectableFieldLabelConversions(t *testing.T) {
113 fset := ToSelectableFields(&api.Event{})
114 apitesting.TestSelectableFieldLabelConversionsOfKind(t,
115 "v1",
116 "Event",
117 fset,
118 nil,
119 )
120 }
121
122 func TestValidateUpdate(t *testing.T) {
123 makeEvent := func(name string) *api.Event {
124 return &api.Event{
125 ObjectMeta: metav1.ObjectMeta{
126 Name: name,
127 Namespace: "default",
128 ResourceVersion: "123",
129 },
130 InvolvedObject: api.ObjectReference{
131 Kind: "Pod",
132 Name: "foo",
133 Namespace: "default",
134 UID: "long uid string",
135 APIVersion: "v1",
136 ResourceVersion: "0",
137 FieldPath: "",
138 },
139 Reason: "ForTesting",
140 Source: api.EventSource{Component: "test"},
141 Type: api.EventTypeNormal,
142 }
143 }
144 eventA := makeEvent("eventA")
145 eventB := makeEvent("eventB")
146 errList := Strategy.ValidateUpdate(context.Background(), eventA, eventB)
147 if len(errList) == 0 {
148 t.Errorf("ValidateUpdate should fail on name change")
149 }
150 }
151
View as plain text