Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add --ignore-https-errors flag #361

Merged
merged 12 commits into from
Aug 11, 2021
42 changes: 42 additions & 0 deletions __tests__/cli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,17 @@

import { ChildProcess, spawn } from 'child_process';
import { join } from 'path';
import { Server } from './utils/server';

describe('CLI', () => {
let server: Server;
let serverParams: { url: string };
beforeAll(async () => {
server = await Server.create({ tls: false });
serverParams = { url: server.TEST_PAGE };
});
afterAll(async () => await server.close());

const FIXTURES_DIR = join(__dirname, 'fixtures');
it('run suites and exit with 0', async () => {
const cli = new CLIMock([join(FIXTURES_DIR, 'fake.journey.ts')]);
Expand Down Expand Up @@ -205,6 +214,8 @@ describe('CLI', () => {
it('support capability flag', async () => {
const cli = new CLIMock([
join(FIXTURES_DIR, 'example.journey.ts'),
'--params',
JSON.stringify(serverParams),
'--reporter',
'json',
'--capability',
Expand Down Expand Up @@ -238,6 +249,34 @@ describe('CLI', () => {
expect(await cli.exitCode).toBe(0);
process.env['TS_NODE_TYPE_CHECK'] = 'false';
});

describe('testing a TLS site with self-signed cert', () => {
andrewvc marked this conversation as resolved.
Show resolved Hide resolved
let tlsServer: Server;
let cliArgs: Array<string>;

beforeAll(async () => {
tlsServer = await Server.create({ tls: true });
cliArgs = [
join(FIXTURES_DIR, 'example.journey.ts'),
'--params',
JSON.stringify({ url: tlsServer.TEST_PAGE }),
'--reporter',
'json',
];
});

afterAll(async () => await tlsServer.close());

it('fails by default', async () => {
const cli = new CLIMock(cliArgs);
expect(await cli.exitCode).toBe(1);
});

it('succeeds succeeds with --ignoreHTTPSErrors', async () => {
const cli = new CLIMock([...cliArgs, '--ignoreHTTPSErrors']);
expect(await cli.exitCode).toBe(0);
vigneshshanmugam marked this conversation as resolved.
Show resolved Hide resolved
});
});
});

class CLIMock {
Expand All @@ -259,13 +298,16 @@ class CLIMock {
);
const dataListener = data => {
this.data = data.toString();
// Uncomment the line below if the process is blocked and you need to see its output
// console.warn(this.data);
this.chunks.push(...this.data.split('\n').filter(Boolean));
if (this.waitForPromise && this.data.includes(this.waitForText)) {
this.process.stdout.off('data', dataListener);
this.waitForPromise();
}
};
this.process.stdout.on('data', dataListener);
this.process.stderr.on('data', dataListener);
vigneshshanmugam marked this conversation as resolved.
Show resolved Hide resolved

this.exitCode = new Promise((res, rej) => {
this.process.stderr.on('data', data => rej(new Error(data)));
Expand Down
17 changes: 4 additions & 13 deletions __tests__/fixtures/example.journey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,11 @@
*
*/

import { journey, step, beforeAll, afterAll } from '../../';
import { Server } from '../utils/server';
import { journey, step } from '../../';

let server: Server;

beforeAll(async () => {
server = await Server.create();
});
afterAll(async () => {
await server.close();
});

journey('example journey', ({ page }) => {
journey('example journey', ({ page, params }) => {
step('go to test page', async () => {
await page.goto(server.TEST_PAGE);
await page.goto(params.url, { timeout: 1500 });
await page.waitForSelector('h2.synthetics', { timeout: 1500 });
});
});
23 changes: 23 additions & 0 deletions __tests__/fixtures/selfsigned.cert
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
vigneshshanmugam marked this conversation as resolved.
Show resolved Hide resolved
MIID3TCCAsWgAwIBAgIUR1rAjs5/ZAhatHKk4i2SPg3jCcUwDQYJKoZIhvcNAQEL
BQAwfjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1OMRQwEgYDVQQHDAtNaW5uZWFw
b2xpczEQMA4GA1UECgwHRWxhc3RpYzEmMCQGA1UECwwdU3ludGhldGljcyBhbmQg
SGVhdnkgSW5kdXN0cnkxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMTA4MDMxOTQz
NDdaFw0yMTA5MDIxOTQzNDdaMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNTjEU
MBIGA1UEBwwLTWlubmVhcG9saXMxEDAOBgNVBAoMB0VsYXN0aWMxJjAkBgNVBAsM
HVN5bnRoZXRpY3MgYW5kIEhlYXZ5IEluZHVzdHJ5MRIwEAYDVQQDDAlsb2NhbGhv
c3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDY9S9qGUkr8JQWYWAc
9vqUriZfpbEau3QIaxYXGs/xFy/VNZejeYyukOGkyqZoJmfLtq45H/IvvuHChR7X
FZPesfy0yzRmCAiN2pJWNIgj5bL0YewJD3UCasq84BX+hZxYaCTU04er170UNQHn
2Ig/L3PM9F/CsmmROs2hQwE9aXlbylFniSRNZOjJyAirmFKm/VKd9quQmzWGQ8tc
EYqaMCIb6N0lQJDSCGckiQtWqk0vomfjuWc2J7oqng8lCeTMqVsuBP52a4g86lrO
z7E/6MIMuVNVnv6JQ1a6Lz0opGArzcUVeIo33CIKo6PQUTkucIHM/TzxGO98wWEE
RJQLAgMBAAGjUzBRMB0GA1UdDgQWBBQh+UBhSYfHCYZxU54ahSROabgUTzAfBgNV
HSMEGDAWgBQh+UBhSYfHCYZxU54ahSROabgUTzAPBgNVHRMBAf8EBTADAQH/MA0G
CSqGSIb3DQEBCwUAA4IBAQBNnTQM51c8ltwfsCX20uwcXx525GSneQxTjTuyyMcK
IzsXz5mtSkyjrcbBGXIsC3XkCjY7pbRiqBfKyYeop8F+JYHFoiL685lBEmcYFiXQ
ogw1Ynp9+O146WMOtssPdvSrSpJ/Fll9pcMoRSh53+j4+vz9FmQx9k6WEAc2EEJR
MGUwgkm3BeNdzCRfvHP51yzFcEdsmEp3t0AeVPzFIx35qXgDCm4R0za41iXdFD39
FAJqySsv9zB7wfDtxKIG3/mnp1aa0UuEsaSH2CX4bhK3YcqjB9Z9Zyh+fJd47jod
psdmpPTNB7SUtudSgwwDGoU2iSFuCIsA33VDmmSt5H1T
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions __tests__/fixtures/selfsigned.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDY9S9qGUkr8JQW
YWAc9vqUriZfpbEau3QIaxYXGs/xFy/VNZejeYyukOGkyqZoJmfLtq45H/IvvuHC
hR7XFZPesfy0yzRmCAiN2pJWNIgj5bL0YewJD3UCasq84BX+hZxYaCTU04er170U
NQHn2Ig/L3PM9F/CsmmROs2hQwE9aXlbylFniSRNZOjJyAirmFKm/VKd9quQmzWG
Q8tcEYqaMCIb6N0lQJDSCGckiQtWqk0vomfjuWc2J7oqng8lCeTMqVsuBP52a4g8
6lrOz7E/6MIMuVNVnv6JQ1a6Lz0opGArzcUVeIo33CIKo6PQUTkucIHM/TzxGO98
wWEERJQLAgMBAAECggEBAL+9GHU8+ZTSnh2VWzrd7yD9M76uEXIdnnNeKHys3n8k
Tcqw/V2lK3aPZkucKSq8XlkEDr8/g2s82ApwWYwebruOM1aYi6tsiBrNwyxaasLG
2rvt2os7VN6ZAKmhpO52qHDdQUex1iJBnMHCAvgiPm8RAddtVUAdKv0FqftN20eo
Ud4NuWLK8hga+eblwM0PTqGnKoBuPJyUcc4pWgRWWNXMjOpxrf9U8d6DgoifHsXU
LzQ2O3LRxaGvJFyMwXr9wyOTfVlPOvO9YUk5RVCIL6cY6OxrwrJhupfxFGU2oVwP
99g/NVymqZdU9TOgtKvBfSj5kRG5YweBTWTTtxgV+TkCgYEA7RQogBprMdGVLst8
bG+33eCskFr9WxkmWe+rzAuayHPRrXJCISnub4Ex9ikZEnYukXEUgEt/kMVWzfzc
XhRTLIGhqKKKYDHE/88SrEZicS0XypzmLK0Rll84IA4Wu+pf5Hr0SEkpqg7BHYw9
E3lrvHxpDX6couoPBIP+fTAmDJcCgYEA6kXthDJzKiYBnnvpjN3S5+kY2ZnPR78x
OMRtl2S5MbNI3GviUoRRYv6TdOAmadIMRCAEXZymOxy7Twl8YKvxHs3JnWw2yKtF
ldUIceMvIrynx/3PC1nqNWcChJuzs1ltP7lko3pSciXMBqcMC8haEYgDnhrACMQL
OgNuPBU6vq0CgYBVeF39iQi6Ri+9Vhj+Uux7rkMoK9WJITEFXXWXM1vTBoZCPJ4A
rMhMJMypTTm/wSGax6S3eAB+ZdacnpunwzYVJorsa+TtNyQpgTLfLuTQnowkPJpy
4tYjWyK10754cs+tZHJrGQ1PRNB0YZmnSq//nO6Wsd2wkidl3lxCL7iX8wKBgBpn
9WSwNxDqJcaSWvnYyvv+5yEn2BhTMZ4fbebhoIo8lhraQjFg3reU0FQdK9dDqMRJ
A5T1ojsJewdmn1FaMBxzv6Tx3J7zxy0jTQdhPx/gOd0t+5dg9Cg+yybdUf0GOG01
XWWb1Q0uu3eIfrAZTiWpuhapFzoltso8NsGo9u0lAoGBAIm68NBZt99L06fvlPca
saoOR1Ef4TExkAyaAoAStqXDkIeuAoKXMuWJ5umKPhUVgBPb80nq8Xyme9lCetTL
1j8aBnlnz9JWZeXoKnocC6xYnPFVv2BBLGIaa8XWzyoMGfIqaHSkmMk5v4OTY2tK
HRNTuMYTarxFSKNdxj7i556M
-----END PRIVATE KEY-----
2 changes: 1 addition & 1 deletion __tests__/utils/pages/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<html>
<body>
<h2>Synthetics test page</h2>
<h2 class="synthetics">Synthetics test page</h2>
</head>
</html>
30 changes: 23 additions & 7 deletions __tests__/utils/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,45 @@
*/

import http, { RequestListener, IncomingMessage, ServerResponse } from 'http';
import https from 'https';
import { parse } from 'url';
import { createReadStream } from 'fs';
import { createReadStream, readFileSync } from 'fs';
import { join } from 'path';
import { AddressInfo } from 'net';

type CreateOpts = { tls?: boolean };

export class Server {
PREFIX: string;
TEST_PAGE: string;
_server: http.Server;
_server: http.Server | https.Server;
_routes = new Map<string, RequestListener>();
static directory = join(__dirname, 'pages');

static async create() {
const instance = new Server();
static async create(opts?: CreateOpts): Promise<Server> {
const instance = new Server(opts);
await new Promise(resolve => instance._server.once('listening', resolve));
return instance;
}

constructor() {
this._server = http.createServer(this._onRequest.bind(this));
constructor(opts?: CreateOpts) {
let srvConstructor = http.createServer;
if (opts?.tls) {
srvConstructor = app =>
https.createServer(
{
key: readFileSync(`${__dirname}/../fixtures/selfsigned.key`),
cert: readFileSync(`${__dirname}/../fixtures/selfsigned.cert`),
},
app
);
}

this._server = srvConstructor(this._onRequest.bind(this));
this._server.listen(0);
const { port } = this._server.address() as AddressInfo;
this.PREFIX = `http://localhost:${port}`;
const proto = opts?.tls ? 'https' : 'http';
this.PREFIX = `${proto}://localhost:${port}`;
this.TEST_PAGE = `${this.PREFIX}/index.html`;
}

Expand Down
Loading