From 1f11983350a7da56bb1d0ca560a7e5ec5c1c0d43 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 16 Oct 2014 03:45:53 +0200 Subject: [PATCH] test: fix non-determinism in test-crypto-domains The test implicitly assumed that crypto operations complete in the same order as they are started but, because they go round-trip through the thread pool, there is no such guarantee. Enforce proper sequencing. Fixes node-forward/node#22. PR-URL: https://github.com/node-forward/node/pull/23 Reviewed-By: Fedor Indutny --- test/simple/test-crypto-domains.js | 38 +++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/test/simple/test-crypto-domains.js b/test/simple/test-crypto-domains.js index 0562fe45b0..1393f6da12 100644 --- a/test/simple/test-crypto-domains.js +++ b/test/simple/test-crypto-domains.js @@ -24,21 +24,37 @@ var domain = require('domain'); var assert = require('assert'); var d = domain.create(); var expect = ['pbkdf2', 'randomBytes', 'pseudoRandomBytes'] +var errors = 0; + +process.on('exit', function() { + assert.equal(errors, 3); +}); d.on('error', function (e) { assert.equal(e.message, expect.shift()); + errors += 1; }); d.run(function () { - crypto.pbkdf2('a', 'b', 1, 8, function () { - throw new Error('pbkdf2'); - }); - - crypto.randomBytes(4, function () { - throw new Error('randomBytes'); - }); - - crypto.pseudoRandomBytes(4, function () { - throw new Error('pseudoRandomBytes'); - }); + one(); + + function one() { + crypto.pbkdf2('a', 'b', 1, 8, function () { + two(); + throw new Error('pbkdf2'); + }); + } + + function two() { + crypto.randomBytes(4, function () { + three(); + throw new Error('randomBytes'); + }); + } + + function three() { + crypto.pseudoRandomBytes(4, function () { + throw new Error('pseudoRandomBytes'); + }); + } });