zater-cep
Version:
ZAter cep correios e via cep
125 lines (97 loc) • 4.62 kB
JavaScript
var lab = exports.lab = require('lab').script();
var expect = require('code').expect;
var describe = lab.describe;
var it = lab.it;
var before = lab.before;
var after = lab.after;
var scores = require('../lib/scores');
var keys = require('../lib/keys');
var metrics = require('../lib/metrics');
var parseVector = require('../lib/vector').parse;
var internals = {};
internals.vectorString = 'CVSS:3.0/AV:X/AC:H/PR:N/UI:R/S:C/C:L/I:H/A:L';
internals.envString = 'CR:H/IR:M/AR:L/MAC:L';
internals.temporalString = 'E:F/RL:T/RC:C';
describe('scores', function () {
function scoreReducer(scores, key) {
scores[key] = 0.5;
return scores;
}
describe('#getExploitability', function () {
it('reduces 8.22 with the combined product of exploitability scores', function () {
var simpleScores = keys.exploitability.reduce(scoreReducer, {});
expect(scores.getExploitability(simpleScores)).to.equal(8.22 / Math.pow(2, keys.exploitability.length))
var envScores = keys.envExploitability.reduce(scoreReducer, {});
expect(scores.getExploitability(envScores, { env: true })).to.equal(8.22 / Math.pow(2, keys.envExploitability.length));
});
});
describe('#getImpact', function () {
it('returns different values depending on the "S" metrics value', function () {
var simpleScores = keys.impact.reduce(scoreReducer, {});
var simpleScopeUnchangedImpact = scores.getImpact(simpleScores, { S: 'U' });
var simpleScopeChangedImpact = scores.getImpact(simpleScores, { S: 'C' });
expect(simpleScopeUnchangedImpact).to.be.lessThan(simpleScopeChangedImpact);
var envScores = keys.envImpact.reduce(scoreReducer, {});
var envScopeUnchangedImpact = scores.getImpact(envScores, { MS: 'U' }, { env: true });
var envScopeChangedImpact = scores.getImpact(envScores, { MS: 'C' }, { env: true });
expect(envScopeUnchangedImpact).to.be.lessThan(envScopeChangedImpact);
});
});
describe('#getBase', function () {
var vector;
lab.beforeEach(function () {
vector = parseVector(internals.vectorString);
});
it('calls getImpact with generated scores, vector, and options', function () {
var oldGetImpact = scores.getImpact;
var impactCalls = [];
scores.getImpact = function (scores, vector, options) {
impactCalls.push({ scores: scores, vector: vector, options: options });
return oldGetImpact.call(null, scores, vector, options);
};
scores.getBase(vector);
var call0 = impactCalls[0];
expect(call0.scores).to.include(keys.base);
expect(call0.vector).to.equal(vector);
expect(call0.options).to.not.exist();
var envVector = parseVector(internals.vectorString + '/' + internals.envString);
scores.getBase(envVector, { env: true });
var call1 = impactCalls[1];
expect(call1.scores).to.include(keys.base.concat(keys.environmental));
expect(call1.vector).to.equal(envVector);
expect(call1.options).to.exist().and.include('env');
scores.getImpact = oldGetImpact;
});
it('returns 0.0 when impact score is < 0.1', function () {
expect(scores.getBase({ C: 'N', I: 'N', A: 'N' })).to.equal(0.0);
});
it('calls getExploitability with generated scores and options', function () {
var oldGetExploitability = scores.getExploitability;
var exploitabilityCalls = [];
scores.getExploitability = function (scores, options) {
exploitabilityCalls.push({ scores: scores, options: options });
return oldGetExploitability.call(null, scores, options);
};
scores.getBase(vector);
var call0 = exploitabilityCalls[0];
expect(call0.scores).to.include(keys.base);
expect(call0.options).to.not.exist();
var envVector = parseVector(internals.vectorString + '/' + internals.envString);
scores.getBase(envVector, { env: true });
var call1 = exploitabilityCalls[1];
expect(call1.scores).to.include(keys.base.concat(keys.environmental));
expect(call1.options).to.exist().and.include('env');
scores.getExploitability = oldGetExploitability;
});
});
describe('#getTemporal', function () {
it('reduces the base score with the combined product of temporal scores', function () {
var score = 10;
var vector = { E: 'F', RL: 'W' };
var expected = Math.ceil((keys.temporal.reduce(function (result, key) {
return metrics.toScore[key][vector[key] || 'X'] * result;
}, score)) * 10.0) / 10.0;
expect(scores.getTemporal(vector, score)).to.equal(expected);
});
});
});