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