1+ 'use strict' ;
2+
3+ var assert = require ( "assert" ) ;
4+ var config = require ( "./lib/config" ) ;
5+ var helper = require ( './helper' ) ;
6+ var redis = config . redis ;
7+
8+ describe ( "detect_buffers" , function ( ) {
9+
10+ helper . allTests ( function ( parser , ip , args ) {
11+
12+ describe ( "using " + parser + " and " + ip , function ( ) {
13+ var client ;
14+ var args = config . configureClient ( parser , ip , {
15+ detect_buffers : true
16+ } ) ;
17+
18+ beforeEach ( function ( done ) {
19+ client = redis . createClient . apply ( redis . createClient , args ) ;
20+ client . once ( "error" , done ) ;
21+ client . once ( "connect" , function ( ) {
22+ client . flushdb ( function ( err ) {
23+ client . hmset ( "hash key 2" , "key 1" , "val 1" , "key 2" , "val 2" ) ;
24+ client . set ( "string key 1" , "string value" ) ;
25+ return done ( err ) ;
26+ } ) ;
27+ } ) ;
28+ } ) ;
29+
30+ describe ( 'get' , function ( ) {
31+ describe ( 'first argument is a string' , function ( ) {
32+ it ( 'returns a string' , function ( done ) {
33+ client . get ( "string key 1" , helper . isString ( "string value" , done ) ) ;
34+ } ) ;
35+
36+ it ( 'returns a string when executed as part of transaction' , function ( done ) {
37+ client . multi ( ) . get ( "string key 1" ) . exec ( helper . isString ( "string value" , done ) ) ;
38+ } ) ;
39+ } ) ;
40+
41+ describe ( 'first argument is a buffer' , function ( ) {
42+ it ( 'returns a buffer' , function ( done ) {
43+ client . get ( new Buffer ( "string key 1" ) , function ( err , reply ) {
44+ assert . strictEqual ( true , Buffer . isBuffer ( reply ) ) ;
45+ assert . strictEqual ( "<Buffer 73 74 72 69 6e 67 20 76 61 6c 75 65>" , reply . inspect ( ) ) ;
46+ return done ( err ) ;
47+ } ) ;
48+ } ) ;
49+
50+ it ( 'returns a bufffer when executed as part of transaction' , function ( done ) {
51+ client . multi ( ) . get ( new Buffer ( "string key 1" ) ) . exec ( function ( err , reply ) {
52+ assert . strictEqual ( 1 , reply . length ) ;
53+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] ) ) ;
54+ assert . strictEqual ( "<Buffer 73 74 72 69 6e 67 20 76 61 6c 75 65>" , reply [ 0 ] . inspect ( ) ) ;
55+ return done ( err ) ;
56+ } ) ;
57+ } ) ;
58+ } ) ;
59+ } ) ;
60+
61+ describe ( 'multi.hget' , function ( ) {
62+ it ( 'can interleave string and buffer results' , function ( done ) {
63+ client . multi ( )
64+ . hget ( "hash key 2" , "key 1" )
65+ . hget ( new Buffer ( "hash key 2" ) , "key 1" )
66+ . hget ( "hash key 2" , new Buffer ( "key 2" ) )
67+ . hget ( "hash key 2" , "key 2" )
68+ . exec ( function ( err , reply ) {
69+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
70+ assert . strictEqual ( 4 , reply . length ) ;
71+ assert . strictEqual ( "val 1" , reply [ 0 ] ) ;
72+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 1 ] ) ) ;
73+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 1 ] . inspect ( ) ) ;
74+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 2 ] ) ) ;
75+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 2 ] . inspect ( ) ) ;
76+ assert . strictEqual ( "val 2" , reply [ 3 ] ) ;
77+ return done ( err ) ;
78+ } ) ;
79+ } ) ;
80+ } ) ;
81+
82+ describe ( 'hmget' , function ( ) {
83+ describe ( 'first argument is a string' , function ( ) {
84+ it ( 'returns strings for keys requested' , function ( done ) {
85+ client . hmget ( "hash key 2" , "key 1" , "key 2" , function ( err , reply ) {
86+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
87+ assert . strictEqual ( 2 , reply . length ) ;
88+ assert . strictEqual ( "val 1" , reply [ 0 ] ) ;
89+ assert . strictEqual ( "val 2" , reply [ 1 ] ) ;
90+ return done ( err ) ;
91+ } ) ;
92+ } ) ;
93+
94+ it ( 'returns strings for keys requested in transaction' , function ( done ) {
95+ client . multi ( ) . hmget ( "hash key 2" , "key 1" , "key 2" ) . exec ( function ( err , reply ) {
96+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
97+ assert . strictEqual ( 1 , reply . length ) ;
98+ assert . strictEqual ( 2 , reply [ 0 ] . length ) ;
99+ assert . strictEqual ( "val 1" , reply [ 0 ] [ 0 ] ) ;
100+ assert . strictEqual ( "val 2" , reply [ 0 ] [ 1 ] ) ;
101+ return done ( err ) ;
102+ } ) ;
103+ } ) ;
104+
105+ it ( 'handles array of strings with undefined values (repro #344)' , function ( done ) {
106+ client . hmget ( "hash key 2" , "key 3" , "key 4" , function ( err , reply ) {
107+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
108+ assert . strictEqual ( 2 , reply . length ) ;
109+ assert . equal ( null , reply [ 0 ] ) ;
110+ assert . equal ( null , reply [ 1 ] ) ;
111+ return done ( err ) ;
112+ } ) ;
113+ } ) ;
114+
115+ it ( 'handles array of strings with undefined values in transaction (repro #344)' , function ( done ) {
116+ client . multi ( ) . hmget ( "hash key 2" , "key 3" , "key 4" ) . exec ( function ( err , reply ) {
117+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
118+ assert . strictEqual ( 1 , reply . length ) ;
119+ assert . strictEqual ( 2 , reply [ 0 ] . length ) ;
120+ assert . equal ( null , reply [ 0 ] [ 0 ] ) ;
121+ assert . equal ( null , reply [ 0 ] [ 1 ] ) ;
122+ return done ( err ) ;
123+ } ) ;
124+ } ) ;
125+ } ) ;
126+
127+ describe ( 'first argument is a buffer' , function ( ) {
128+ it ( 'returns buffers for keys requested' , function ( done ) {
129+ client . hmget ( new Buffer ( "hash key 2" ) , "key 1" , "key 2" , function ( err , reply ) {
130+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
131+ assert . strictEqual ( 2 , reply . length ) ;
132+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] ) ) ;
133+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 1 ] ) ) ;
134+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 0 ] . inspect ( ) ) ;
135+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 1 ] . inspect ( ) ) ;
136+ return done ( err ) ;
137+ } ) ;
138+ } ) ;
139+
140+ it ( "returns buffers for keys requested in transaction" , function ( done ) {
141+ client . multi ( ) . hmget ( new Buffer ( "hash key 2" ) , "key 1" , "key 2" ) . exec ( function ( err , reply ) {
142+ assert . strictEqual ( true , Array . isArray ( reply ) ) ;
143+ assert . strictEqual ( 1 , reply . length ) ;
144+ assert . strictEqual ( 2 , reply [ 0 ] . length ) ;
145+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ 0 ] ) ) ;
146+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ 1 ] ) ) ;
147+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 0 ] [ 0 ] . inspect ( ) ) ;
148+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 0 ] [ 1 ] . inspect ( ) ) ;
149+ return done ( err ) ;
150+ } ) ;
151+ } ) ;
152+ } ) ;
153+ } ) ;
154+
155+ describe ( 'hgetall' , function ( done ) {
156+ describe ( 'first argument is a string' , function ( ) {
157+ it ( 'returns string values' , function ( done ) {
158+ client . hgetall ( "hash key 2" , function ( err , reply ) {
159+ assert . strictEqual ( "object" , typeof reply ) ;
160+ assert . strictEqual ( 2 , Object . keys ( reply ) . length ) ;
161+ assert . strictEqual ( "val 1" , reply [ "key 1" ] ) ;
162+ assert . strictEqual ( "val 2" , reply [ "key 2" ] ) ;
163+ return done ( err ) ;
164+ } ) ;
165+ } ) ;
166+
167+ it ( 'returns string values when executed in transaction' , function ( done ) {
168+ client . multi ( ) . hgetall ( "hash key 2" ) . exec ( function ( err , reply ) {
169+ assert . strictEqual ( 1 , reply . length ) ;
170+ assert . strictEqual ( "object" , typeof reply [ 0 ] ) ;
171+ assert . strictEqual ( 2 , Object . keys ( reply [ 0 ] ) . length ) ;
172+ assert . strictEqual ( "val 1" , reply [ 0 ] [ "key 1" ] ) ;
173+ assert . strictEqual ( "val 2" , reply [ 0 ] [ "key 2" ] ) ;
174+ return done ( err ) ;
175+ } ) ;
176+ } ) ;
177+ } ) ;
178+
179+ describe ( 'first argument is a buffer' , function ( ) {
180+ it ( 'returns buffer values' , function ( done ) {
181+ client . hgetall ( new Buffer ( "hash key 2" ) , function ( err , reply ) {
182+ assert . strictEqual ( null , err ) ;
183+ assert . strictEqual ( "object" , typeof reply ) ;
184+ assert . strictEqual ( 2 , Object . keys ( reply ) . length ) ;
185+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ "key 1" ] ) ) ;
186+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ "key 2" ] ) ) ;
187+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ "key 1" ] . inspect ( ) ) ;
188+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ "key 2" ] . inspect ( ) ) ;
189+ return done ( err ) ;
190+ } ) ;
191+ } ) ;
192+
193+ it ( 'returns buffer values when executed in transaction' , function ( done ) {
194+ client . multi ( ) . hgetall ( new Buffer ( "hash key 2" ) ) . exec ( function ( err , reply ) {
195+ assert . strictEqual ( 1 , reply . length ) ;
196+ assert . strictEqual ( "object" , typeof reply ) ;
197+ assert . strictEqual ( 2 , Object . keys ( reply [ 0 ] ) . length ) ;
198+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ "key 1" ] ) ) ;
199+ assert . strictEqual ( true , Buffer . isBuffer ( reply [ 0 ] [ "key 2" ] ) ) ;
200+ assert . strictEqual ( "<Buffer 76 61 6c 20 31>" , reply [ 0 ] [ "key 1" ] . inspect ( ) ) ;
201+ assert . strictEqual ( "<Buffer 76 61 6c 20 32>" , reply [ 0 ] [ "key 2" ] . inspect ( ) ) ;
202+ return done ( err ) ;
203+ } ) ;
204+ } ) ;
205+ } ) ;
206+ } ) ;
207+ } ) ;
208+ } ) ;
209+ } ) ;
0 commit comments