sitespeed.io/test/cliTests.js

169 lines
6.2 KiB
JavaScript

'use strict';
const expect = require('chai').expect;
const path = require('path');
const util = require('util');
const execFile = util.promisify(require('child_process').execFile);
function runSitespeed(options = []) {
const cli = path.join(path.resolve(__dirname), '../bin/sitespeed.js');
return execFile('node', [cli].concat(options));
}
describe('cli', () => {
context('no arguments', () => {
it('should report error', async () => {
let stderr;
let exitCode = 0;
try {
await runSitespeed();
} catch (err) {
stderr = err.stderr;
exitCode = err.code;
}
expect(stderr).not.to.be.undefined;
expect(exitCode).not.to.equal(0);
expect(stderr).to.include('sitespeed.js [options] <url>/<file>');
expect(stderr).to.include('One or multiple URLs or scripts');
});
});
describe('--help summary', async () => {
let stdout;
before(async () => {
const run = await runSitespeed(['--help']);
stdout = run.stdout;
});
it('should include banner in stdout with --help and not hard exit', async () => {
expect(stdout).not.to.be.undefined;
expect(stdout).to.include('sitespeed.js [options] <url>/<file>');
expect(stdout).to.not.include('One or multiple URLs or scripts');
});
it('should contain grafana options', () => {
expect(stdout).to.contain('--grafana.host');
expect(stdout).to.contain(
'The Grafana host used when sending annotations'
);
expect(stdout).to.contain('--grafana.port');
expect(stdout).to.contain(
'The Grafana port used when sending annotations to Grafana'
);
expect(stdout).to.contain('--grafana.auth');
expect(stdout).to.contain(
'The Grafana auth/bearer value used when sending annotations to Grafana. See http://docs.grafana.org/http_api/auth/#authentication-api'
);
expect(stdout).to.contain('--grafana.annotationTitle');
expect(stdout).to.contain(
'Add a title to the annotation sent for a run.'
);
expect(stdout).to.contain('--grafana.annotationMessage');
expect(stdout).to.contain(
'Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.'
);
expect(stdout).to.contain('--grafana.annotationTag');
expect(stdout).to.contain(
'Add a extra tag to the annotation sent for a run. Repeat the --grafana.annotationTag option for multiple tags. Make sure they do not collide with the other tags.'
);
expect(stdout).to.contain('--grafana.annotationScreenshot');
expect(stdout).to.contain(
'Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work.'
);
});
it('should contain graphite options', () => {
expect(stdout).to.contain('--graphite.host');
expect(stdout).to.contain(
'The Graphite host used to store captured metrics.'
);
expect(stdout).to.contain('--graphite.port');
expect(stdout).to.contain(
'The Graphite port used to store captured metrics.'
);
expect(stdout).to.contain('--graphite.auth');
expect(stdout).to.contain(
'The Graphite user and password used for authentication. Format: user:password'
);
expect(stdout).to.contain('--graphite.httpPort');
expect(stdout).to.contain(
'The Graphite port used to access the user interface and send annotations event'
);
expect(stdout).to.contain('--graphite.webHost');
expect(stdout).to.contain(
'The graphite-web host. If not specified graphite.host will be used.'
);
expect(stdout).to.contain('--graphite.namespace');
expect(stdout).to.contain(
'The namespace key added to all captured metrics.'
);
expect(stdout).to.contain('--graphite.includeQueryParams');
expect(stdout).to.contain(
'Whether to include query parameters from the URL in the Graphite keys or not'
);
expect(stdout).to.contain('--graphite.arrayTags');
expect(stdout).to.contain(
'Send the tags as Array or a String. In Graphite 1.0 the tags is a array. Before a String'
);
expect(stdout).to.contain('--graphite.annotationTitle');
expect(stdout).to.contain(
'Add a title to the annotation sent for a run.'
);
expect(stdout).to.contain('--graphite.annotationMessage');
expect(stdout).to.contain(
'Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.'
);
expect(stdout).to.contain('--graphite.annotationScreenshot');
expect(stdout).to.contain(
'Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work.'
);
expect(stdout).to.contain('--graphite.statsd');
expect(stdout).to.contain('Uses the StatsD interface');
expect(stdout).to.contain('--graphite.annotationTag');
expect(stdout).to.contain(
'Add a extra tag to the annotation sent for a run. Repeat the --graphite.annotationTag option for multiple tags. Make sure they do not collide with the other tags.'
);
expect(stdout).to.contain('--graphite.bulkSize');
expect(stdout).to.contain(
'Break up number of metrics to send with each request.'
);
expect(stdout).to.contain('--graphite.experimental.perIteration');
expect(stdout).to.contain(
'Experimental setup to send each iteration of metrics to Graphite. Experimental means this can change and is not released as stable. Use it with care.'
);
});
it('should contain influxdb options', () => {
expect(stdout).to.contain('--influxdb.protocol');
expect(stdout).to.contain('--influxdb.host');
expect(stdout).to.contain('--influxdb.port');
expect(stdout).to.contain('--influxdb.username');
expect(stdout).to.contain('--influxdb.database');
expect(stdout).to.contain('--influxdb.includeQueryParams');
expect(stdout).to.contain('--influxdb.groupSeparator');
expect(stdout).to.contain('--influxdb.annotationScreenshot');
});
});
});