@@ -792,6 +792,95 @@ tests.detect_buffers = function () {
792792 } ) ;
793793} ;
794794
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+
795884tests . socket_nodelay = function ( ) {
796885 var name = "socket_nodelay" , c1 , c2 , c3 , ready_count = 0 , quit_count = 0 ;
797886
0 commit comments