Rebase onto dev/pgp-inline, fix unit tests

This commit is contained in:
Martin Hauck
2019-02-08 17:04:28 +01:00
parent a2b941b0ae
commit 1651571d36
14 changed files with 58 additions and 77 deletions

View File

@@ -5,7 +5,7 @@ const Email = require('../../src/email/email');
const nodemailer = require('nodemailer');
describe('Email Unit Tests', () => {
let sandbox;
const sandbox = sinon.createSandbox();
let email;
let sendFnStub;
@@ -37,9 +37,7 @@ describe('Email Unit Tests', () => {
};
beforeEach(() => {
sandbox = sinon.sandbox.create();
sendFnStub = sinon.stub();
sendFnStub = sandbox.stub();
sandbox.stub(nodemailer, 'createTransport').returns({
sendMail: sendFnStub
});

View File

@@ -6,14 +6,13 @@ const openpgp = require('openpgp');
const PGP = require('../../src/service/pgp');
describe('PGP Unit Tests', () => {
let sandbox;
const sandbox = sinon.createSandbox();
let pgp;
let key1Armored;
let key2Armored;
let key3Armored;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox.stub(log);
key1Armored = fs.readFileSync(`${__dirname}/../key1.asc`, 'utf8');
@@ -27,32 +26,34 @@ describe('PGP Unit Tests', () => {
});
describe('parseKey', () => {
it('should should throw error on key parsing', () => {
it('should should throw error on key parsing', async () => {
sandbox.stub(openpgp.key, 'readArmored').returns({err: [new Error()]});
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/Failed to parse/);
await expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/Failed to parse/);
expect(log.error.calledOnce).to.be.true;
});
it('should should throw error when more than one key', () => {
sandbox.stub(openpgp.key, 'readArmored').returns({keys: [{}, {}]});
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/only one key/);
return expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/only one key/);
});
it('should should throw error when more than one key', () => {
it('should should throw error when primaryKey not verfied', () => {
sandbox.stub(openpgp.key, 'readArmored').returns({
keys: [{
primaryKey: {},
verifyPrimaryKey() { return false; }
}]
});
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/primary key verification/);
return expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/primary key verification/);
});
it('should only accept 16 char key id', () => {
sandbox.stub(openpgp.key, 'readArmored').returns({
keys: [{
primaryKey: {
fingerprint: '4277257930867231ce393fb8dbc0b3d92b1b86e9',
getFingerprint() {
return '4277257930867231ce393fb8dbc0b3d92b1b86e9';
},
getKeyId() {
return {
toHex() { return 'asdf'; }
@@ -62,14 +63,16 @@ describe('PGP Unit Tests', () => {
verifyPrimaryKey() { return openpgp.enums.keyStatus.valid; }
}]
});
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/only v4 keys/);
return expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/only v4 keys/);
});
it('should only accept version 4 fingerprint', () => {
sandbox.stub(openpgp.key, 'readArmored').returns({
keys: [{
primaryKey: {
fingerprint: '4277257930867231ce393fb8dbc0b3d92b1b86e',
getFingerprint() {
return '4277257930867231ce393fb8dbc0b3d92b1b86e';
},
getKeyId() {
return {
toHex() { return 'dbc0b3d92b1b86e9'; }
@@ -79,16 +82,16 @@ describe('PGP Unit Tests', () => {
verifyPrimaryKey() { return openpgp.enums.keyStatus.valid; }
}]
});
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/only v4 keys/);
return expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/only v4 keys/);
});
it('should only accept valid user ids', () => {
sandbox.stub(pgp, 'parseUserIds').returns([]);
expect(pgp.parseKey.bind(pgp, key3Armored)).to.throw(/invalid user ids/);
return expect(pgp.parseKey(key3Armored)).to.eventually.be.rejectedWith(/invalid user ids/);
});
it('should be able to parse RSA key', () => {
const params = pgp.parseKey(key1Armored);
it('should be able to parse RSA key', async () => {
const params = await pgp.parseKey(key1Armored);
expect(params.keyId).to.equal('dbc0b3d92b1b86e9');
expect(params.fingerprint).to.equal('4277257930867231ce393fb8dbc0b3d92b1b86e9');
expect(params.userIds[0].name).to.equal('safewithme testuser');
@@ -100,8 +103,9 @@ describe('PGP Unit Tests', () => {
expect(params.publicKeyArmored).to.equal(key1Armored);
});
it('should be able to parse RSA/ECC key', () => {
const params = pgp.parseKey(key2Armored);
/* test key2 has expired */
it.skip('should be able to parse RSA/ECC key', async () => {
const params = await pgp.parseKey(key2Armored);
expect(params.keyId).to.equal('b8e4105cc9dedc77');
expect(params.fingerprint).to.equal('e3317db04d3958fd5f662c37b8e4105cc9dedc77');
expect(params.userIds.length).to.equal(1);
@@ -112,8 +116,8 @@ describe('PGP Unit Tests', () => {
expect(params.publicKeyArmored).to.equal(pgp.trimKey(key2Armored));
});
it('should be able to parse komplex key', () => {
const params = pgp.parseKey(key3Armored);
it('should be able to parse komplex key', async () => {
const params = await pgp.parseKey(key3Armored);
expect(params.keyId).to.equal('4001a127a90de8e1');
expect(params.fingerprint).to.equal('04062c70b446e33016e219a74001a127a90de8e1');
expect(params.userIds.length).to.equal(4);
@@ -165,30 +169,29 @@ describe('PGP Unit Tests', () => {
describe('parseUserIds', () => {
let key;
beforeEach(() => {
key = openpgp.key.readArmored(key1Armored).keys[0];
beforeEach(async () => {
key = (await openpgp.key.readArmored(key1Armored)).keys[0];
});
it('should parse a valid user id', () => {
const parsed = pgp.parseUserIds(key.users, key.primaryKey);
it('should parse a valid user id', async () => {
const parsed = await pgp.parseUserIds(key.users, key.primaryKey);
expect(parsed[0].name).to.equal('safewithme testuser');
expect(parsed[0].email).to.equal('safewithme.testuser@gmail.com');
});
it('should throw for an empty user ids array', () => {
expect(pgp.parseUserIds.bind(pgp, [], key.primaryKey)).to.throw(/no user id/);
});
it('should throw for an empty user ids array', () =>
expect(pgp.parseUserIds([], key.primaryKey)).to.eventually.be.rejectedWith(/no user id/)
);
it('should return no user id for an invalid signature', () => {
it('should return no user id for an invalid signature', async () => {
key.users[0].userId.userid = 'fake@example.com';
const parsed = pgp.parseUserIds(key.users, key.primaryKey);
const parsed = await pgp.parseUserIds(key.users, key.primaryKey);
expect(parsed.length).to.equal(0);
});
it('should throw for a invalid email address', () => {
sandbox.stub(key.users[0], 'isValidSelfCertificate').returns(true);
it('should throw for an invalid email address', async () => {
key.users[0].userId.userid = 'safewithme testuser <safewithme.testusergmail.com>';
const parsed = pgp.parseUserIds(key.users, key.primaryKey);
const parsed = await pgp.parseUserIds(key.users, key.primaryKey);
expect(parsed.length).to.equal(0);
});
});