@parse/node-apn
Version:
An interface to the Apple Push Notification service for Node.js
95 lines (80 loc) • 3.29 kB
JavaScript
const parsePemKey = require('../../../lib/credentials/certificate/parsePemKey');
const APNKey = require('../../../lib/credentials/certificate/APNKey');
const fs = require('fs');
describe('parsePemKey', function () {
describe('returns APNKey', function () {
describe('RSA key', function () {
let key;
beforeEach(function () {
const keyData = fs.readFileSync('test/credentials/support/key.pem');
key = parsePemKey(keyData);
});
it('correct type', function () {
expect(key).to.be.an.instanceof(APNKey);
});
it('with correct fingerprint', function () {
expect(key.fingerprint()).to.equal('2d594c9861227dd22ba5ae37cc9354e9117a804d');
});
});
it('openssl-encrypted RSA key, correct password', function () {
const key = fs.readFileSync('test/credentials/support/keyEncrypted.pem');
expect(parsePemKey(key, 'apntest')).to.be.an.instanceof(APNKey);
});
it('PKCS#8 encrypted key, correct password', function () {
const key = fs.readFileSync('test/credentials/support/keyPKCS8Encrypted.pem');
expect(parsePemKey(key, 'apntest')).to.be.an.instanceof(APNKey);
});
it('PEM containing certificates and key', function () {
const certAndKey = fs.readFileSync('test/credentials/support/certKey.pem');
expect(parsePemKey(certAndKey)).to.be.an.instanceof(APNKey);
});
});
describe('throws with', function () {
it('PKCS#8 key (unsupported format)', function () {
const key = fs.readFileSync('test/credentials/support/keyPKCS8.pem');
expect(function () {
parsePemKey(key);
}).to.throw('unable to parse key, unsupported format');
});
it('RSA encrypted key, incorrect passphrase', function () {
const key = fs.readFileSync('test/credentials/support/keyEncrypted.pem');
expect(function () {
parsePemKey(key, 'not-the-passphrase');
}).to.throw('unable to parse key, incorrect passphrase');
});
it('PKCS#8 encrypted key, incorrect passphrase', function () {
const key = fs.readFileSync('test/credentials/support/keyPKCS8Encrypted.pem');
expect(function () {
parsePemKey(key, 'not-the-passphrase');
}).to.throw('unable to parse key, incorrect passphrase');
});
it('PEM certificate', function () {
const cert = fs.readFileSync('test/credentials/support/cert.pem');
expect(function () {
parsePemKey(cert);
}).to.throw('unable to parse key, no private key found');
});
it('PKCS#12 file', function () {
const pkcs12 = fs.readFileSync('test/credentials/support/certIssuerKey.p12');
expect(function () {
parsePemKey(pkcs12);
}).to.throw('unable to parse key, not a valid PEM file');
});
});
describe('multiple keys', function () {
it('throws', function () {
const keys = fs.readFileSync('test/credentials/support/multipleKeys.pem');
expect(function () {
parsePemKey(keys);
}).to.throw('multiple keys found in PEM file');
});
});
describe('returns null', function () {
it('for null', function () {
expect(parsePemKey()).to.be.null;
});
it('for undefined', function () {
expect(parsePemKey()).to.be.null;
});
});
});