-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpubsub-subscribe-test.js
142 lines (105 loc) · 4.47 KB
/
pubsub-subscribe-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/env node
/*
* Spade, pubsub mode events test.
*/
exports.test = function ( done, assertions ) {
var debug = !! true
, emptyFn = function () {}
, log = console.log
, dbg = debug ? console.log : emptyFn
, test_utils = require( './deps/test-utils' )
, inspect = test_utils.inspect
, format = test_utils.format
, Spade = require( '../' )
, client = Spade()
, another_client = Spade( {
security : {
'127.0.0.1:6379' : {
db : 1
}
}
} )
// expected events
, evts = []
// collected events
, collected = client.logger.collected
// channels
, channels = [ 'a', 'a', 'b', 'b', 'c', 'c' ]
, sub_cback_OK = 0
, unsub_cback_OK = 0
, exit = typeof done === 'function' ? done : function () {}
, assert = assertions || require( 'assert' )
;
log( '- a new Spade client was created with default options.' );
log( '- enable CLI logging.' );
client.cli( true, function ( ename, args ) {
dbg( ' !%s %s', ename, format( ename, args || [] ) );
}, true );
log( '- execute/enqueue SUBSCRIBE command in offline mode.' );
log( '- now connecting client.' );
// push expected events
evts.push( 'connect', 'reply', 'dbselected', 'scanqueue', 'ready' );
client.connect( null, function () {
var i = 0
;
client.commands.subscribe( channels, function () {
log( '- I\'m SUBSCRIBE callback.' );
sub_cback_OK = 1;
} );
log( '- try to execute a TIME command in pubsub mode.' );
// push expected events
evts.push( 'error' );
evts.push( 'listen' );
for ( ; i < channels.length; ++i ) evts.push( 'message' );
client.commands.time( function ( is_err, reply, fn ) {
log( '- TIME callback should get an error: %s.', fn( reply ) );
assert.ok( is_err );
} );
client.on( 'shutup', function () {
// push expected reply event from PING
evts.push( 'reply' );
client.commands.ping( function ( is_err, reply, fn ) {
log( '- PING callback should get PONG reply, got:', fn( reply )[ 0 ] );
assert.ok( fn( reply )[ 0 ] === 'PONG' );
log( '- now disconnecting clients with QUIT.' );
// push expected reply event from QUIT
evts.push( 'reply' );
// push expected reply events for disconnection
evts.push( 'offline', 'lost' );
client.commands.quit( function ( is_err, reply, fn ) {
log( '- client QUIT callback.', fn( reply ) );
assert.ok( fn( reply )[ 0 ] === 'OK' );
} );
// quit other client
another_client.commands.quit( function ( is_err, reply, fn ) {
log( '- another client QUIT callback.', fn( reply ) );
assert.ok( fn( reply )[ 0 ] === 'OK' );
} );
} );
} );
log( '- now connecting another client.' );
another_client.connect( null, function ( address ) {
log( '- another client publish a message to channel.' );
another_client.commands.publish( 'a', 'Houston we have a problem here!', function () {
// push expected events, 3 unsubscribe messages + 1 published message
for ( i = 0; i < 3 + 1; ++i ) evts.push( 'message' );
evts.push( 'shutup' );
log( '- #unsubscribe client from all channels.' );
client.commands.unsubscribe( null, function ( ) {
log( '- I\'m UNSUBSCRIBE callback.' );
unsub_cback_OK = 1;
} );
} );
} );
} );
log( '- wait 2 seconds to collect events..' );
setTimeout( function () {
log( '- deep check collected events, should be:', inspect( evts ) );
assert.deepEqual( collected.events, evts, 'got: ' + inspect( collected.events ) );
log( '- check execution of SUBSCRIBE and UNSUBSCRIBE callbacks:', inspect( [ sub_cback_OK, unsub_cback_OK ] ) );
assert.deepEqual( [ sub_cback_OK, unsub_cback_OK ], [ 1, 1 ] );
exit();
}, 2000 );
};
// single test execution with node
if ( process.argv[ 1 ] === __filename ) exports.test = exports.test();