44import static org .junit .Assert .assertEquals ;
55import static org .junit .Assert .assertNotNull ;
66import static org .junit .Assert .assertNull ;
7+ import static org .junit .Assert .assertTrue ;
78import static org .junit .Assert .fail ;
89import static redis .clients .jedis .tests .utils .AssertUtil .assertByteArrayListEquals ;
910
1213import java .util .Collections ;
1314import java .util .List ;
1415
16+ import org .apache .logging .log4j .LogManager ;
17+ import org .apache .logging .log4j .Logger ;
18+
1519import org .junit .Test ;
1620
1721import redis .clients .jedis .Jedis ;
1822import redis .clients .jedis .ListPosition ;
1923import redis .clients .jedis .args .ListDirection ;
2024import redis .clients .jedis .exceptions .JedisDataException ;
2125import redis .clients .jedis .params .LPosParams ;
26+ import redis .clients .jedis .resps .KeyedListElement ;
2227
2328public class ListCommandsTest extends JedisCommandTestBase {
29+
30+ private static final Logger logger = LogManager .getLogger ();
31+
2432 final byte [] bfoo = { 0x01 , 0x02 , 0x03 , 0x04 };
33+ final byte [] bfoo1 = { 0x01 , 0x02 , 0x03 , 0x04 , 0x05 };
2534 final byte [] bbar = { 0x05 , 0x06 , 0x07 , 0x08 };
2635 final byte [] bcar = { 0x09 , 0x0A , 0x0B , 0x0C };
2736 final byte [] bA = { 0x0A };
@@ -420,6 +429,19 @@ public void blpop() throws InterruptedException {
420429 assertEquals ("foo" , result .get (0 ));
421430 assertEquals ("bar" , result .get (1 ));
422431
432+ // Multi keys
433+ result = jedis .blpop (1 , "foo" , "foo1" );
434+ assertNull (result );
435+
436+ jedis .lpush ("foo" , "bar" );
437+ jedis .lpush ("foo1" , "bar1" );
438+ result = jedis .blpop (1 , "foo1" , "foo" );
439+
440+ assertNotNull (result );
441+ assertEquals (2 , result .size ());
442+ assertEquals ("foo1" , result .get (0 ));
443+ assertEquals ("bar1" , result .get (1 ));
444+
423445 // Binary
424446 jedis .lpush (bfoo , bbar );
425447 List <byte []> bresult = jedis .blpop (1 , bfoo );
@@ -429,6 +451,95 @@ public void blpop() throws InterruptedException {
429451 assertArrayEquals (bfoo , bresult .get (0 ));
430452 assertArrayEquals (bbar , bresult .get (1 ));
431453
454+ // Binary Multi keys
455+ bresult = jedis .blpop (1 , bfoo , bfoo1 );
456+ assertNull (bresult );
457+
458+ jedis .lpush (bfoo , bbar );
459+ jedis .lpush (bfoo1 , bcar );
460+ bresult = jedis .blpop (1 , bfoo , bfoo1 );
461+
462+ assertNotNull (bresult );
463+ assertEquals (2 , bresult .size ());
464+ assertArrayEquals (bfoo , bresult .get (0 ));
465+ assertArrayEquals (bbar , bresult .get (1 ));
466+ }
467+
468+ @ Test
469+ public void blpopDouble () throws InterruptedException {
470+ KeyedListElement result = jedis .blpop (0.1 , "foo" );
471+ assertNull (result );
472+
473+ jedis .lpush ("foo" , "bar" );
474+ result = jedis .blpop (3.2 , "foo" );
475+
476+ assertNotNull (result );
477+ assertEquals ("foo" , result .getKey ());
478+ assertEquals ("bar" , result .getElement ());
479+
480+ // Multi keys
481+ result = jedis .blpop (0.18 , "foo" , "foo1" );
482+ assertNull (result );
483+
484+ jedis .lpush ("foo" , "bar" );
485+ jedis .lpush ("foo1" , "bar1" );
486+ result = jedis .blpop (1d , "foo1" , "foo" );
487+
488+ assertNotNull (result );
489+ assertEquals ("foo1" , result .getKey ());
490+ assertEquals ("bar1" , result .getElement ());
491+
492+ // Binary
493+ jedis .lpush (bfoo , bbar );
494+ List <byte []> bresult = jedis .blpop (3.12 , bfoo );
495+
496+ assertNotNull (bresult );
497+ assertEquals (2 , bresult .size ());
498+ assertArrayEquals (bfoo , bresult .get (0 ));
499+ assertArrayEquals (bbar , bresult .get (1 ));
500+
501+ // Binary Multi keys
502+ bresult = jedis .blpop (0.11 , bfoo , bfoo1 );
503+ assertNull (bresult );
504+
505+ jedis .lpush (bfoo , bbar );
506+ jedis .lpush (bfoo1 , bcar );
507+ bresult = jedis .blpop (1d , bfoo , bfoo1 );
508+
509+ assertNotNull (bresult );
510+ assertEquals (2 , bresult .size ());
511+ assertArrayEquals (bfoo , bresult .get (0 ));
512+ assertArrayEquals (bbar , bresult .get (1 ));
513+ }
514+
515+ @ Test
516+ public void blpopDoubleWithSleep () {
517+ long startMillis , totalMillis ;
518+
519+ startMillis = System .currentTimeMillis ();
520+ KeyedListElement result = jedis .blpop (0.04 , "foo" );
521+ totalMillis = System .currentTimeMillis () - startMillis ;
522+ assertTrue ("TotalMillis=" + totalMillis , totalMillis < 200 );
523+ assertNull (result );
524+
525+ startMillis = System .currentTimeMillis ();
526+ new Thread (() -> {
527+ try {
528+ Thread .sleep (30 );
529+ } catch (InterruptedException e ) {
530+ logger .error ("" , e );
531+ }
532+ try (Jedis j = createJedis ()) {
533+ j .lpush ("foo" , "bar" );
534+ }
535+ }).start ();
536+ result = jedis .blpop (1.2 , "foo" );
537+ totalMillis = System .currentTimeMillis () - startMillis ;
538+ assertTrue ("TotalMillis=" + totalMillis , totalMillis < 200 );
539+
540+ assertNotNull (result );
541+ assertEquals ("foo" , result .getKey ());
542+ assertEquals ("bar" , result .getElement ());
432543 }
433544
434545 @ Test
@@ -443,15 +554,116 @@ public void brpop() throws InterruptedException {
443554 assertEquals ("foo" , result .get (0 ));
444555 assertEquals ("bar" , result .get (1 ));
445556
446- // Binary
557+ // Multi keys
558+ result = jedis .brpop (1 , "foo" , "foo1" );
559+ assertNull (result );
560+
561+ jedis .lpush ("foo" , "bar" );
562+ jedis .lpush ("foo1" , "bar1" );
563+ result = jedis .brpop (1 , "foo1" , "foo" );
447564
565+ assertNotNull (result );
566+ assertEquals (2 , result .size ());
567+ assertEquals ("foo1" , result .get (0 ));
568+ assertEquals ("bar1" , result .get (1 ));
569+
570+ // Binary
448571 jedis .lpush (bfoo , bbar );
449572 List <byte []> bresult = jedis .brpop (1 , bfoo );
450573 assertNotNull (bresult );
451574 assertEquals (2 , bresult .size ());
452575 assertArrayEquals (bfoo , bresult .get (0 ));
453576 assertArrayEquals (bbar , bresult .get (1 ));
454577
578+ // Binary Multi keys
579+ bresult = jedis .brpop (1 , bfoo , bfoo1 );
580+ assertNull (bresult );
581+
582+ jedis .lpush (bfoo , bbar );
583+ jedis .lpush (bfoo1 , bcar );
584+ bresult = jedis .brpop (1 , bfoo , bfoo1 );
585+
586+ assertNotNull (bresult );
587+ assertEquals (2 , bresult .size ());
588+ assertArrayEquals (bfoo , bresult .get (0 ));
589+ assertArrayEquals (bbar , bresult .get (1 ));
590+ }
591+
592+ @ Test
593+ public void brpopDouble () throws InterruptedException {
594+ KeyedListElement result = jedis .brpop (0.1 , "foo" );
595+ assertNull (result );
596+
597+ jedis .lpush ("foo" , "bar" );
598+ result = jedis .brpop (3.2 , "foo" );
599+
600+ assertNotNull (result );
601+ assertEquals ("foo" , result .getKey ());
602+ assertEquals ("bar" , result .getElement ());
603+
604+ // Multi keys
605+ result = jedis .brpop (0.18 , "foo" , "foo1" );
606+ assertNull (result );
607+
608+ jedis .lpush ("foo" , "bar" );
609+ jedis .lpush ("foo1" , "bar1" );
610+ result = jedis .brpop (1d , "foo1" , "foo" );
611+
612+ assertNotNull (result );
613+ assertEquals ("foo1" , result .getKey ());
614+ assertEquals ("bar1" , result .getElement ());
615+
616+ // Binary
617+ jedis .lpush (bfoo , bbar );
618+ List <byte []> bresult = jedis .brpop (3.12 , bfoo );
619+
620+ assertNotNull (bresult );
621+ assertEquals (2 , bresult .size ());
622+ assertArrayEquals (bfoo , bresult .get (0 ));
623+ assertArrayEquals (bbar , bresult .get (1 ));
624+
625+ // Binary Multi keys
626+ bresult = jedis .brpop (0.11 , bfoo , bfoo1 );
627+ assertNull (bresult );
628+
629+ jedis .lpush (bfoo , bbar );
630+ jedis .lpush (bfoo1 , bcar );
631+ bresult = jedis .brpop (1d , bfoo , bfoo1 );
632+
633+ assertNotNull (bresult );
634+ assertEquals (2 , bresult .size ());
635+ assertArrayEquals (bfoo , bresult .get (0 ));
636+ assertArrayEquals (bbar , bresult .get (1 ));
637+ }
638+
639+ @ Test
640+ public void brpopDoubleWithSleep () {
641+ long startMillis , totalMillis ;
642+
643+ startMillis = System .currentTimeMillis ();
644+ KeyedListElement result = jedis .brpop (0.04 , "foo" );
645+ totalMillis = System .currentTimeMillis () - startMillis ;
646+ assertTrue ("TotalMillis=" + totalMillis , totalMillis < 200 );
647+ assertNull (result );
648+
649+ startMillis = System .currentTimeMillis ();
650+ new Thread (() -> {
651+ try {
652+ Thread .sleep (30 );
653+ } catch (InterruptedException e ) {
654+ logger .error ("" , e );
655+ }
656+ try (Jedis j = createJedis ()) {
657+ j .lpush ("foo" , "bar" );
658+ }
659+ }).start ();
660+ result = jedis .brpop (1.2 , "foo" );
661+ totalMillis = System .currentTimeMillis () - startMillis ;
662+ assertTrue ("TotalMillis=" + totalMillis , totalMillis < 200 );
663+
664+ assertNotNull (result );
665+ assertEquals ("foo" , result .getKey ());
666+ assertEquals ("bar" , result .getElement ());
455667 }
456668
457669 @ Test
@@ -538,11 +750,11 @@ public void brpoplpush() {
538750 public void run () {
539751 try {
540752 Thread .sleep (100 );
541- try (Jedis j = createJedis ()) {
542- j .lpush ("foo" , "a" );
543- }
544753 } catch (InterruptedException e ) {
545- org .apache .logging .log4j .LogManager .getLogger ().error ("Interruption in string lpush" , e );
754+ logger .error ("" , e );
755+ }
756+ try (Jedis j = createJedis ()) {
757+ j .lpush ("foo" , "a" );
546758 }
547759 }
548760 }).start ();
@@ -560,11 +772,11 @@ public void run() {
560772 public void run () {
561773 try {
562774 Thread .sleep (100 );
563- try (Jedis j = createJedis ()) {
564- j .lpush (bfoo , bA );
565- }
566775 } catch (InterruptedException e ) {
567- org .apache .logging .log4j .LogManager .getLogger ().error ("Interruption in binary lpush" , e );
776+ logger .error ("" , e );
777+ }
778+ try (Jedis j = createJedis ()) {
779+ j .lpush (bfoo , bA );
568780 }
569781 }
570782 }).start ();
@@ -678,7 +890,7 @@ public void blmove() {
678890 try {
679891 Thread .sleep (100 );
680892 } catch (InterruptedException e ) {
681- // ignore
893+ logger . error ( "" , e );
682894 }
683895 try (Jedis j = createJedis ()) {
684896 j .rpush ("foo" , "bar1" , "bar2" , "bar3" );
@@ -694,7 +906,7 @@ public void blmove() {
694906 try {
695907 Thread .sleep (100 );
696908 } catch (InterruptedException e ) {
697- // ignore
909+ logger . error ( "" , e );
698910 }
699911 try (Jedis j = createJedis ()) {
700912 j .rpush (bfoo , b1 , b2 , b3 );
0 commit comments