UNPKG

8.29 kBJavaScriptView Raw
1var Primus = require('primus');
2var multiplex = require('../');
3var Emitter = require('events').EventEmitter;
4var http = require('http').Server;
5var expect = require('expect.js');
6var opts = { transformer: 'sockjs', parser: 'JSON' };
7
8// creates the client
9function client(srv, primus, port){
10 var addr = srv.address();
11 var url = 'http://' + addr.address + ':' + (port || addr.port);
12 return new primus.Socket(url);
13}
14
15// creates the server
16function server(srv, opts) {
17 // use multiplex plugin
18 return Primus(srv, opts).use('multiplex', multiplex);
19}
20
21describe('primus-multiplex', function (){
22
23 it('should have required methods', function (done){
24 var srv = http();
25 var primus = server(srv, opts);
26 srv.listen(function(){
27 var cl = client(srv, primus);
28 expect(primus.channel).to.be.a('function');
29 expect(cl.channel).to.be.a('function');
30 done();
31 });
32 });
33
34 it('should return EventEmitter instances', function (done){
35
36 var srv = http();
37 var primus = server(srv, opts);
38
39 var a = primus.channel('a');
40 var b = primus.channel('b');
41 var c = primus.channel('c');
42
43 expect(a).to.be.a(Emitter);
44 expect(b).to.be.a(Emitter);
45 expect(c).to.be.a(Emitter);
46 done();
47 });
48
49 it('should stablish a connection', function(done){
50 this.timeout(0);
51 var srv = http();
52 var primus = server(srv, opts);
53 var a = primus.channel('a');
54 srv.listen(function(){
55 a.on('connection', function (spark) {
56 done();
57 });
58 var cl = client(srv, primus);
59 var ca = cl.channel('a');
60 });
61 });
62
63 it('should allow sending message from client to server', function(done){
64 this.timeout(0);
65 var srv = http();
66 var primus = server(srv, opts);
67 var a = primus.channel('a');
68 srv.listen(function(){
69 a.on('connection', function (spark) {
70 spark.on('data', function (data){
71 expect(data).to.be('hi');
72 done();
73 });
74 });
75 var cl = client(srv, primus);
76 var ca = cl.channel('a');
77 ca.write('hi');
78 });
79 });
80
81 it('should allow sending message from server to client', function(done){
82 this.timeout(0);
83 var srv = http();
84 var primus = server(srv, opts);
85 var a = primus.channel('a');
86 srv.listen(function(){
87 a.on('connection', function (spark) {
88 spark.write('hi');
89 });
90 var cl = client(srv, primus);
91 var ca = cl.channel('a');
92 ca.on('data', function (data) {
93 expect(data).to.be('hi');
94 done();
95 });
96 });
97 });
98
99 it('should not intercept regular socket connections on data', function(done){
100 this.timeout(0);
101 var srv = http();
102 var primus = server(srv, opts);
103 var a = primus.channel('a');
104 srv.listen(function(){
105 primus.on('connection', function (spark) {
106 spark.on('data', function (data) {
107 done('Should ignore data');
108 });
109 a.on('connection', function (spark) {
110 spark.on('data', function (data) {
111 expect(data).to.be('hi');
112 done();
113 });
114 });
115 });
116 var cl = client(srv, primus);
117 var ca = cl.channel('a');
118 ca.write('hi');
119 });
120 });
121
122 it('should only receive data from corresponding client', function(done){
123 this.timeout(0);
124 var srv = http();
125 var primus = server(srv, opts);
126 var a = primus.channel('a');
127
128 srv.listen(function(){
129 a.on('connection', function (spark) {
130 spark.on('data', function (data) {
131 expect(data).to.be('hi');
132 done();
133 });
134 });
135
136 var cl = client(srv, primus);
137 var ca = cl.channel('a');
138 var cb = cl.channel('b');
139 var cc = cl.channel('c');
140
141 ca.write('hi');
142 cb.write('hi');
143 cc.write('hi');
144 });
145 });
146
147 it('should only receive data from corresponding channel', function(done){
148 this.timeout(0);
149 var srv = http();
150 var primus = server(srv, opts);
151 var a = primus.channel('a');
152 var b = primus.channel('b');
153 var c = primus.channel('c');
154
155 var count = 3;
156
157 srv.listen(function(){
158 a.on('connection', function (spark) {
159 spark.write('hi a');
160 });
161
162 b.on('connection', function (spark) {
163 spark.write('hi b');
164 });
165
166 c.on('connection', function (spark) {
167 spark.write('hi c');
168 });
169
170 var cl = client(srv, primus);
171 var ca = cl.channel('a');
172 var cb = cl.channel('b');
173 var cc = cl.channel('c');
174
175 ca.on('data', function (data) {
176 expect(data).to.be('hi a');
177 if (!--count) done();
178 });
179
180 cb.on('data', function (data) {
181 expect(data).to.be('hi b');
182 if (!--count) done();
183 });
184
185 cc.on('data', function (data) {
186 expect(data).to.be('hi c');
187 if (!--count) done();
188 });
189 });
190 });
191
192 it('should allow multiple client connections', function(done){
193
194 var srv = http();
195 var primus = server(srv, opts);
196 var count = 3;
197
198 var a = primus.channel('a');
199 var b = primus.channel('b');
200 var c = primus.channel('c');
201
202 srv.listen(function(){
203
204 a.on('connection', function (spark) {
205 spark.on('data', function (data){
206 expect(data).to.be('hi');
207 if (!--count) done();
208 });
209 });
210
211 b.on('connection', function (spark) {
212 spark.on('data', function (data){
213 expect(data).to.be('hi');
214 if (!--count) done();
215 });
216 });
217
218 c.on('connection', function (spark) {
219 spark.on('data', function (data){
220 expect(data).to.be('hi');
221 if (!--count) done();
222 });
223 });
224
225 var cl = client(srv, primus);
226
227 var cla = cl.channel('a');
228 var clb = cl.channel('b');
229 var clc = cl.channel('c');
230
231 cla.write('hi');
232 clb.write('hi');
233 clc.write('hi');
234 });
235 });
236
237 it('should allow multiple client connections to the same channel', function(done){
238
239 var srv = http();
240 var primus = server(srv, opts);
241 var count = 3;
242 var a = primus.channel('a');
243 var b = primus.channel('b');
244 var c = primus.channel('c');
245
246 srv.listen(function(){
247
248 a.on('connection', function (spark) {
249 spark.on('data', function (data){
250 expect(data).to.be('hi');
251 if (!--count) done();
252 });
253 });
254
255 var cl = client(srv, primus);
256 var cl1 = cl.channel('a');
257 var cl2 = cl.channel('a');
258 var cl3 = cl.channel('a');
259
260 cl1.write('hi');
261 cl2.write('hi');
262 cl3.write('hi');
263
264 });
265 });
266
267 it('should be able to disconnect from a channel', function(done){
268
269 var srv = http();
270 var primus = server(srv, opts);
271 var a = primus.channel('a');
272
273 srv.listen(function(){
274
275 a.on('connection', function (spark) {
276 spark.on('data', function (data){
277 done();
278 });
279 });
280
281 var cl = client(srv, primus);
282 var cla = cl.channel('a');
283 cla.write('hi');
284 cla.end();
285 cla.write('hi again');
286 });
287 });
288
289 it('should be able to destroy a channel', function(done){
290
291 var srv = http();
292 var primus = server(srv, opts);
293 var a = primus.channel('a');
294
295 srv.listen(function(){
296
297 a.on('connection', function (spark) {
298 spark.write('hi');
299 spark.destroy();
300 spark.write('hi');
301 });
302
303 var cl = client(srv, primus);
304 var cla = cl.channel('a');
305
306 cla.on('data', function (data){
307 done();
308 });
309 });
310 });
311
312 it('should emit close event on connection destroy', function(done){
313
314 var srv = http();
315 var primus = server(srv, opts);
316 var a = primus.channel('a');
317
318 srv.listen(function(){
319 a.on('connection', function (spark) {
320 spark.on('close', function () {
321 done();
322 });
323 spark.destroy();
324 });
325 });
326
327 var cl = client(srv, primus);
328 var cla = cl.channel('a');
329 });
330
331 it('should explicitly cancel connection', function(done){
332
333 var srv = http();
334 var primus = server(srv, opts);
335 var a = primus.channel('a');
336
337 srv.listen(function(){
338 a.on('connection', function (spark) {
339 spark.end(function () {
340 done();
341 });
342 });
343 });
344
345 var cl = client(srv, primus);
346 var cla = cl.channel('a');
347 });
348
349});
\No newline at end of file