f19e6c8172
* deprecate sodium-test ahrness * prune dependencies
127 lines
3.2 KiB
JavaScript
127 lines
3.2 KiB
JavaScript
/* eslint-disable camelcase */
|
|
const test = require('brittle')
|
|
const sodium = require('..')
|
|
const fork = require('child_process').fork
|
|
|
|
test.skip('sodium_mprotect_noaccess', function (t) {
|
|
t.plan(1)
|
|
const p = fork(require.resolve('./fixtures/mprotect_noaccess'))
|
|
|
|
p.on('message', function () {
|
|
t.fail()
|
|
})
|
|
p.on('exit', function (code, signal) {
|
|
t.ok(p.signalCode !== null || p.exitCode > 0)
|
|
})
|
|
})
|
|
|
|
test.skip('sodium_mprotect_readonly', function (t) {
|
|
t.plan(2)
|
|
const p = fork(require.resolve('./fixtures/mprotect_readonly'))
|
|
|
|
p.on('message', function (msg) {
|
|
t.ok(msg === 'read')
|
|
})
|
|
p.on('exit', function (code, signal) {
|
|
t.ok(p.signalCode !== null || p.exitCode > 0)
|
|
})
|
|
})
|
|
|
|
test.skip('sodium_mprotect_readwrite', function (t) {
|
|
t.plan(4)
|
|
const p = fork(require.resolve('./fixtures/mprotect_readwrite'))
|
|
|
|
p.on('message', function (msg) {
|
|
switch (msg) {
|
|
case 'read': t.pass()
|
|
break
|
|
case 'write': t.pass()
|
|
break
|
|
case 'did_write': t.pass()
|
|
break
|
|
case 'did_not_write': t.fail()
|
|
break
|
|
default: t.fail()
|
|
break
|
|
}
|
|
})
|
|
p.on('exit', function (code, signal) {
|
|
t.ok(p.signalCode === null || p.exitCode === 0)
|
|
})
|
|
})
|
|
|
|
test('sodium_memzero', function (t) {
|
|
const buf = Buffer.alloc(10, 0xab)
|
|
const exp = Buffer.alloc(10, 0xab)
|
|
const zero = Buffer.alloc(10)
|
|
|
|
t.alike(buf, exp, 'buffers start out with same content')
|
|
t.unlike(buf, zero, 'buffer is not zero')
|
|
|
|
sodium.sodium_memzero(buf)
|
|
t.unlike(buf, exp, 'buffers are not longer the same')
|
|
t.alike(buf, zero, 'buffer is now zeroed')
|
|
})
|
|
|
|
test.skip('sodium_mlock / sodium_munlock', function (t) {
|
|
const buf = Buffer.alloc(10, 0x18)
|
|
const exp = Buffer.alloc(10, 0x18)
|
|
|
|
sodium.sodium_mlock(buf)
|
|
t.absent(buf.secure)
|
|
t.alike(buf, exp, 'mlock did not corrupt data')
|
|
sodium.sodium_munlock(buf)
|
|
t.absent(buf.secure)
|
|
t.alike(buf, Buffer.alloc(10), 'munlock did zero data')
|
|
})
|
|
|
|
test('sodium_malloc', function (t) {
|
|
const empty = sodium.sodium_malloc(0)
|
|
const small = sodium.sodium_malloc(1)
|
|
const large = sodium.sodium_malloc(1e8)
|
|
|
|
// sodium-javascript does not set secure prop
|
|
|
|
// t.ok(empty.secure)
|
|
// t.ok(small.secure)
|
|
// t.ok(large.secure)
|
|
|
|
t.ok(empty.length === 0, 'has correct size')
|
|
t.ok(small.length === 1, 'has correct size')
|
|
t.ok(large.length === 1e8, 'has correct size')
|
|
|
|
// const expected = Buffer.from([0xdb])
|
|
// expected.secure = true
|
|
// t.alike(small, expected, 'has canary content')
|
|
|
|
// test gc
|
|
for (let i = 0; i < 1e3; i++) {
|
|
if (sodium.sodium_malloc(256).length !== 256) {
|
|
t.fail('allocated incorrect size')
|
|
}
|
|
}
|
|
t.ok(empty.length === 0, 'retained correct size')
|
|
t.ok(small.length === 1, 'retained correct size')
|
|
t.ok(large.length === 1e8, 'retained correct size')
|
|
})
|
|
|
|
test('sodium_free', function (t) {
|
|
if (process.version.startsWith('v10')) {
|
|
t.comment('Skipping free test on v10')
|
|
return
|
|
}
|
|
const buf = sodium.sodium_malloc(1)
|
|
t.ok(buf.byteLength === 1)
|
|
sodium.sodium_free(buf)
|
|
t.ok(buf.byteLength === 0)
|
|
})
|
|
|
|
test.skip('sodium_malloc bounds', function (t) {
|
|
t.throws(function () {
|
|
sodium.sodium_malloc(-1)
|
|
}, 'too small')
|
|
t.throws(function () {
|
|
sodium.sodium_malloc(Number.MAX_SAFE_INTEGER)
|
|
}, 'too large')
|
|
})
|