@@ -8,19 +8,21 @@ import { Reader } from "protobufjs";
8
8
import {
9
9
BaseClientConfiguration ,
10
10
ClosingError ,
11
+ InfoOptions ,
11
12
Logger ,
12
13
RedisClient ,
13
14
RedisClusterClient ,
14
15
RequestError ,
15
16
TimeoutError ,
17
+ Transaction
16
18
} from "../build-ts" ;
17
19
import { RedisClientConfiguration } from "../build-ts/src/RedisClient" ;
18
20
import {
19
21
connection_request ,
20
22
redis_request ,
21
23
response ,
22
24
} from "../src/ProtobufMessage" ;
23
- import { ClusterClientConfiguration } from "../src/RedisClusterClient" ;
25
+ import { ClusterClientConfiguration , SlotKeyTypes } from "../src/RedisClusterClient" ;
24
26
25
27
const { RequestType, RedisRequest } = redis_request ;
26
28
@@ -247,6 +249,57 @@ describe("SocketConnectionInternals", () => {
247
249
} ) ;
248
250
} ) ;
249
251
252
+ it ( "should pass transaction with SlotKeyType" , async ( ) => {
253
+ await testWithClusterResources ( async ( connection , socket ) => {
254
+ socket . once ( "data" , ( data ) => {
255
+ const reader = Reader . create ( data ) ;
256
+ const request = RedisRequest . decodeDelimited ( reader ) ;
257
+
258
+ expect ( request . transaction ?. commands ?. at ( 0 ) ?. requestType ) . toEqual (
259
+ RequestType . SetString
260
+ ) ;
261
+ expect ( request . transaction ?. commands ?. at ( 0 ) ?. argsArray ?. args ?. length ) . toEqual (
262
+ 2
263
+ ) ;
264
+ expect ( request . route ?. slotKeyRoute ?. slotKey ) . toEqual ( "key" ) ;
265
+ expect ( request . route ?. slotKeyRoute ?. slotType ) . toEqual ( 0 ) ; // Primary = 0
266
+
267
+ sendResponse ( socket , ResponseType . OK , request . callbackIdx ) ;
268
+ } ) ;
269
+ const transaction = new Transaction ( ) ;
270
+ transaction . set ( "key" , "value" ) ;
271
+ const slotKey : SlotKeyTypes = {
272
+ type : "primarySlotKey" ,
273
+ key : "key"
274
+ } ;
275
+ const result = await connection . exec ( transaction , slotKey ) ;
276
+ expect ( result ) . toBe ( "OK" ) ;
277
+ } ) ;
278
+ } ) ;
279
+
280
+ it ( "should pass transaction with random node" , async ( ) => {
281
+ await testWithClusterResources ( async ( connection , socket ) => {
282
+ socket . once ( "data" , ( data ) => {
283
+ const reader = Reader . create ( data ) ;
284
+ const request = RedisRequest . decodeDelimited ( reader ) ;
285
+
286
+ expect ( request . transaction ?. commands ?. at ( 0 ) ?. requestType ) . toEqual (
287
+ RequestType . Info
288
+ ) ;
289
+ expect ( request . transaction ?. commands ?. at ( 0 ) ?. argsArray ?. args ?. length ) . toEqual (
290
+ 1
291
+ ) ;
292
+ expect ( request . route ?. simpleRoutes ) . toEqual ( redis_request . SimpleRoutes . Random ) ;
293
+
294
+ sendResponse ( socket , ResponseType . Value , request . callbackIdx , "# Server" ) ;
295
+ } ) ;
296
+ const transaction = new Transaction ( ) ;
297
+ transaction . info ( [ InfoOptions . Server ] ) ;
298
+ const result = await connection . exec ( transaction , "randomNode" ) ;
299
+ expect ( result ) . toEqual ( expect . stringContaining ( "# Server" ) ) ;
300
+ } ) ;
301
+ } ) ;
302
+
250
303
it ( "should pass OK returned from socket" , async ( ) => {
251
304
await testWithResources ( async ( connection , socket ) => {
252
305
socket . once ( "data" , ( data ) => {
0 commit comments