pubnub 3.5.8 → 3.5.12

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pubnub might be problematic. Click here for more details.

@@ -0,0 +1,541 @@
1
+ require 'spec_helper'
2
+
3
+ describe "#history" do
4
+ before(:each) do
5
+
6
+ EM.stop if EM.reactor_running?
7
+ while EM.reactor_running? do end
8
+ sleep(0.1)
9
+
10
+ @response_output = StringIO.new
11
+ @message_output = StringIO.new
12
+
13
+ @callback = lambda { |envelope|
14
+ $logger.debug 'FIRING CALLBACK FROM TEST'
15
+ @response_output.write envelope.response
16
+ @message_output.write envelope.msg
17
+ @after_callback = true
18
+ }
19
+
20
+ @error_callback = lambda { |envelope|
21
+ $logger.debug 'FIRING ERROR CALLBACK FROM TEST'
22
+ @response_output.write envelope.response
23
+ @message_output.write envelope.msg
24
+ @after_error_callback = true
25
+ }
26
+
27
+ @pn = Pubnub.new(:disable_persistent_connection => true, :max_retries => 0, :subscribe_key => :demo, :publish_key => :demo, :auth_key => :demoish_authkey, :secret_key => 'some_secret_key', :error_callback => @error_callback)
28
+ @pn.uuid = 'rubytests'
29
+
30
+ end
31
+ context "uses ssl" do
32
+ before(:each) { @ssl = true }
33
+ context "passess callback as block" do
34
+ context "gets valid json in response" do
35
+ context "gets status 200 in response" do
36
+ context "uses sync connection" do
37
+ it 'works fine' do
38
+ VCR.use_cassette("history-ssl-block-valid-200-sync", :record => :none) do
39
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", &@callback)
40
+
41
+ @after_callback.should eq true
42
+ @response_output.seek 0
43
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
44
+ @message_output.seek 0
45
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
46
+ end
47
+ end
48
+ end
49
+ context "uses async connection" do
50
+ it 'works fine' do
51
+ VCR.use_cassette("history-ssl-block-valid-200-async", :record => :none) do
52
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", &@callback)
53
+
54
+ eventually do
55
+ @after_callback.should eq true
56
+ @response_output.seek 0
57
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
58
+ @message_output.seek 0
59
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ context "gets status non-200 in response" do
66
+ context "uses sync connection" do
67
+ it 'works fine' do
68
+ VCR.use_cassette("history-ssl-block-valid-non-200-sync", :record => :none) do
69
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", &@callback)
70
+
71
+ @after_error_callback.should eq true
72
+ @response_output.seek 0
73
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
74
+ @message_output.seek 0
75
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
76
+ end
77
+ end
78
+ end
79
+ context "uses async connection" do
80
+ it 'works fine' do
81
+ VCR.use_cassette("history-ssl-block-valid-non-200-async", :record => :none) do
82
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", &@callback)
83
+
84
+ eventually do
85
+ @after_error_callback.should eq true
86
+ @response_output.seek 0
87
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
88
+ @message_output.seek 0
89
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ context "gets invalid json in response" do
97
+ context "gets status 200 in response" do
98
+ context "uses sync connection" do
99
+ it 'works fine' do
100
+ VCR.use_cassette("history-ssl-block-invalid-200-sync", :record => :none) do
101
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", &@callback)
102
+
103
+ @after_error_callback.should eq true
104
+ @response_output.seek 0
105
+ @response_output.read.should eq '[[{"text":"hey'
106
+ @message_output.seek 0
107
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
108
+ end
109
+ end
110
+ end
111
+ context "uses async connection" do
112
+ it 'works fine' do
113
+ VCR.use_cassette("history-ssl-block-invalid-200-async", :record => :none) do
114
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", &@callback)
115
+
116
+ eventually do
117
+ @after_error_callback.should eq true
118
+ @response_output.seek 0
119
+ @response_output.read.should eq '[[{"text":"hey'
120
+ @message_output.seek 0
121
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ context "gets status non-200 in response" do
128
+ context "uses sync connection" do
129
+ it 'works fine' do
130
+ VCR.use_cassette("history-ssl-block-invalid-non-200-sync", :record => :none) do
131
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", &@callback)
132
+
133
+ @after_error_callback.should eq true
134
+ @response_output.seek 0
135
+ @response_output.read.should eq '[[{"text":"hey'
136
+ @message_output.seek 0
137
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
138
+ end
139
+ end
140
+ end
141
+ context "uses async connection" do
142
+ it 'works fine' do
143
+ VCR.use_cassette("history-ssl-block-invalid-non-200-async", :record => :none) do
144
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", &@callback)
145
+
146
+ eventually do
147
+ @after_error_callback.should eq true
148
+ @response_output.seek 0
149
+ @response_output.read.should eq '[[{"text":"hey'
150
+ @message_output.seek 0
151
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+ context "passess callback as parameter" do
160
+ context "gets valid json in response" do
161
+ context "gets status 200 in response" do
162
+ context "uses sync connection" do
163
+ it 'works fine' do
164
+ VCR.use_cassette("history-ssl-parameter-valid-200-sync", :record => :none) do
165
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", :callback => @callback)
166
+
167
+ @after_callback.should eq true
168
+ @response_output.seek 0
169
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
170
+ @message_output.seek 0
171
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
172
+ end
173
+ end
174
+ end
175
+ context "uses async connection" do
176
+ it 'works fine' do
177
+ VCR.use_cassette("history-ssl-parameter-valid-200-async", :record => :none) do
178
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", :callback => @callback)
179
+
180
+ eventually do
181
+ @after_callback.should eq true
182
+ @response_output.seek 0
183
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
184
+ @message_output.seek 0
185
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
191
+ context "gets status non-200 in response" do
192
+ context "uses sync connection" do
193
+ it 'works fine' do
194
+ VCR.use_cassette("history-ssl-parameter-valid-non-200-sync", :record => :none) do
195
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", :callback => @callback)
196
+
197
+ @after_error_callback.should eq true
198
+ @response_output.seek 0
199
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
200
+ @message_output.seek 0
201
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
202
+ end
203
+ end
204
+ end
205
+ context "uses async connection" do
206
+ it 'works fine' do
207
+ VCR.use_cassette("history-ssl-parameter-valid-non-200-async", :record => :none) do
208
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", :callback => @callback)
209
+
210
+ eventually do
211
+ @after_error_callback.should eq true
212
+ @response_output.seek 0
213
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
214
+ @message_output.seek 0
215
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
222
+ context "gets invalid json in response" do
223
+ context "gets status 200 in response" do
224
+ context "uses sync connection" do
225
+ it 'works fine' do
226
+ VCR.use_cassette("history-ssl-parameter-invalid-200-sync", :record => :none) do
227
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", :callback => @callback)
228
+
229
+ @after_error_callback.should eq true
230
+ @response_output.seek 0
231
+ @response_output.read.should eq '[[{"text":"hey'
232
+ @message_output.seek 0
233
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
234
+ end
235
+ end
236
+ end
237
+ context "uses async connection" do
238
+ it 'works fine' do
239
+ VCR.use_cassette("history-ssl-parameter-invalid-200-async", :record => :none) do
240
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", :callback => @callback)
241
+
242
+ eventually do
243
+ @after_error_callback.should eq true
244
+ @response_output.seek 0
245
+ @response_output.read.should eq '[[{"text":"hey'
246
+ @message_output.seek 0
247
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
248
+ end
249
+ end
250
+ end
251
+ end
252
+ end
253
+ context "gets status non-200 in response" do
254
+ context "uses sync connection" do
255
+ it 'works fine' do
256
+ VCR.use_cassette("history-ssl-parameter-invalid-non-200-sync", :record => :none) do
257
+ @pn.history(:ssl => true, :http_sync => true, :channel => "demo", :callback => @callback)
258
+
259
+ @after_error_callback.should eq true
260
+ @response_output.seek 0
261
+ @response_output.read.should eq '[[{"text":"hey'
262
+ @message_output.seek 0
263
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
264
+ end
265
+ end
266
+ end
267
+ context "uses async connection" do
268
+ it 'works fine' do
269
+ VCR.use_cassette("history-ssl-parameter-invalid-non-200-async", :record => :none) do
270
+ @pn.history(:ssl => true, :http_sync => false, :channel => "demo", :callback => @callback)
271
+
272
+ eventually do
273
+ @after_error_callback.should eq true
274
+ @response_output.seek 0
275
+ @response_output.read.should eq '[[{"text":"hey'
276
+ @message_output.seek 0
277
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
278
+ end
279
+ end
280
+ end
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
286
+ context "uses non-ssl" do
287
+ before(:each) { @ssl = false }
288
+ context "passess callback as block" do
289
+ context "gets valid json in response" do
290
+ context "gets status 200 in response" do
291
+ context "uses sync connection" do
292
+ it 'works fine' do
293
+ VCR.use_cassette("history-nonssl-block-valid-200-sync", :record => :none) do
294
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", &@callback)
295
+
296
+ @after_callback.should eq true
297
+ @response_output.seek 0
298
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
299
+ @message_output.seek 0
300
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
301
+ end
302
+ end
303
+ end
304
+ context "uses async connection" do
305
+ it 'works fine' do
306
+ VCR.use_cassette("history-nonssl-block-valid-200-async", :record => :none) do
307
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", &@callback)
308
+
309
+ eventually do
310
+ @after_callback.should eq true
311
+ @response_output.seek 0
312
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
313
+ @message_output.seek 0
314
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
315
+ end
316
+ end
317
+ end
318
+ end
319
+ end
320
+ context "gets status non-200 in response" do
321
+ context "uses sync connection" do
322
+ it 'works fine' do
323
+ VCR.use_cassette("history-nonssl-block-valid-non-200-sync", :record => :none) do
324
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", &@callback)
325
+
326
+ @after_error_callback.should eq true
327
+ @response_output.seek 0
328
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
329
+ @message_output.seek 0
330
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
331
+ end
332
+ end
333
+ end
334
+ context "uses async connection" do
335
+ it 'works fine' do
336
+ VCR.use_cassette("history-nonssl-block-valid-non-200-async", :record => :none) do
337
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", &@callback)
338
+
339
+ eventually do
340
+ @after_error_callback.should eq true
341
+ @response_output.seek 0
342
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
343
+ @message_output.seek 0
344
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
345
+ end
346
+ end
347
+ end
348
+ end
349
+ end
350
+ end
351
+ context "gets invalid json in response" do
352
+ context "gets status 200 in response" do
353
+ context "uses sync connection" do
354
+ it 'works fine' do
355
+ VCR.use_cassette("history-nonssl-block-invalid-200-sync", :record => :none) do
356
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", &@callback)
357
+
358
+ @after_error_callback.should eq true
359
+ @response_output.seek 0
360
+ @response_output.read.should eq '[[{"text":"hey'
361
+ @message_output.seek 0
362
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
363
+ end
364
+ end
365
+ end
366
+ context "uses async connection" do
367
+ it 'works fine' do
368
+ VCR.use_cassette("history-nonssl-block-invalid-200-async", :record => :none) do
369
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", &@callback)
370
+
371
+ eventually do
372
+ @after_error_callback.should eq true
373
+ @response_output.seek 0
374
+ @response_output.read.should eq '[[{"text":"hey'
375
+ @message_output.seek 0
376
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
377
+ end
378
+ end
379
+ end
380
+ end
381
+ end
382
+ context "gets status non-200 in response" do
383
+ context "uses sync connection" do
384
+ it 'works fine' do
385
+ VCR.use_cassette("history-nonssl-block-invalid-non-200-sync", :record => :none) do
386
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", &@callback)
387
+
388
+ @after_error_callback.should eq true
389
+ @response_output.seek 0
390
+ @response_output.read.should eq '[[{"text":"hey'
391
+ @message_output.seek 0
392
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
393
+ end
394
+ end
395
+ end
396
+ context "uses async connection" do
397
+ it 'works fine' do
398
+ VCR.use_cassette("history-nonssl-block-invalid-non-200-async", :record => :none) do
399
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", &@callback)
400
+
401
+ eventually do
402
+ @after_error_callback.should eq true
403
+ @response_output.seek 0
404
+ @response_output.read.should eq '[[{"text":"hey'
405
+ @message_output.seek 0
406
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
407
+ end
408
+ end
409
+ end
410
+ end
411
+ end
412
+ end
413
+ end
414
+ context "passess callback as parameter" do
415
+ context "gets valid json in response" do
416
+ context "gets status 200 in response" do
417
+ context "uses sync connection" do
418
+ it 'works fine' do
419
+ VCR.use_cassette("history-nonssl-parameter-valid-200-sync", :record => :none) do
420
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", :callback => @callback)
421
+
422
+ @after_callback.should eq true
423
+ @response_output.seek 0
424
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
425
+ @message_output.seek 0
426
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
427
+ end
428
+ end
429
+ end
430
+ context "uses async connection" do
431
+ it 'works fine' do
432
+ VCR.use_cassette("history-nonssl-parameter-valid-200-async", :record => :none) do
433
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", :callback => @callback)
434
+
435
+ eventually do
436
+ @after_callback.should eq true
437
+ @response_output.seek 0
438
+ @response_output.read.should eq ('[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'*3)
439
+ @message_output.seek 0
440
+ @message_output.read.should eq '{"text"=>"hey"}{"text"=>"howdy"}{"text"=>"hello"}'
441
+ end
442
+ end
443
+ end
444
+ end
445
+ end
446
+ context "gets status non-200 in response" do
447
+ context "uses sync connection" do
448
+ it 'works fine' do
449
+ VCR.use_cassette("history-nonssl-parameter-valid-non-200-sync", :record => :none) do
450
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", :callback => @callback)
451
+
452
+ @after_error_callback.should eq true
453
+ @response_output.seek 0
454
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
455
+ @message_output.seek 0
456
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
457
+ end
458
+ end
459
+ end
460
+ context "uses async connection" do
461
+ it 'works fine' do
462
+ VCR.use_cassette("history-nonssl-parameter-valid-non-200-async", :record => :none) do
463
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", :callback => @callback)
464
+
465
+ eventually do
466
+ @after_error_callback.should eq true
467
+ @response_output.seek 0
468
+ @response_output.read.should eq '[[{"text":"hey"},{"text":"howdy"},{"text":"hello"}],13904298660188334,13904300138214858]'
469
+ @message_output.seek 0
470
+ @message_output.read.should eq '[0,"Non 2xx server response."]'
471
+ end
472
+ end
473
+ end
474
+ end
475
+ end
476
+ end
477
+ context "gets invalid json in response" do
478
+ context "gets status 200 in response" do
479
+ context "uses sync connection" do
480
+ it 'works fine' do
481
+ VCR.use_cassette("history-nonssl-parameter-invalid-200-sync", :record => :none) do
482
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", :callback => @callback)
483
+
484
+ @after_error_callback.should eq true
485
+ @response_output.seek 0
486
+ @response_output.read.should eq '[[{"text":"hey'
487
+ @message_output.seek 0
488
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
489
+ end
490
+ end
491
+ end
492
+ context "uses async connection" do
493
+ it 'works fine' do
494
+ VCR.use_cassette("history-nonssl-parameter-invalid-200-async", :record => :none) do
495
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", :callback => @callback)
496
+
497
+ eventually do
498
+ @after_error_callback.should eq true
499
+ @response_output.seek 0
500
+ @response_output.read.should eq '[[{"text":"hey'
501
+ @message_output.seek 0
502
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
503
+ end
504
+ end
505
+ end
506
+ end
507
+ end
508
+ context "gets status non-200 in response" do
509
+ context "uses sync connection" do
510
+ it 'works fine' do
511
+ VCR.use_cassette("history-nonssl-parameter-invalid-non-200-sync", :record => :none) do
512
+ @pn.history(:ssl => false, :http_sync => true, :channel => "demo", :callback => @callback)
513
+
514
+ @after_error_callback.should eq true
515
+ @response_output.seek 0
516
+ @response_output.read.should eq '[[{"text":"hey'
517
+ @message_output.seek 0
518
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
519
+ end
520
+ end
521
+ end
522
+ context "uses async connection" do
523
+ it 'works fine' do
524
+ VCR.use_cassette("history-nonssl-parameter-invalid-non-200-async", :record => :none) do
525
+ @pn.history(:ssl => false, :http_sync => false, :channel => "demo", :callback => @callback)
526
+
527
+ eventually do
528
+ @after_error_callback.should eq true
529
+ @response_output.seek 0
530
+ @response_output.read.should eq '[[{"text":"hey'
531
+ @message_output.seek 0
532
+ @message_output.read.should eq '[0,"Invalid JSON in response."]'
533
+ end
534
+ end
535
+ end
536
+ end
537
+ end
538
+ end
539
+ end
540
+ end
541
+ end