@@ -21,8 +21,152 @@ import (
21
21
22
22
"sigs.k8s.io/structured-merge-diff/fieldpath"
23
23
. "sigs.k8s.io/structured-merge-diff/internal/fixture"
24
+ "sigs.k8s.io/structured-merge-diff/merge"
24
25
)
25
26
27
+ func TestMultipleAppliersSet (t * testing.T ) {
28
+ tests := map [string ]TestCase {
29
+ "remove_one" : {
30
+ Ops : []Operation {
31
+ Apply {
32
+ Manager : "apply-one" ,
33
+ APIVersion : "v1" ,
34
+ Object : `
35
+ list:
36
+ - name: a
37
+ - name: b
38
+ ` ,
39
+ },
40
+ Apply {
41
+ Manager : "apply-two" ,
42
+ APIVersion : "v2" ,
43
+ Object : `
44
+ list:
45
+ - name: c
46
+ ` ,
47
+ },
48
+ Apply {
49
+ Manager : "apply-one" ,
50
+ APIVersion : "v3" ,
51
+ Object : `
52
+ list:
53
+ - name: a
54
+ ` ,
55
+ },
56
+ },
57
+ Object : `
58
+ list:
59
+ - name: a
60
+ - name: c
61
+ ` ,
62
+ Managed : fieldpath.ManagedFields {
63
+ "apply-one" : & fieldpath.VersionedSet {
64
+ Set : _NS (
65
+ _P ("list" , _KBF ("name" , _SV ("a" )), "name" ),
66
+ ),
67
+ APIVersion : "v3" ,
68
+ },
69
+ "apply-two" : & fieldpath.VersionedSet {
70
+ Set : _NS (
71
+ _P ("list" , _KBF ("name" , _SV ("c" )), "name" ),
72
+ ),
73
+ APIVersion : "v2" ,
74
+ },
75
+ },
76
+ },
77
+ "same_value_no_conflict" : {
78
+ Ops : []Operation {
79
+ Apply {
80
+ Manager : "apply-one" ,
81
+ APIVersion : "v1" ,
82
+ Object : `
83
+ list:
84
+ - name: a
85
+ value: 0
86
+ ` ,
87
+ },
88
+ Apply {
89
+ Manager : "apply-two" ,
90
+ APIVersion : "v2" ,
91
+ Object : `
92
+ list:
93
+ - name: a
94
+ value: 0
95
+ ` ,
96
+ },
97
+ },
98
+ Object : `
99
+ list:
100
+ - name: a
101
+ value: 0
102
+ ` ,
103
+ Managed : fieldpath.ManagedFields {
104
+ "apply-one" : & fieldpath.VersionedSet {
105
+ Set : _NS (
106
+ _P ("list" , _KBF ("name" , _SV ("a" )), "name" ),
107
+ _P ("list" , _KBF ("name" , _SV ("a" )), "value" ),
108
+ ),
109
+ APIVersion : "v1" ,
110
+ },
111
+ "apply-two" : & fieldpath.VersionedSet {
112
+ Set : _NS (
113
+ _P ("list" , _KBF ("name" , _SV ("a" )), "name" ),
114
+ _P ("list" , _KBF ("name" , _SV ("a" )), "value" ),
115
+ ),
116
+ APIVersion : "v2" ,
117
+ },
118
+ },
119
+ },
120
+ "change_value_yes_conflict" : {
121
+ Ops : []Operation {
122
+ Apply {
123
+ Manager : "apply-one" ,
124
+ APIVersion : "v1" ,
125
+ Object : `
126
+ list:
127
+ - name: a
128
+ value: 0
129
+ ` ,
130
+ },
131
+ Apply {
132
+ Manager : "apply-two" ,
133
+ APIVersion : "v2" ,
134
+ Object : `
135
+ list:
136
+ - name: a
137
+ value: 1
138
+ ` ,
139
+ Conflicts : merge.Conflicts {
140
+ merge.Conflict {Manager : "apply-one" , Path : _P ("list" , _KBF ("name" , _SV ("a" )), "value" )},
141
+ },
142
+ },
143
+ },
144
+ Object : `
145
+ list:
146
+ - name: a
147
+ value: 0
148
+ ` ,
149
+ Managed : fieldpath.ManagedFields {
150
+ "apply-one" : & fieldpath.VersionedSet {
151
+ Set : _NS (
152
+ _P ("list" , _KBF ("name" , _SV ("a" )), "name" ),
153
+ _P ("list" , _KBF ("name" , _SV ("a" )), "value" ),
154
+ ),
155
+ APIVersion : "v1" ,
156
+ },
157
+ },
158
+ },
159
+ }
160
+
161
+ for name , test := range tests {
162
+ t .Run (name , func (t * testing.T ) {
163
+ if err := test .Test (associativeListParser ); err != nil {
164
+ t .Fatal (err )
165
+ }
166
+ })
167
+ }
168
+ }
169
+
26
170
func TestMultipleAppliersSetBroken (t * testing.T ) {
27
171
tests := map [string ]TestCase {
28
172
"remove_one_keep_one" : {
@@ -32,46 +176,46 @@ func TestMultipleAppliersSetBroken(t *testing.T) {
32
176
APIVersion : "v1" ,
33
177
Object : `
34
178
list:
35
- - a
36
- - b
37
- - c
179
+ - name: a
180
+ - name: b
181
+ - name: c
38
182
` ,
39
183
},
40
184
Apply {
41
185
Manager : "apply-two" ,
42
186
APIVersion : "v2" ,
43
187
Object : `
44
188
list:
45
- - c
46
- - d
189
+ - name: c
190
+ - name: d
47
191
` ,
48
192
},
49
193
Apply {
50
194
Manager : "apply-one" ,
51
195
APIVersion : "v3" ,
52
196
Object : `
53
197
list:
54
- - a
198
+ - name: a
55
199
` ,
56
200
},
57
201
},
58
202
Object : `
59
203
list:
60
- - a
61
- - c
62
- - d
204
+ - name: a
205
+ - name: c
206
+ - name: d
63
207
` ,
64
208
Managed : fieldpath.ManagedFields {
65
209
"apply-one" : & fieldpath.VersionedSet {
66
210
Set : _NS (
67
- _P ("list" , _SV ("a" )),
211
+ _P ("list" , _KBF ( "name" , _SV ("a" )), "name" ),
68
212
),
69
213
APIVersion : "v3" ,
70
214
},
71
215
"apply-two" : & fieldpath.VersionedSet {
72
216
Set : _NS (
73
- _P ("list" , _SV ("c" )),
74
- _P ("list" , _SV ("d" )),
217
+ _P ("list" , _KBF ( "name" , _SV ("c" )), "name" ),
218
+ _P ("list" , _KBF ( "name" , _SV ("d" )), "name" ),
75
219
),
76
220
APIVersion : "v2" ,
77
221
},
@@ -81,7 +225,7 @@ func TestMultipleAppliersSetBroken(t *testing.T) {
81
225
82
226
for name , test := range tests {
83
227
t .Run (name , func (t * testing.T ) {
84
- if test .Test (setFieldsParser ) == nil {
228
+ if test .Test (associativeListParser ) == nil {
85
229
t .Fatal ("Broken test passed" )
86
230
}
87
231
})
0 commit comments