| var test = require('tape') |
| var crypto = require('../') |
| var Buffer = require('safe-buffer').Buffer |
| |
| test('get error message', function (t) { |
| try { |
| var b = crypto.randomFillSync(Buffer.alloc(10)) |
| t.ok(Buffer.isBuffer(b)) |
| t.end() |
| } catch (err) { |
| t.ok(/not supported/.test(err.message), '"not supported" is in error message') |
| t.end() |
| } |
| }) |
| |
| test('randomfill', function (t) { |
| t.plan(5) |
| t.equal(crypto.randomFillSync(Buffer.alloc(10)).length, 10) |
| t.ok(Buffer.isBuffer(crypto.randomFillSync(Buffer.alloc(10)))) |
| crypto.randomFill(Buffer.alloc(10), function (ex, bytes) { |
| t.error(ex) |
| t.equal(bytes.length, 10) |
| t.ok(Buffer.isBuffer(bytes)) |
| t.end() |
| }) |
| }) |
| |
| test('seems random', function (t) { |
| var L = 1000 |
| var b = crypto.randomFillSync(Buffer.alloc(L)) |
| |
| var mean = [].reduce.call(b, function (a, b) { |
| return a + b |
| }, 0) / L |
| |
| // test that the random numbers are plausably random. |
| // Math.random() will pass this, but this will catch |
| // terrible mistakes such as this blunder: |
| // https://github.com/dominictarr/crypto-browserify/commit/3267955e1df7edd1680e52aeede9a89506ed2464#commitcomment-7916835 |
| |
| // this doesn't check that the bytes are in a random *order* |
| // but it's better than nothing. |
| |
| var expected = 256 / 2 |
| var smean = Math.sqrt(mean) |
| |
| // console.log doesn't work right on testling, *grumble grumble* |
| console.log(JSON.stringify([expected - smean, mean, expected + smean])) |
| t.ok(mean < expected + smean) |
| t.ok(mean > expected - smean) |
| |
| t.end() |
| }) |