@@ -87,24 +87,25 @@ func Test_CAS_Update(t *testing.T) {
87
87
expectedUpdatedKeys [0 ]: []byte (expectedUpdatedKeys [0 ]),
88
88
expectedUpdatedKeys [1 ]: []byte (expectedUpdatedKeys [1 ]),
89
89
}
90
+ expectedBatch := map [dynamodbKey ][]byte {
91
+ {primaryKey : key , sortKey : expectedUpdatedKeys [0 ]}: []byte (expectedUpdatedKeys [0 ]),
92
+ {primaryKey : key , sortKey : expectedUpdatedKeys [1 ]}: []byte (expectedUpdatedKeys [1 ]),
93
+ }
90
94
91
95
ddbMock .On ("Query" ).Return (map [string ][]byte {}, nil ).Once ()
92
96
codecMock .On ("DecodeMultiKey" ).Return (descMock , nil ).Once ()
93
97
descMock .On ("Clone" ).Return (descMock ).Once ()
94
98
descMock .On ("FindDifference" , descMock ).Return (descMock , []string {}, nil ).Once ()
95
99
codecMock .On ("EncodeMultiKey" ).Return (expectedUpdated , nil ).Once ()
96
- ddbMock .On ("Put" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedUpdatedKeys [0 ]}, []byte (expectedUpdatedKeys [0 ])).Once ()
97
- ddbMock .On ("Put" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedUpdatedKeys [1 ]}, []byte (expectedUpdatedKeys [1 ])).Once ()
100
+ ddbMock .On ("Batch" , context .TODO (), expectedBatch , []dynamodbKey {}).Once ()
98
101
99
102
err := c .CAS (context .TODO (), key , func (in interface {}) (out interface {}, retry bool , err error ) {
100
103
return descMock , true , nil
101
104
})
102
105
103
106
require .NoError (t , err )
104
- ddbMock .AssertNumberOfCalls (t , "Put" , 2 )
105
- ddbMock .AssertNumberOfCalls (t , "Delete" , 0 )
106
- ddbMock .AssertCalled (t , "Put" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedUpdatedKeys [0 ]}, []byte (expectedUpdatedKeys [0 ]))
107
- ddbMock .AssertCalled (t , "Put" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedUpdatedKeys [1 ]}, []byte (expectedUpdatedKeys [1 ]))
107
+ ddbMock .AssertNumberOfCalls (t , "Batch" , 1 )
108
+ ddbMock .AssertCalled (t , "Batch" , context .TODO (), expectedBatch , []dynamodbKey {})
108
109
}
109
110
110
111
func Test_CAS_Delete (t * testing.T ) {
@@ -113,24 +114,61 @@ func Test_CAS_Delete(t *testing.T) {
113
114
descMock := & DescMock {}
114
115
c := NewClientMock (ddbMock , codecMock , TestLogger {}, prometheus .NewPedanticRegistry ())
115
116
expectedToDelete := []string {"test" , "test2" }
117
+ expectedBatch := []dynamodbKey {
118
+ {primaryKey : key , sortKey : expectedToDelete [0 ]},
119
+ {primaryKey : key , sortKey : expectedToDelete [1 ]},
120
+ }
116
121
117
122
ddbMock .On ("Query" ).Return (map [string ][]byte {}, nil ).Once ()
118
123
codecMock .On ("DecodeMultiKey" ).Return (descMock , nil ).Once ()
119
124
descMock .On ("Clone" ).Return (descMock ).Once ()
120
125
descMock .On ("FindDifference" , descMock ).Return (descMock , expectedToDelete , nil ).Once ()
121
126
codecMock .On ("EncodeMultiKey" ).Return (map [string ][]byte {}, nil ).Once ()
122
- ddbMock .On ("Delete" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedToDelete [0 ]})
123
- ddbMock .On ("Delete" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedToDelete [1 ]})
127
+ ddbMock .On ("Batch" , context .TODO (), map [dynamodbKey ][]byte {}, expectedBatch )
128
+
129
+ err := c .CAS (context .TODO (), key , func (in interface {}) (out interface {}, retry bool , err error ) {
130
+ return descMock , true , nil
131
+ })
132
+
133
+ require .NoError (t , err )
134
+ ddbMock .AssertNumberOfCalls (t , "Batch" , 1 )
135
+ ddbMock .AssertCalled (t , "Batch" , context .TODO (), map [dynamodbKey ][]byte {}, expectedBatch )
136
+ }
137
+
138
+ func Test_CAS_Update_Delete (t * testing.T ) {
139
+ ddbMock := NewDynamodbClientMock ()
140
+ codecMock := & CodecMock {}
141
+ descMock := & DescMock {}
142
+ c := NewClientMock (ddbMock , codecMock , TestLogger {}, prometheus .NewPedanticRegistry ())
143
+ expectedUpdatedKeys := []string {"t1" , "t2" }
144
+ expectedUpdated := map [string ][]byte {
145
+ expectedUpdatedKeys [0 ]: []byte (expectedUpdatedKeys [0 ]),
146
+ expectedUpdatedKeys [1 ]: []byte (expectedUpdatedKeys [1 ]),
147
+ }
148
+ expectedUpdateBatch := map [dynamodbKey ][]byte {
149
+ {primaryKey : key , sortKey : expectedUpdatedKeys [0 ]}: []byte (expectedUpdatedKeys [0 ]),
150
+ {primaryKey : key , sortKey : expectedUpdatedKeys [1 ]}: []byte (expectedUpdatedKeys [1 ]),
151
+ }
152
+ expectedToDelete := []string {"test" , "test2" }
153
+ expectedDeleteBatch := []dynamodbKey {
154
+ {primaryKey : key , sortKey : expectedToDelete [0 ]},
155
+ {primaryKey : key , sortKey : expectedToDelete [1 ]},
156
+ }
157
+
158
+ ddbMock .On ("Query" ).Return (map [string ][]byte {}, nil ).Once ()
159
+ codecMock .On ("DecodeMultiKey" ).Return (descMock , nil ).Once ()
160
+ descMock .On ("Clone" ).Return (descMock ).Once ()
161
+ descMock .On ("FindDifference" , descMock ).Return (descMock , expectedToDelete , nil ).Once ()
162
+ codecMock .On ("EncodeMultiKey" ).Return (expectedUpdated , nil ).Once ()
163
+ ddbMock .On ("Batch" , context .TODO (), expectedUpdateBatch , expectedDeleteBatch )
124
164
125
165
err := c .CAS (context .TODO (), key , func (in interface {}) (out interface {}, retry bool , err error ) {
126
166
return descMock , true , nil
127
167
})
128
168
129
169
require .NoError (t , err )
130
- ddbMock .AssertNumberOfCalls (t , "Put" , 0 )
131
- ddbMock .AssertNumberOfCalls (t , "Delete" , 2 )
132
- ddbMock .AssertCalled (t , "Delete" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedToDelete [0 ]})
133
- ddbMock .AssertCalled (t , "Delete" , context .TODO (), dynamodbKey {primaryKey : key , sortKey : expectedToDelete [1 ]})
170
+ ddbMock .AssertNumberOfCalls (t , "Batch" , 1 )
171
+ ddbMock .AssertCalled (t , "Batch" , context .TODO (), expectedUpdateBatch , expectedDeleteBatch )
134
172
}
135
173
136
174
func Test_WatchKey (t * testing.T ) {
@@ -271,6 +309,10 @@ func (m *mockDynamodbClient) Put(ctx context.Context, key dynamodbKey, data []by
271
309
m .Called (ctx , key , data )
272
310
return nil
273
311
}
312
+ func (m * mockDynamodbClient ) Batch (ctx context.Context , put map [dynamodbKey ][]byte , delete []dynamodbKey ) error {
313
+ m .Called (ctx , put , delete )
314
+ return nil
315
+ }
274
316
275
317
type TestLogger struct {
276
318
}
0 commit comments