@@ -5,6 +5,7 @@ const C = require("../../../src/constants");
55
66jest . mock ( "ioredis" ) ;
77const Redis = require ( "ioredis" ) ;
8+ const BaseLogger = require ( "../../../src/loggers/base" ) ;
89
910Redis . mockImplementation ( ( ) => {
1011 let onCallbacks = { } ;
@@ -646,79 +647,118 @@ describe("Test RedisCacher getWithTTL method", () => {
646647 } ) ;
647648} ) ;
648649
649- describe ( "Test RedisCacher lock method" , ( ) => {
650- const key = "abcd134" ;
651- let broker = new ServiceBroker ( { logger : false } ) ;
652- let cacher = new RedisCacher ( {
653- ttl : 30 ,
654- lock : true
655- } ) ;
656- cacher . init ( broker ) ; // for empty logger
657- let unlock1 , unlock2 ;
658- beforeEach ( ( ) => {
659- unlock1 = jest . fn ( ( ) => Promise . resolve ( ) ) ;
660- unlock2 = jest . fn ( ( ) => Promise . resolve ( ) ) ;
661- cacher . redlock . lock = jest . fn ( ( ) => {
662- return Promise . resolve ( {
663- unlock : unlock1
664- } ) ;
650+ describe ( "redlock enabled" , ( ) => {
651+ describe ( "Test RedisCacher lock method" , ( ) => {
652+ const key = "abcd134" ;
653+ let broker = new ServiceBroker ( { logger : false } ) ;
654+ let cacher = new RedisCacher ( {
655+ ttl : 30 ,
656+ lock : true
665657 } ) ;
666- cacher . redlockNonBlocking . lock = jest . fn ( ( ) => {
667- return Promise . resolve ( {
668- unlock : unlock2
658+ cacher . init ( broker ) ; // for empty logger
659+ let unlock1 , unlock2 ;
660+ beforeEach ( ( ) => {
661+ unlock1 = jest . fn ( ( ) => Promise . resolve ( ) ) ;
662+ unlock2 = jest . fn ( ( ) => Promise . resolve ( ) ) ;
663+ cacher . redlock . lock = jest . fn ( ( ) => {
664+ return Promise . resolve ( {
665+ unlock : unlock1
666+ } ) ;
667+ } ) ;
668+ cacher . redlockNonBlocking . lock = jest . fn ( ( ) => {
669+ return Promise . resolve ( {
670+ unlock : unlock2
671+ } ) ;
669672 } ) ;
670673 } ) ;
671- } ) ;
672674
673- it ( "should call redlock.lock when calling cacher.lock" , ( ) => {
674- return cacher . lock ( key , 20 ) . then ( ( ) => {
675- expect ( cacher . redlock . lock ) . toHaveBeenCalledTimes ( 1 ) ;
676- expect ( cacher . redlock . lock ) . toHaveBeenCalledWith ( cacher . prefix + key + "-lock" , 20 ) ;
675+ it ( "should call redlock.lock when calling cacher.lock" , ( ) => {
676+ return cacher . lock ( key , 20 ) . then ( ( ) => {
677+ expect ( cacher . redlock . lock ) . toHaveBeenCalledTimes ( 1 ) ;
678+ expect ( cacher . redlock . lock ) . toHaveBeenCalledWith ( cacher . prefix + key + "-lock" , 20 ) ;
679+ } ) ;
677680 } ) ;
678- } ) ;
679681
680- it ( "should call redlock.unlock when calling unlock callback" , ( ) => {
681- return cacher . lock ( key , 20 ) . then ( unlock => {
682- return unlock ( ) . then ( ( ) => {
683- expect ( unlock1 ) . toBeCalled ( ) ;
682+ it ( "should call redlock.unlock when calling unlock callback" , ( ) => {
683+ return cacher . lock ( key , 20 ) . then ( unlock => {
684+ return unlock ( ) . then ( ( ) => {
685+ expect ( unlock1 ) . toBeCalled ( ) ;
686+ } ) ;
684687 } ) ;
685688 } ) ;
686- } ) ;
687689
688- it ( "should call redlock.lock when calling cacher.tryLock" , ( ) => {
689- return cacher . tryLock ( key , 20 ) . then ( ( ) => {
690- expect ( cacher . redlockNonBlocking . lock ) . toHaveBeenCalledTimes ( 1 ) ;
691- expect ( cacher . redlockNonBlocking . lock ) . toHaveBeenCalledWith (
692- cacher . prefix + key + "-lock" ,
693- 20
694- ) ;
690+ it ( "should call redlock.lock when calling cacher.tryLock" , ( ) => {
691+ return cacher . tryLock ( key , 20 ) . then ( ( ) => {
692+ expect ( cacher . redlockNonBlocking . lock ) . toHaveBeenCalledTimes ( 1 ) ;
693+ expect ( cacher . redlockNonBlocking . lock ) . toHaveBeenCalledWith (
694+ cacher . prefix + key + "-lock" ,
695+ 20
696+ ) ;
697+ } ) ;
695698 } ) ;
696- } ) ;
697699
698- it ( "should call redlock.unlock when calling unlock callback" , ( ) => {
699- const err = new Error ( "Already locked." ) ;
700- cacher . redlockNonBlocking . lock = jest . fn ( ( ) => {
701- return Promise . reject ( err ) ;
700+ it ( "should call redlock.unlock when calling unlock callback" , ( ) => {
701+ const err = new Error ( "Already locked." ) ;
702+ cacher . redlockNonBlocking . lock = jest . fn ( ( ) => {
703+ return Promise . reject ( err ) ;
704+ } ) ;
705+ return cacher . tryLock ( key , 20 ) . catch ( e => {
706+ expect ( e ) . toBe ( err ) ;
707+ } ) ;
702708 } ) ;
703- return cacher . tryLock ( key , 20 ) . catch ( e => {
704- expect ( e ) . toBe ( err ) ;
709+
710+ it ( "should failed to acquire a lock when redlock client throw an error" , ( ) => {
711+ return cacher . tryLock ( key , 20 ) ;
705712 } ) ;
706713 } ) ;
707714
708- it ( "should failed to acquire a lock when redlock client throw an error" , ( ) => {
709- return cacher . tryLock ( key , 20 ) ;
715+ describe ( "Test RedisCacher with opts.lock" , ( ) => {
716+ it ( "should create redlock clients" , ( ) => {
717+ let broker = new ServiceBroker ( { logger : false } ) ;
718+ let cacher = new RedisCacher ( {
719+ ttl : 30
720+ } ) ;
721+ cacher . init ( broker ) ;
722+ expect ( cacher . redlock ) . toBeDefined ( ) ;
723+ expect ( cacher . redlockNonBlocking ) . toBeDefined ( ) ;
724+ } ) ;
710725 } ) ;
711726} ) ;
712727
713- describe ( "Test RedisCacher with opts.lock" , ( ) => {
714- it ( "should create redlock clients" , ( ) => {
715- let broker = new ServiceBroker ( { logger : false } ) ;
716- let cacher = new RedisCacher ( {
717- ttl : 30
718- } ) ;
719- cacher . init ( broker ) ;
720- expect ( cacher . redlock ) . toBeDefined ( ) ;
721- expect ( cacher . redlockNonBlocking ) . toBeDefined ( ) ;
728+ describe ( "redlock disabled" , ( ) => {
729+ const errorMock = jest . fn ( ) ;
730+ class TestLogger extends BaseLogger {
731+ getLogHandler ( ) {
732+ return ( type , args ) => {
733+ if ( type === "error" ) {
734+ return errorMock ( ...args ) ;
735+ }
736+ } ;
737+ }
738+ }
739+ const logger = new TestLogger ( ) ;
740+
741+ const broker = new ServiceBroker ( { logger } ) ;
742+ const cacher = new RedisCacher ( { redlock : false } ) ;
743+ cacher . init ( broker ) ;
744+
745+ afterEach ( ( ) => {
746+ errorMock . mockClear ( ) ;
747+ } ) ;
748+
749+ it ( "should not add a redlock instance" , ( ) => {
750+ expect ( cacher . redlock ) . toBeNull ( ) ;
751+ expect ( cacher . redlockNonBlocking ) . toBeNull ( ) ;
752+ } ) ;
753+
754+ it ( "should resolve but emit error on lock call" , async ( ) => {
755+ await expect ( cacher . lock ( ) ) . resolves . toBeUndefined ( ) ;
756+ expect ( errorMock ) . toHaveBeenCalledTimes ( 1 ) ;
757+ } ) ;
758+
759+ it ( "should resolve but emit error on tryLock call" , async ( ) => {
760+ await expect ( cacher . tryLock ( ) ) . resolves . toBeUndefined ( ) ;
761+ expect ( errorMock ) . toHaveBeenCalledTimes ( 1 ) ;
722762 } ) ;
723763} ) ;
724764
0 commit comments