You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.2 KiB
72 lines
2.2 KiB
import https from 'https';
|
|
import test from 'ava';
|
|
import pify from 'pify';
|
|
import pem from 'pem';
|
|
import got from 'got';
|
|
import differenceInDays from 'date-fns/difference_in_days';
|
|
import createCert from '../';
|
|
|
|
test('createCert is a function', t => {
|
|
t.is(typeof createCert, 'function');
|
|
});
|
|
|
|
test('createCert returns a Promise', t => {
|
|
t.true(createCert() instanceof Promise);
|
|
});
|
|
|
|
test('createCert() exposes expected properties', async t => {
|
|
const keys = await createCert();
|
|
['key', 'cert', 'caCert'].forEach(prop => {
|
|
t.true(typeof keys[prop] !== 'undefined');
|
|
});
|
|
});
|
|
|
|
test('SSL certificate uses expected default values', async t => {
|
|
const keys = await createCert();
|
|
const data = await pify(pem.readCertificateInfo)(keys.cert);
|
|
|
|
t.is(data.commonName, 'example.com');
|
|
t.is(differenceInDays(data.validity.end, data.validity.start), 365);
|
|
});
|
|
|
|
test('passing a string sets the commonName', async t => {
|
|
const keys = await createCert('foo.com');
|
|
const data = await pify(pem.readCertificateInfo)(keys.cert);
|
|
|
|
t.is(data.commonName, 'foo.com');
|
|
});
|
|
|
|
test('passing an object sets the certificate settings', async t => {
|
|
const opts = {
|
|
commonName: 'foo.com',
|
|
days: 1,
|
|
organization: 'bar'
|
|
};
|
|
const keys = await createCert(opts);
|
|
const data = await pify(pem.readCertificateInfo)(keys.cert);
|
|
|
|
t.is(data.commonName, opts.commonName);
|
|
t.is(differenceInDays(data.validity.end, data.validity.start), opts.days);
|
|
t.is(data.organization, opts.organization);
|
|
});
|
|
|
|
test('keys object can be passed directly into https.creatServer', async t => {
|
|
const keys = await createCert('foo.com');
|
|
const server = https.createServer(keys, (req, res) => res.end('Hi!'));
|
|
await pify(server.listen.bind(server))();
|
|
|
|
const { body } = await got('https://localhost:' + server.address().port, { rejectUnauthorized: false });
|
|
t.is(body, 'Hi!');
|
|
});
|
|
|
|
test('keys.caCert validates SSL certificate', async t => {
|
|
const keys = await createCert('foo.com');
|
|
const server = https.createServer(keys, (req, res) => res.end('Hi!'));
|
|
await pify(server.listen.bind(server))();
|
|
|
|
const { body } = await got('https://localhost:' + server.address().port, {
|
|
ca: keys.caCert,
|
|
headers: { host: 'foo.com' }
|
|
});
|
|
t.is(body, 'Hi!');
|
|
});
|
|
|