optimizely-server-sdk
Version:
Node SDK for Optimizely X Full Stack
716 lines (589 loc) • 35.3 kB
JavaScript
/**
* Copyright 2016, Optimizely
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var profileHelpers = require('./measure_methods');
var testData10Experiments = require('./test_data_10_experiments');
var testData25Experiments = require('./test_data_25_experiments');
var testData50Experiments = require('./test_data_50_experiments');
var ACTIVATE_SLA_TIME = 20;
var GET_VARIATION_SLA_TIME = 5;
var INSTANTIATION_SLA_TIME_WITH_VALIDATION = 200;
var INSTANTIATION_SLA_TIME_WITHOUT_VALIDATION = 25;
var ITERATIONS_PER_TEST_FILE = 10;
var TOTAL_ITERATIONS = 30;
var TRACK_SLA_TIME = 10;
describe('profiling', function() {
this.timeout(15000);
describe('instantiation', function() {
it('should execute in less than 100ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiation(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiation(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiation(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute with logger in less than 100ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithLogger(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithLogger(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithLogger(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute with logger and error handler in less than 100ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithLoggerAndErrorHandler(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithLoggerAndErrorHandler(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithLoggerAndErrorHandler(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute without schema validation in less than 25ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidation(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidation(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidation(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute without schema validation and with logger in less than 25ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLogger(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLogger(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLogger(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute without schema validation and with error handler in less than 25ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithErrorHandler(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithErrorHandler(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithErrorHandler(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute without schema validation and with logger & error handler in less than 25ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLoggerAndErrorHandler(testData50Experiments.getTestProjectConfig()));
timesFor25Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLoggerAndErrorHandler(testData25Experiments.getTestProjectConfig()));
timesFor10Experiments.push(profileHelpers.measureInstantiationWithoutJSONValidationAndWithLoggerAndErrorHandler(testData10Experiments.getTestProjectConfig()));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
});
describe('APIs', function() {
describe('activate', function() {
it('should execute activate in less than 20ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureActivate(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureActivate(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureActivate(testData10Experiments.getTestProjectConfig(), 'test'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute activate with attributes in less than 20ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureActivateWithAttributes(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureActivateWithAttributes(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureActivateWithAttributes(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute activate with forced variation in less than 20ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureActivateWithForcedVariation(testData50Experiments.getTestProjectConfig(), 'variation_user'));
timesFor25Experiments.push(profileHelpers.measureActivateWithForcedVariation(testData25Experiments.getTestProjectConfig(), 'variation_user'));
timesFor10Experiments.push(profileHelpers.measureActivateWithForcedVariation(testData10Experiments.getTestProjectConfig(), 'variation_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute activate with grouped experiment in less than 20ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureActivateWithGroupedExperiment(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureActivateWithGroupedExperiment(testData25Experiments.getTestProjectConfig(), 'test'));
timesFor10Experiments.push(profileHelpers.measureActivateWithGroupedExperiment(testData10Experiments.getTestProjectConfig(), 'no'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute activate with grouped experiment and attributes in less than 20ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureActivateWithGroupedExperimentAndAttributes(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureActivateWithGroupedExperimentAndAttributes(testData25Experiments.getTestProjectConfig(), 'yes'));
timesFor10Experiments.push(profileHelpers.measureActivateWithGroupedExperimentAndAttributes(testData10Experiments.getTestProjectConfig(), 'test'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
});
describe('getVariation', function() {
it('should execute getVariation in less than 5ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureGetVariation(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureGetVariation(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureGetVariation(testData10Experiments.getTestProjectConfig(), 'test'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute getVariation with attributes in less than 5ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureGetVariationWithAttributes(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureGetVariationWithAttributes(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureGetVariationWithAttributes(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute getVariation with forced variation in less than 5ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureGetVariationWithForcedVariation(testData50Experiments.getTestProjectConfig(), 'variation_user'));
timesFor25Experiments.push(profileHelpers.measureGetVariationWithForcedVariation(testData25Experiments.getTestProjectConfig(), 'variation_user'));
timesFor10Experiments.push(profileHelpers.measureGetVariationWithForcedVariation(testData10Experiments.getTestProjectConfig(), 'variation_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute getVariation with grouped experiment in less than 5ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureGetVariationWithGroupedExperiment(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureGetVariationWithGroupedExperiment(testData25Experiments.getTestProjectConfig(), 'test'));
timesFor10Experiments.push(profileHelpers.measureGetVariationWithGroupedExperiment(testData10Experiments.getTestProjectConfig(), 'no'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute getVariation with grouped experiment and attributes in less than 5ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureGetVariationWithGroupedExperimentAndAttributes(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureGetVariationWithGroupedExperimentAndAttributes(testData25Experiments.getTestProjectConfig(), 'yes'));
timesFor10Experiments.push(profileHelpers.measureGetVariationWithGroupedExperimentAndAttributes(testData10Experiments.getTestProjectConfig(), 'test'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
});
describe('track', function() {
it('should execute track in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrack(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrack(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrack(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with attributes in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithAttributes(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrackWithAttributes(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrackWithAttributes(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with revenue in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithRevenue(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrackWithRevenue(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrackWithRevenue(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with attributes and revenue in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithAttributesAndRevenue(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrackWithAttributesAndRevenue(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrackWithAttributesAndRevenue(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with grouped experiment in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithGroupedExperiment(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrackWithGroupedExperiment(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrackWithGroupedExperiment(testData10Experiments.getTestProjectConfig(), 'no'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with grouped experiment and attributes in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributes(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributes(testData25Experiments.getTestProjectConfig(), 'yes'));
timesFor10Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributes(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with grouped experiment and revenue in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndRevenue(testData50Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor25Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndRevenue(testData25Experiments.getTestProjectConfig(), 'optimizely_user'));
timesFor10Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndRevenue(testData10Experiments.getTestProjectConfig(), 'no'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
it('should execute track with grouped experiment, attributes, and revenue in less than 3ms', function() {
var timesFor50Experiments = [];
var timesFor25Experiments = [];
var timesFor10Experiments = [];
for (var i = 0; i < ITERATIONS_PER_TEST_FILE; i++) {
timesFor50Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributesAndRevenue(testData50Experiments.getTestProjectConfig(), 'test'));
timesFor25Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributesAndRevenue(testData25Experiments.getTestProjectConfig(), 'yes'));
timesFor10Experiments.push(profileHelpers.measureTrackWithGroupedExperimentAndAttributesAndRevenue(testData10Experiments.getTestProjectConfig(), 'optimizely_user'));
}
var allTimes = {};
allTimes['50'] = timesFor50Experiments;
allTimes['25'] = timesFor25Experiments;
allTimes['10'] = timesFor10Experiments;
var times;
for (var numOfExperiments in allTimes) {
times = allTimes[numOfExperiments];
profileHelpers.validateMedian(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
// remove max and min times to calculate 80% average times
profileHelpers.removeMaxAndMin(times);
profileHelpers.validateAverage(times, INSTANTIATION_SLA_TIME_WITH_VALIDATION, numOfExperiments);
}
});
});
});
});