@@ -792,6 +792,95 @@ tests.detect_buffers = function () {
792
792
} ) ;
793
793
} ;
794
794
795
+ tests . detect_buffers_multi = function ( ) {
796
+ var name = "detect_buffers_multi" , detect_client = redis . createClient ( { detect_buffers : true } ) ;
797
+
798
+ detect_client . on ( "ready" , function ( ) {
799
+ // single Buffer or String
800
+ detect_client . set ( "string key 1" , "string value" ) ;
801
+ detect_client . multi ( ) . get ( "string key 1" ) . exec ( require_string ( "string value" , name ) ) ;
802
+ detect_client . multi ( ) . get ( new Buffer ( "string key 1" ) ) . exec ( function ( err , reply ) {
803
+ assert . strictEqual ( null , err , name ) ;
804
+ assert . strictEqual ( 1 , reply . length , name ) ;
805
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] ) , name ) ;
806
+ assert . strictEqual ( "<Buffer 73 74 72 69 6e 67 20 76 61 6c 75 65>" , reply [ 0 ] . inspect ( ) , name ) ;
807
+ } ) ;
808
+
809
+ detect_client . hmset ( "hash key 2" , "key 1" , "val 1" , "key 2" , "val 2" ) ;
810
+ // array of Buffers or Strings
811
+ detect_client . multi ( ) . hmget ( "hash key 2" , "key 1" , "key 2" ) . exec ( function ( err , reply ) {
812
+ assert . strictEqual ( null , err , name ) ;
813
+ assert . strictEqual ( true , Array . isArray ( reply ) , name ) ;
814
+ assert . strictEqual ( 1 , reply . length , name ) ;
815
+ assert . strictEqual ( 2 , reply [ 0 ] . length , name ) ;
816
+ assert . strictEqual ( "val 1" , reply [ 0 ] [ 0 ] , name ) ;
817
+ assert . strictEqual ( "val 2" , reply [ 0 ] [ 1 ] , name ) ;
818
+ } ) ;
819
+ detect_client . multi ( ) . hmget ( new Buffer ( "hash key 2" ) , "key 1" , "key 2" ) . exec ( function ( err , reply ) {
820
+ assert . strictEqual ( null , err , name ) ;
821
+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
822
+ assert . strictEqual ( 1 , reply . length , name ) ;
823
+ assert . strictEqual ( 2 , reply [ 0 ] . length , name ) ;
824
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ 0 ] ) ) ;
825
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ 1 ] ) ) ;
826
+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 0 ] [ 0 ] . inspect ( ) , name ) ;
827
+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 0 ] [ 1 ] . inspect ( ) , name ) ;
828
+ } ) ;
829
+
830
+ // array of strings with undefined values (repro #344)
831
+ detect_client . multi ( ) . hmget ( "hash key 2" , "key 3" , "key 4" ) . exec ( function ( err , reply ) {
832
+ assert . strictEqual ( null , err , name ) ;
833
+ assert . strictEqual ( true , Array . isArray ( reply ) , name ) ;
834
+ assert . strictEqual ( 1 , reply . length , name ) ;
835
+ assert . strictEqual ( 2 , reply [ 0 ] . length , name ) ;
836
+ assert . equal ( null , reply [ 0 ] [ 0 ] , name ) ;
837
+ assert . equal ( null , reply [ 0 ] [ 1 ] , name ) ;
838
+ } ) ;
839
+
840
+ // Object of Buffers or Strings
841
+ detect_client . multi ( ) . hgetall ( "hash key 2" ) . exec ( function ( err , reply ) {
842
+ assert . strictEqual ( null , err , name ) ;
843
+ assert . strictEqual ( 1 , reply . length , name ) ;
844
+ assert . strictEqual ( "object" , typeof reply [ 0 ] , name ) ;
845
+ assert . strictEqual ( 2 , Object . keys ( reply [ 0 ] ) . length , name ) ;
846
+ assert . strictEqual ( "val 1" , reply [ 0 ] [ "key 1" ] , name ) ;
847
+ assert . strictEqual ( "val 2" , reply [ 0 ] [ "key 2" ] , name ) ;
848
+ } ) ;
849
+ detect_client . multi ( ) . hgetall ( new Buffer ( "hash key 2" ) ) . exec ( function ( err , reply ) {
850
+ assert . strictEqual ( null , err , name ) ;
851
+ assert . strictEqual ( 1 , reply . length , name ) ;
852
+ assert . strictEqual ( "object" , typeof reply , name ) ;
853
+ assert . strictEqual ( 2 , Object . keys ( reply [ 0 ] ) . length , name ) ;
854
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ "key 1" ] ) ) ;
855
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ "key 2" ] ) ) ;
856
+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 0 ] [ "key 1" ] . inspect ( ) , name ) ;
857
+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 0 ] [ "key 2" ] . inspect ( ) , name ) ;
858
+ } ) ;
859
+
860
+ // Can interleave string and buffer results:
861
+ detect_client . multi ( )
862
+ . hget ( "hash key 2" , "key 1" )
863
+ . hget ( new Buffer ( "hash key 2" ) , "key 1" )
864
+ . hget ( "hash key 2" , new Buffer ( "key 2" ) )
865
+ . hget ( "hash key 2" , "key 2" )
866
+ . exec ( function ( err , reply ) {
867
+ assert . strictEqual ( null , err , name ) ;
868
+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
869
+ assert . strictEqual ( 4 , reply . length , name ) ;
870
+ assert . strictEqual ( "val 1" , reply [ 0 ] , name ) ;
871
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 1 ] ) ) ;
872
+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 1 ] . inspect ( ) , name ) ;
873
+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 2 ] ) ) ;
874
+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 2 ] . inspect ( ) , name ) ;
875
+ assert . strictEqual ( "val 2" , reply [ 3 ] , name ) ;
876
+ } ) ;
877
+
878
+ detect_client . quit ( function ( err , res ) {
879
+ next ( name ) ;
880
+ } ) ;
881
+ } ) ;
882
+ } ;
883
+
795
884
tests . socket_nodelay = function ( ) {
796
885
var name = "socket_nodelay" , c1 , c2 , c3 , ready_count = 0 , quit_count = 0 ;
797
886
0 commit comments