Skip to content

Commit 45538ae

Browse files
committed
resolve some race conditions, cleanup in proxy tests
reduces the number of "Hopefully this timeout is long enough" cases
1 parent 0ddd8a1 commit 45538ae

File tree

5 files changed

+78
-71
lines changed

5 files changed

+78
-71
lines changed

test/util.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// cleanup utils for sockets
2+
var sockets = [];
3+
4+
exports.cleanup = function (done) {
5+
while (sockets.length) {
6+
sockets.pop().close();
7+
}
8+
// give underlying sockets some time to close
9+
// this shouldn't be necessary on *ix, but it seems to be
10+
setTimeout(function () {
11+
done();
12+
}, 500);
13+
};
14+
15+
exports.push_sockets = function () {
16+
sockets.push.apply(sockets, arguments);
17+
};
18+
19+
exports.done_countdown = function (done, counter) {
20+
// add a done-countdown, so multiple async events can be awaited before triggering done
21+
return function () {
22+
counter -= 1;
23+
if (counter === 0) {
24+
done();
25+
}
26+
}
27+
};

test/zmq_proxy.push-pull.js

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ var addr = 'tcp://127.0.0.1'
77
, backendAddr = addr+':5502'
88
, captureAddr = addr+':5503';
99

10-
describe('proxy.push-pull', function() {
10+
var testutil = require('./util');
1111

12+
describe('proxy.push-pull', function() {
13+
afterEach(testutil.cleanup);
14+
1215
it('should proxy push-pull connected to pull-push',function (done) {
1316

1417
var frontend = zmq.socket('pull');
@@ -22,14 +25,9 @@ describe('proxy.push-pull', function() {
2225

2326
push.connect(frontendAddr);
2427
pull.connect(backendAddr);
28+
testutil.push_sockets(frontend, backend, push, pull);
2529

2630
pull.on('message',function (msg) {
27-
28-
frontend.close();
29-
backend.close();
30-
push.close();
31-
pull.close();
32-
3331
msg.should.be.an.instanceof(Buffer);
3432
msg.toString().should.equal('foo');
3533
done();
@@ -53,36 +51,30 @@ describe('proxy.push-pull', function() {
5351

5452
var pull = zmq.socket('pull');
5553
var push = zmq.socket('push');
56-
54+
testutil.push_sockets(frontend, backend, push, pull, capture, capSub);
55+
5756
frontend.bindSync(frontendAddr);
5857
backend.bindSync(backendAddr);
5958
capture.bindSync(captureAddr);
6059

6160
pull.connect(frontendAddr);
6261
push.connect(backendAddr);
6362
capSub.connect(captureAddr);
63+
64+
var countdown = testutil.done_countdown(done, 2);
6465

6566
pull.on('message',function (msg) {
6667
msg.should.be.an.instanceof(Buffer);
6768
msg.toString().should.equal('foo');
6869
console.log(msg.toString());
70+
countdown();
6971
});
7072

7173
capSub.subscribe('');
7274
capSub.on('message',function (msg) {
73-
capture.close();
74-
capSub.close();
75-
76-
setTimeout(function() {
77-
frontend.close();
78-
backend.close();
79-
push.close();
80-
pull.close();
81-
82-
msg.should.be.an.instanceof(Buffer);
83-
msg.toString().should.equal('foo');
84-
done();
85-
},100.0);
75+
msg.should.be.an.instanceof(Buffer);
76+
msg.toString().should.equal('foo');
77+
countdown();
8678
});
8779

8880
setTimeout(function() {

test/zmq_proxy.router-dealer.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ var addr = 'tcp://127.0.0.1'
77
, backendAddr = addr+':5505'
88
, captureAddr = addr+':5506';
99

10+
var testutil = require('./util');
11+
1012
describe('proxy.router-dealer', function() {
13+
afterEach(testutil.cleanup);
1114

1215
it('should proxy req-rep connected over router-dealer', function (done){
1316

@@ -22,14 +25,11 @@ describe('proxy.router-dealer', function() {
2225

2326
req.connect(frontendAddr);
2427
rep.connect(backendAddr);
28+
testutil.push_sockets(frontend, backend, req, rep);
2529

2630
req.on('message',function(msg){
2731
msg.should.be.an.instanceof(Buffer);
2832
msg.toString().should.equal('foo bar');
29-
frontend.close();
30-
backend.close();
31-
req.close();
32-
rep.close();
3333
done();
3434
});
3535

@@ -64,26 +64,23 @@ describe('proxy.router-dealer', function() {
6464
rep.connect(backendAddr);
6565
capSub.connect(captureAddr);
6666
capSub.subscribe('');
67+
testutil.push_sockets(frontend, backend, req, rep, capture, capSub);
68+
var countdown = testutil.done_countdown(done, 2);
6769

6870
req.on('message',function (msg) {
69-
req.close();
70-
rep.close();
7171
console.log(msg.toString());
72+
countdown();
7273
});
7374

7475
rep.on('message', function (msg) {
7576
rep.send(msg+' bar');
7677
});
7778

7879
capSub.on('message',function (msg) {
79-
backend.close();
80-
frontend.close();
81-
capture.close();
82-
capSub.close();
8380
setTimeout(function() {
8481
msg.should.be.an.instanceof(Buffer);
8582
msg.toString().should.equal('foo bar');
86-
done();
83+
countdown();
8784
},100.0)
8885
});
8986

test/zmq_proxy.xpub-xsub.js

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ var addr = 'tcp://127.0.0.1'
88
, captureAddr = addr+':5509';
99

1010
var version = semver.gte(zmq.version, '3.1.0');
11+
var testutil = require('./util');
1112

1213
describe('proxy.xpub-xsub', function() {
13-
14+
afterEach(testutil.cleanup);
15+
1416
it('should proxy pub-sub connected to xpub-xsub', function (done) {
1517
if (!version) {
1618
done();
@@ -22,18 +24,13 @@ describe('proxy.xpub-xsub', function() {
2224

2325
var sub = zmq.socket('sub');
2426
var pub = zmq.socket('pub');
27+
testutil.push_sockets(frontend, backend, sub, pub);
2528

2629
sub.subscribe('');
2730
sub.on('message',function (msg) {
28-
29-
frontend.close();
30-
backend.close();
31-
sub.close();
32-
pub.close();
33-
3431
msg.should.be.an.instanceof(Buffer);
3532
msg.toString().should.equal('foo');
36-
33+
console.log(msg.toString());
3734
done();
3835
});
3936

@@ -45,7 +42,11 @@ describe('proxy.xpub-xsub', function() {
4542

4643
setTimeout(function() {
4744
pub.send('foo');
48-
}, 200.0);
45+
}, 500);
46+
47+
setTimeout(function () {
48+
throw Error("Timeout");
49+
}, 10000);
4950

5051
zmq.proxy(frontend,backend);
5152

@@ -67,33 +68,24 @@ describe('proxy.xpub-xsub', function() {
6768

6869
var sub = zmq.socket('sub');
6970
var pub = zmq.socket('pub');
71+
testutil.push_sockets(frontend, backend, sub, pub, capture, capSub);
72+
73+
var countdown = testutil.done_countdown(done, 2);
7074

7175
sub.subscribe('');
7276
sub.on('message', function (msg) {
73-
74-
sub.close();
75-
pub.close();
76-
backend.close();
77-
frontend.close();
78-
7977
msg.should.be.an.instanceof(Buffer);
8078
msg.toString().should.equal('foo');
8179

8280
console.log(msg.toString());
83-
81+
countdown();
8482
});
8583

8684
capSub.subscribe('');
8785
capSub.on('message',function (msg) {
88-
89-
capture.close();
90-
capSub.close();
91-
92-
setTimeout(function(){
93-
msg.should.be.an.instanceof(Buffer);
94-
msg.toString().should.equal('foo');
95-
done();
96-
},100.0);
86+
msg.should.be.an.instanceof(Buffer);
87+
msg.toString().should.equal('foo');
88+
countdown();
9789
});
9890

9991
capture.bind(captureAddr,function() {
@@ -106,7 +98,11 @@ describe('proxy.xpub-xsub', function() {
10698

10799
setTimeout(function () {
108100
pub.send('foo');
109-
}, 200.0);
101+
}, 500);
102+
103+
setTimeout(function () {
104+
throw Error("Timeout");
105+
}, 10000);
110106

111107
zmq.proxy(frontend,backend,capture);
112108
});
@@ -131,6 +127,7 @@ describe('proxy.xpub-xsub', function() {
131127

132128
sub.connect(frontendAddr);
133129
pub.connect(backendAddr);
130+
testutil.push_sockets(frontend, backend, sub, pub);
134131

135132
try{
136133

@@ -141,15 +138,9 @@ describe('proxy.xpub-xsub', function() {
141138
e.message.should.equal('wrong socket order to proxy');
142139

143140
} finally{
144-
frontend.close();
145-
backend.close();
146-
pub.close();
147-
sub.close();
148-
149-
//allow time for TCP sockets to close
150-
setTimeout(function(){
151-
done();
152-
},200)
141+
142+
done();
143+
153144
}
154145
})
155146
});

test/zmq_proxy.xrep-xreq.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ var addr = 'tcp://127.0.0.1'
99

1010
//since its for libzmq2, we target versions < 3.0.0
1111
var version = semver.lte(zmq.version, '3.0.0');
12+
var testutil = require('./util');
1213

1314
describe('proxy.xrep-xreq', function() {
15+
afterEach(testutil.cleanup);
16+
1417
it('should proxy req-rep connected to xrep-xreq', function (done) {
1518
if (!version) {
1619
done();
@@ -28,14 +31,11 @@ describe('proxy.xrep-xreq', function() {
2831

2932
req.connect(frontendAddr);
3033
rep.connect(backendAddr);
34+
testutil.push_sockets(frontend, backend, req, rep);
3135

3236
req.on('message',function(msg){
3337
msg.should.be.an.instanceof(Buffer);
3438
msg.toString().should.equal('foo bar');
35-
frontend.close();
36-
backend.close();
37-
req.close();
38-
rep.close();
3939
done();
4040
});
4141

0 commit comments

Comments
 (0)