lightning
Version:
Lightning Network client library
104 lines (95 loc) • 2.75 kB
JavaScript
const {deepStrictEqual} = require('node:assert').strict;
const {rejects} = require('node:assert').strict;
const test = require('node:test');
const {verifyAccess} = require('./../../../lnd_methods');
const makeArgs = overrides => {
const args = {
lnd: {
default: {
checkMacaroonPermissions: ({}, cbk) => cbk(null, {valid: true}),
},
},
macaroon: Buffer.from('macaroon').toString('base64'),
permissions: ['entity:action'],
};
Object.keys(overrides).forEach(k => args[k] = overrides[k]);
return args;
};
const tests = [
{
args: makeArgs({lnd: undefined}),
description: 'LND is required to verify access',
error: [400, 'ExpectedAuthenticatedLndApiObjectToVerifyAccess'],
},
{
args: makeArgs({macaroon: undefined}),
description: 'A macaroon is required',
error: [400, 'ExpectedMacaroonToVerifyAccess'],
},
{
args: makeArgs({permissions: undefined}),
description: 'Permissions to check are required',
error: [400, 'ExpectedPermissionsArrayToVerifyAccess'],
},
{
args: makeArgs({
lnd: {
default: {
checkMacaroonPermissions: ({}, cbk) => cbk({details: 'unknown ser'}),
},
},
}),
description: 'Method not supported error returned',
error: [501, 'VerifyAccessMethodNotSupported'],
},
{
args: makeArgs({
lnd: {
default: {
checkMacaroonPermissions: ({}, cbk) => cbk({
details: 'permission denied',
}),
},
},
}),
description: 'Method not supported error returned',
expected: {is_valid: false},
},
{
args: makeArgs({
lnd: {default: {checkMacaroonPermissions: ({}, cbk) => cbk('err')}},
}),
description: 'Errors are passed back',
error: [503, 'UnexpectedErrorFromCheckMacaroonMethod', {err: 'err'}],
},
{
args: makeArgs({
lnd: {default: {checkMacaroonPermissions: ({}, cbk) => cbk()}},
}),
description: 'A response is expected',
error: [503, 'ExpectedResponseFromCheckMacaroonRequest'],
},
{
args: makeArgs({
lnd: {default: {checkMacaroonPermissions: ({}, cbk) => cbk(null, {})}},
}),
description: 'A valid attribute is expected',
error: [503, 'ExpectedValidIndicatorInCheckMacaroonResponse'],
},
{
args: makeArgs({}),
description: 'Validity is returned',
expected: {is_valid: true},
},
];
tests.forEach(({args, description, error, expected}) => {
return test(description, async () => {
if (!!error) {
await rejects(() => verifyAccess(args), error, 'Got expected error');
} else {
const res = await verifyAccess(args);
deepStrictEqual(res, expected, 'Got expected result');
}
return;
});
});