1
16
17 package testing
18
19 import (
20 "testing"
21
22 "github.com/stretchr/testify/assert"
23 "k8s.io/apimachinery/pkg/api/meta"
24 "k8s.io/apimachinery/pkg/runtime"
25 "k8s.io/apimachinery/pkg/runtime/schema"
26 )
27
28 func TestOriginalObjectCaptured(t *testing.T) {
29
30 const testSelfLink = "some-value"
31 reactors := []ReactionFunc{
32 func(action Action) (bool, runtime.Object, error) {
33 createAction := action.(CreateActionImpl)
34 accessor, err := meta.Accessor(createAction.Object)
35 if err != nil {
36 return false, nil, err
37 }
38
39
40 accessor.SetSelfLink(testSelfLink)
41
42 return true, createAction.Object, nil
43 },
44 }
45
46
47 f := &Fake{}
48 for _, r := range reactors {
49 f.AddReactor("", "", r)
50 }
51
52
53 testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"}
54 testObj := getArbitraryResource(testResource, "test_name", "test_namespace")
55
56
57 action := CreateActionImpl{
58 Object: testObj,
59 }
60
61
62 ret, err := f.Invokes(action, nil)
63 assert.NoError(t, err, "running Invokes failed")
64
65
66 accessor, err := meta.Accessor(ret)
67 if err != nil {
68 t.Fatalf("unexpected error: %v", err)
69 }
70
71
72 if accessor.GetSelfLink() != testSelfLink {
73 t.Errorf("expected resource returned by Invokes to be modified by the ReactionFunc")
74 }
75
76 if len(f.actions) != 1 {
77 t.Errorf("expected 1 action to be executed")
78 t.FailNow()
79 }
80
81 createAction := f.actions[0].(CreateActionImpl)
82 accessor, err = meta.Accessor(createAction.Object)
83 if err != nil {
84 t.Fatalf("unexpected error: %v", err)
85 }
86 if accessor.GetSelfLink() != "" {
87 t.Errorf("expected Action recorded to not be modified by ReactionFunc but it was")
88 }
89 }
90
91 func TestReactorChangesPersisted(t *testing.T) {
92
93 const testSelfLink = "some-value"
94 reactors := []ReactionFunc{
95 func(action Action) (bool, runtime.Object, error) {
96 createAction := action.(CreateActionImpl)
97 accessor, err := meta.Accessor(createAction.Object)
98 if err != nil {
99 return false, nil, err
100 }
101
102
103 accessor.SetSelfLink(testSelfLink)
104
105 return false, createAction.Object, nil
106 },
107 func(action Action) (bool, runtime.Object, error) {
108 createAction := action.(CreateActionImpl)
109 accessor, err := meta.Accessor(createAction.Object)
110 if err != nil {
111 return false, nil, err
112 }
113
114
115 if accessor.GetSelfLink() != testSelfLink {
116 t.Errorf("expected resource passed to second reactor to be modified by first reactor")
117 }
118
119 return true, createAction.Object, nil
120 },
121 }
122
123
124 f := &Fake{}
125 for _, r := range reactors {
126 f.AddReactor("", "", r)
127 }
128
129
130 testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"}
131 testObj := getArbitraryResource(testResource, "test_name", "test_namespace")
132
133
134 action := CreateActionImpl{
135 Object: testObj,
136 }
137
138
139 ret, err := f.Invokes(action, nil)
140 assert.NoError(t, err, "running Invokes failed")
141
142
143 accessor, err := meta.Accessor(ret)
144 if err != nil {
145 t.Fatalf("unexpected error: %v", err)
146 }
147
148
149 if accessor.GetSelfLink() != testSelfLink {
150 t.Errorf("expected resource returned by Invokes to be modified by the ReactionFunc")
151 }
152
153 if len(f.actions) != 1 {
154 t.Errorf("expected 1 action to be executed")
155 t.FailNow()
156 }
157
158 createAction := f.actions[0].(CreateActionImpl)
159 accessor, err = meta.Accessor(createAction.Object)
160 if err != nil {
161 t.Fatalf("unexpected error: %v", err)
162 }
163 if accessor.GetSelfLink() != "" {
164 t.Errorf("expected Action recorded to not be modified by ReactionFunc but it was")
165 }
166 }
167
View as plain text