@@ -308,6 +308,101 @@ func TestPing(t *testing.T) {
308308 assert .Error (t , err )
309309}
310310
311+ func TestRequestsWithGlobalTTL (t * testing.T ) {
312+ s , c := setupMiniredis ()
313+ defer s .Close ()
314+
315+ globalTTLInSeconds := 100
316+
317+ ss := & StateStore {
318+ client : c ,
319+ json : jsoniter .ConfigFastest ,
320+ logger : logger .NewLogger ("test" ),
321+ metadata : metadata {ttlInSeconds : & globalTTLInSeconds },
322+ }
323+ ss .ctx , ss .cancel = context .WithCancel (context .Background ())
324+
325+ t .Run ("TTL: Only global specified" , func (t * testing.T ) {
326+ ss .Set (& state.SetRequest {
327+ Key : "weapon100" ,
328+ Value : "deathstar100" ,
329+ })
330+ ttl , _ := ss .client .TTL (ss .ctx , "weapon100" ).Result ()
331+
332+ assert .Equal (t , time .Duration (globalTTLInSeconds )* time .Second , ttl )
333+ })
334+
335+ t .Run ("TTL: Global and Request specified" , func (t * testing.T ) {
336+ requestTTL := 200
337+ ss .Set (& state.SetRequest {
338+ Key : "weapon100" ,
339+ Value : "deathstar100" ,
340+ Metadata : map [string ]string {
341+ "ttlInSeconds" : strconv .Itoa (requestTTL ),
342+ },
343+ })
344+ ttl , _ := ss .client .TTL (ss .ctx , "weapon100" ).Result ()
345+
346+ assert .Equal (t , time .Duration (requestTTL )* time .Second , ttl )
347+ })
348+
349+ t .Run ("TTL: Global and Request specified" , func (t * testing.T ) {
350+ err := ss .Multi (& state.TransactionalStateRequest {
351+ Operations : []state.TransactionalStateOperation {
352+ {
353+ Operation : state .Upsert ,
354+ Request : state.SetRequest {
355+ Key : "weapon" ,
356+ Value : "deathstar" ,
357+ },
358+ },
359+ {
360+ Operation : state .Upsert ,
361+ Request : state.SetRequest {
362+ Key : "weapon2" ,
363+ Value : "deathstar2" ,
364+ Metadata : map [string ]string {
365+ "ttlInSeconds" : "123" ,
366+ },
367+ },
368+ },
369+ {
370+ Operation : state .Upsert ,
371+ Request : state.SetRequest {
372+ Key : "weapon3" ,
373+ Value : "deathstar3" ,
374+ Metadata : map [string ]string {
375+ "ttlInSeconds" : "-1" ,
376+ },
377+ },
378+ },
379+ },
380+ })
381+ assert .Equal (t , nil , err )
382+
383+ res , err := c .Do (context .Background (), "HGETALL" , "weapon" ).Result ()
384+ assert .Equal (t , nil , err )
385+
386+ vals := res .([]interface {})
387+ data , version , err := ss .getKeyVersion (vals )
388+ assert .Equal (t , nil , err )
389+ assert .Equal (t , ptr .String ("1" ), version )
390+ assert .Equal (t , `"deathstar"` , data )
391+
392+ res , err = c .Do (context .Background (), "TTL" , "weapon" ).Result ()
393+ assert .Equal (t , nil , err )
394+ assert .Equal (t , int64 (globalTTLInSeconds ), res )
395+
396+ res , err = c .Do (context .Background (), "TTL" , "weapon2" ).Result ()
397+ assert .Equal (t , nil , err )
398+ assert .Equal (t , int64 (123 ), res )
399+
400+ res , err = c .Do (context .Background (), "TTL" , "weapon3" ).Result ()
401+ assert .Equal (t , nil , err )
402+ assert .Equal (t , int64 (- 1 ), res )
403+ })
404+ }
405+
311406func TestSetRequestWithTTL (t * testing.T ) {
312407 s , c := setupMiniredis ()
313408 defer s .Close ()
0 commit comments