diff --git a/app/js/controllers/test.js b/app/js/controllers/test.js
new file mode 100644
index 00000000..0d0ce1f9
--- /dev/null
+++ b/app/js/controllers/test.js
@@ -0,0 +1,130 @@
+'use strict';
+
+var controllersModule = require('./_index');
+
+/**
+ * @ngInject
+ */
+function TestController(healthService, testService, startDate, testId) {
+
+ // ViewModel
+ var vm = this;
+ vm.testName = testId;
+ vm.testShortName = testService.getShortName(testId);
+
+ vm.processData = function(data) {
+ var dates = {};
+ var passEntries = [];
+ var failEntries = [];
+ var skipEntries = [];
+ var runTimeEntries = [];
+ var avgRunTimeEntries = [];
+ var dateString, dateTimeString;
+
+ for (dateString in data.data) {
+ if (data.data.hasOwnProperty(dateString)) {
+ var date = dateString;
+ var test = data.data[dateString];
+
+ // parse dates and create data series
+ var date = new Date(date);
+ var date = new Date(date.getFullYear(), date.getMonth(),
+ date.getDate()).getTime();
+ if (!dates[date]) {
+ if (test.status == 'success' || test.status == 'xfail') {
+ var count = {
+ passes: 1,
+ fails: 0,
+ skips: 0
+ };
+ }
+ else if (test.status == 'fail' || test.status == 'unxsucess') {
+ var count = {
+ passes: 0,
+ fails: 1,
+ skips: 0
+ };
+ }
+ else if (test.status == 'skip') {
+ var count = {
+ passes: 0,
+ fails: 0,
+ skips: 1
+ };
+ }
+ dates[date] = count;
+ }
+ else {
+ if (test.status == 'success' || test.status == 'xfail') {
+ dates[date].passes += 1;
+ }
+ else if (test.status == 'fail' || test.status == 'unxsucess') {
+ dates[date].fails += 1;
+ }
+ else if (test.status == 'skip') {
+ dates[date].skips += 1;
+ }
+ }
+ }
+ }
+ for (date in dates) {
+ if (dates.hasOwnProperty(date)) {
+ passEntries.push({
+ x: date,
+ y: dates[date].passes
+ });
+ failEntries.push({
+ x: date,
+ y: dates[date].fails
+ });
+ skipEntries.push({
+ x: date,
+ y: dates[date].skips
+ });
+ }
+ }
+ vm.statusData = [
+ { key: 'Passes', values: passEntries, color: "blue" },
+ { key: 'Failures', values: failEntries, color: "red" },
+ { key: 'Skips', values: skipEntries, color: "violet" }
+ ];
+
+ for (dateTimeString in data.numeric) {
+ if (data.numeric.hasOwnProperty(dateTimeString)) {
+ var date = dateTimeString;
+ var test = data.numeric[dateTimeString];
+
+ // parse dates and create data series
+ var date = new Date(date).getTime();
+
+ runTimeEntries.push({
+ x: date,
+ y: parseFloat(test.run_time.toFixed(2))
+ });
+ avgRunTimeEntries.push({
+ x: date,
+ y: parseFloat(test.avg_run_time.toFixed(2))
+ });
+ }
+ }
+ vm.timeData = [
+ {key: 'Run Time (sec.)', values: runTimeEntries, color: "blue"},
+ {key: 'Avg. Run Time (sec.)', values: avgRunTimeEntries, color: "black"}
+ ];
+ };
+
+ vm.loadData = function() {
+ var beginDate = new Date(startDate);
+ var stopDate = new Date(startDate);
+ beginDate.setDate(startDate.getDate() - 30);
+ healthService.getTestRunList(vm.testName, {
+ start_date: beginDate,
+ stop_date: stopDate
+ }).then(function(response) {
+ vm.processData(response.data);
+ });
+ };
+
+ vm.loadData();
+}
+controllersModule.controller('TestController', TestController);
diff --git a/app/js/controllers/tests.js b/app/js/controllers/tests.js
index b2c900ef..7d4ef417 100644
--- a/app/js/controllers/tests.js
+++ b/app/js/controllers/tests.js
@@ -6,7 +6,7 @@ var _ = require('underscore');
/**
* @ngInject
*/
-function TestsController(healthService) {
+function TestsController(healthService, testService) {
// ViewModel
var vm = this;
@@ -15,12 +15,8 @@ function TestsController(healthService) {
vm.processData = function(data) {
vm.chartData = {};
- var removeIdNoise = function(testId) {
- return testId.replace('setUpClass (', '').replace('tearDownClass (', '').replace(' )', '');
- };
-
var testsByHierarchy = _.groupBy(data.tests, function(test) {
- var testId = removeIdNoise(test.test_id);
+ var testId = testService.removeIdNoise(test.test_id);
var keyMatcher = /^(\w*\.\w*\.\w*)\./g;
var matches = keyMatcher.exec(testId);
diff --git a/app/js/directives/chart-stack-area.js b/app/js/directives/chart-stack-area.js
new file mode 100644
index 00000000..8432a557
--- /dev/null
+++ b/app/js/directives/chart-stack-area.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var directivesModule = require('./_index.js');
+
+var d3 = require('d3');
+var nv = require('nvd3');
+
+/**
+ * @ngInject
+ */
+function chartStackArea() {
+ var link = function(scope, el, attrs) {
+ scope.$on("loading-started", function() {
+ el.css({"display" : "none"});
+ });
+
+ scope.$on("loading-complete", function() {
+ el.css({"display" : "block"});
+ });
+
+ var chart = null;
+
+ var svg = d3.select(el[0]).append('svg')
+ .attr('width', attrs.width)
+ .attr('height', attrs.height);
+
+ var update = function(data) {
+ if (typeof data === "undefined") {
+ return;
+ }
+ chart = nv.models.stackedAreaChart()
+ .margin({right: 100})
+ .x(function(d) { return d.x; })
+ .y(function(d) { return d.y; })
+ .useInteractiveGuideline(true)
+ .rightAlignYAxis(true)
+ .showControls(true)
+ .clipEdge(true);
+
+ chart.xAxis.tickFormat(function(d) { return d3.time.format("%x")(new Date(d)); });
+
+ chart.yAxis.tickFormat(d3.format(',.2f'));
+ svg.datum(data).call(chart);
+ };
+
+ scope.$on('windowResize', function() {
+ if (chart !== null) {
+ chart.update();
+ }
+ });
+
+ scope.$watch('data', update);
+ };
+
+ return {
+ restrict: 'EA',
+ scope: {
+ 'data': '=',
+ 'width': '@',
+ 'height': '@'
+ },
+ link: link
+ };
+}
+
+directivesModule.directive('chartStackArea', chartStackArea);
diff --git a/app/js/on_config.js b/app/js/on_config.js
index 0e80fba7..59df28d2 100644
--- a/app/js/on_config.js
+++ b/app/js/on_config.js
@@ -52,6 +52,20 @@ function OnConfig($stateProvider, $locationProvider, $urlRouterProvider) {
return new Date();
}
}
+ })
+ .state('test', {
+ url: '/test/:testId',
+ controller: 'TestController as testCtrl',
+ templateUrl: 'test.html',
+ title: 'Test',
+ resolve: /*@ngInject*/ {
+ 'testId': function($stateParams) {
+ return $stateParams.testId;
+ },
+ 'startDate': function() {
+ return new Date();
+ }
+ }
});
$urlRouterProvider.otherwise('/');
diff --git a/app/js/services/health-api.js b/app/js/services/health-api.js
index d6fee4ef..eedd4545 100644
--- a/app/js/services/health-api.js
+++ b/app/js/services/health-api.js
@@ -107,6 +107,14 @@ function HealthService($http, config) {
});
};
+ service.getTestRunList = function(testId, options) {
+ return config.get().then(function(config) {
+ return $http.jsonp(config.apiRoot + '/test_runs/' + testId, {
+ params: angular.extend(options, { callback: 'JSON_CALLBACK' })
+ });
+ });
+ };
+
return service;
}
diff --git a/app/js/services/test.js b/app/js/services/test.js
new file mode 100644
index 00000000..ed447da2
--- /dev/null
+++ b/app/js/services/test.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var angular = require('angular');
+
+var servicesModule = require('./_index.js');
+
+function TestService() {
+ var service = {};
+
+ service.removeIdNoise = function(testId) {
+ return testId.replace('setUpClass (', '').replace('tearDownClass (', '').replace(')', '');
+ };
+
+ service.getShortName = function(testId) {
+ var denoisedTestName = service.removeIdNoise(testId);
+ return denoisedTestName.split('.').slice(-2).join('.');
+ };
+
+ return service;
+}
+
+servicesModule.service('testService', TestService);
diff --git a/app/views/job.html b/app/views/job.html
index 0dccf4ae..b1e66484 100644
--- a/app/views/job.html
+++ b/app/views/job.html
@@ -61,7 +61,7 @@
- {{ test.name|limitTo:110 }} |
+ {{ test.name|limitTo:110 }} |
{{ test.passes|number }} |
{{ test.failures|number }} |
{{ test.failuresRate|number:2 }} |
diff --git a/app/views/test.html b/app/views/test.html
new file mode 100644
index 00000000..9bf66459
--- /dev/null
+++ b/app/views/test.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
Success and Failures
+
+
+
+
+
+
+
diff --git a/app/views/tests.html b/app/views/tests.html
index 748669be..b60593a0 100644
--- a/app/views/tests.html
+++ b/app/views/tests.html
@@ -52,7 +52,7 @@
- {{ test.test_id | limitTo: 110 }}
+ {{test.test_id | limitTo: 110}}
|
{{ test.success | number }} |
{{ test.failure | number:2 }} |
@@ -67,3 +67,4 @@
+
diff --git a/test/e2e/mocks/test_project.js b/test/e2e/mocks/test_project.js
new file mode 100644
index 00000000..b58553ca
--- /dev/null
+++ b/test/e2e/mocks/test_project.js
@@ -0,0 +1,862 @@
+module.exports = {
+ request: {
+ method: 'JSONP',
+ path: '/test_runs/tempest.api.volume.test_qos.QosSpecsV2TestJSON.test_get_qos'
+ },
+ response: {
+ data: {
+ "test_runs": {
+ "2015-11-01T08:08:49.035211": {
+ "run_id": 76869,
+ "run_time": 0.015618,
+ "status": "success"
+ },
+ "2015-11-01T08:09:17.964174": {
+ "run_id": 78112,
+ "run_time": 0.016056,
+ "status": "success"
+ },
+ "2015-11-01T09:22:04.044210": {
+ "run_id": 132687,
+ "run_time": 0.018179,
+ "status": "success"
+ },
+ "2015-11-01T16:00:43.051799": {
+ "run_id": 203520,
+ "run_time": 0.020488,
+ "status": "success"
+ },
+ "2015-11-01T16:07:03.632876": {
+ "run_id": 144316,
+ "run_time": 0.024086,
+ "status": "success"
+ },
+ "2015-11-01T16:11:31.619705": {
+ "run_id": 87896,
+ "run_time": 0.014398,
+ "status": "success"
+ },
+ "2015-11-01T16:14:49.484077": {
+ "run_id": 1482,
+ "run_time": 0.020054,
+ "status": "success"
+ },
+ "2015-11-01T23:43:17.962117": {
+ "run_id": 123440,
+ "run_time": 0.019932,
+ "status": "success"
+ },
+ "2015-11-01T23:46:37.713662": {
+ "run_id": 188360,
+ "run_time": 0.021598,
+ "status": "success"
+ },
+ "2015-11-02T02:11:34.550398": {
+ "run_id": 71866,
+ "run_time": 0.013558,
+ "status": "success"
+ },
+ "2015-11-02T02:16:03.049329": {
+ "run_id": 191693,
+ "run_time": 0.022511,
+ "status": "success"
+ },
+ "2015-11-02T02:22:51.152276": {
+ "run_id": 8469,
+ "run_time": 0.018899,
+ "status": "success"
+ },
+ "2015-11-02T02:23:12.421702": {
+ "run_id": 162675,
+ "run_time": 0.026132,
+ "status": "success"
+ },
+ "2015-11-02T02:49:38.573835": {
+ "run_id": 64377,
+ "run_time": 0.020959,
+ "status": "success"
+ },
+ "2015-11-02T02:49:48.999416": {
+ "run_id": 105940,
+ "run_time": 0.020126,
+ "status": "success"
+ },
+ "2015-11-02T02:51:34.005085": {
+ "run_id": 133181,
+ "run_time": 0.016826,
+ "status": "success"
+ },
+ "2015-11-02T03:07:01.015165": {
+ "run_id": 196930,
+ "run_time": 0.014044,
+ "status": "success"
+ },
+ "2015-11-02T04:07:25.133249": {
+ "run_id": 164716,
+ "run_time": 0.026805,
+ "status": "success"
+ },
+ "2015-11-02T04:33:10.887952": {
+ "run_id": 181261,
+ "run_time": 0.013324,
+ "status": "success"
+ },
+ "2015-11-02T06:33:21.559052": {
+ "run_id": 101005,
+ "run_time": 0.024039,
+ "status": "success"
+ },
+ "2015-11-02T06:42:37.663809": {
+ "run_id": 34069,
+ "run_time": 0.017489,
+ "status": "success"
+ },
+ "2015-11-02T06:58:57.690055": {
+ "run_id": 141251,
+ "run_time": 0.026118,
+ "status": "success"
+ },
+ "2015-11-02T07:14:28.678193": {
+ "run_id": 149783,
+ "run_time": 0.016628,
+ "status": "success"
+ },
+ "2015-11-02T07:14:50.473016": {
+ "run_id": 83621,
+ "run_time": 0.019381,
+ "status": "success"
+ },
+ "2015-11-02T07:20:28.572440": {
+ "run_id": 7546,
+ "run_time": 0.016645,
+ "status": "success"
+ },
+ "2015-11-02T07:21:50.046523": {
+ "run_id": 117516,
+ "run_time": 0.016203,
+ "status": "success"
+ },
+ "2015-11-02T07:26:59.190658": {
+ "run_id": 2131,
+ "run_time": 0.054914,
+ "status": "success"
+ },
+ "2015-11-02T07:30:15.723823": {
+ "run_id": 124955,
+ "run_time": 0.018861,
+ "status": "success"
+ },
+ "2015-11-02T07:30:57.415524": {
+ "run_id": 171082,
+ "run_time": 0.015379,
+ "status": "success"
+ },
+ "2015-11-02T07:36:40.430840": {
+ "run_id": 43305,
+ "run_time": 0.027897,
+ "status": "success"
+ },
+ "2015-11-02T07:36:47.141898": {
+ "run_id": 189929,
+ "run_time": 0.015209,
+ "status": "success"
+ },
+ "2015-11-02T08:03:26.020152": {
+ "run_id": 108006,
+ "run_time": 0.020233,
+ "status": "success"
+ },
+ "2015-11-02T08:04:27.573191": {
+ "run_id": 195803,
+ "run_time": 0.02616,
+ "status": "success"
+ },
+ "2015-11-02T08:11:32.325353": {
+ "run_id": 178463,
+ "run_time": 0.02221,
+ "status": "success"
+ },
+ "2015-11-02T08:26:07.771437": {
+ "run_id": 143509,
+ "run_time": 0.02139,
+ "status": "success"
+ },
+ "2015-11-02T08:41:25.735202": {
+ "run_id": 159036,
+ "run_time": 0.016715,
+ "status": "success"
+ },
+ "2015-11-02T09:12:00.830422": {
+ "run_id": 25060,
+ "run_time": 0.023631,
+ "status": "success"
+ },
+ "2015-11-02T09:16:15.520333": {
+ "run_id": 130322,
+ "run_time": 0.03652,
+ "status": "success"
+ },
+ "2015-11-02T09:17:31.963035": {
+ "run_id": 119297,
+ "run_time": 0.022164,
+ "status": "success"
+ },
+ "2015-11-02T09:17:33.937683": {
+ "run_id": 141525,
+ "run_time": 0.014269,
+ "status": "success"
+ },
+ "2015-11-02T09:23:01.514370": {
+ "run_id": 171309,
+ "run_time": 0.01259,
+ "status": "success"
+ },
+ "2015-11-02T09:27:54.976154": {
+ "run_id": 119126,
+ "run_time": 0.013371,
+ "status": "success"
+ },
+ "2015-11-02T09:29:54.559126": {
+ "run_id": 125059,
+ "run_time": 0.013762,
+ "status": "success"
+ },
+ "2015-11-02T09:31:09.726305": {
+ "run_id": 71722,
+ "run_time": 0.012565,
+ "status": "success"
+ },
+ "2015-11-02T09:34:44.596509": {
+ "run_id": 29348,
+ "run_time": 0.015015,
+ "status": "success"
+ },
+ "2015-11-02T09:35:12.602743": {
+ "run_id": 177325,
+ "run_time": 0.018385,
+ "status": "success"
+ },
+ "2015-11-02T09:41:02.845800": {
+ "run_id": 99987,
+ "run_time": 0.013543,
+ "status": "success"
+ },
+ "2015-11-02T10:34:37.987872": {
+ "run_id": 99042,
+ "run_time": 0.019691,
+ "status": "success"
+ },
+ "2015-11-02T10:48:26.901560": {
+ "run_id": 207320,
+ "run_time": 0.021985,
+ "status": "success"
+ },
+ "2015-11-02T10:58:53.273128": {
+ "run_id": 85317,
+ "run_time": 0.015492,
+ "status": "success"
+ },
+ "2015-11-02T11:05:19.596522": {
+ "run_id": 108927,
+ "run_time": 0.017494,
+ "status": "success"
+ },
+ "2015-11-02T11:56:04.948180": {
+ "run_id": 156119,
+ "run_time": 0.015302,
+ "status": "success"
+ },
+ "2015-11-02T13:23:35.614099": {
+ "run_id": 106178,
+ "run_time": 0.017887,
+ "status": "success"
+ },
+ "2015-11-02T13:23:39.718837": {
+ "run_id": 86633,
+ "run_time": 0.02081,
+ "status": "success"
+ },
+ "2015-11-02T13:32:04.369087": {
+ "run_id": 16276,
+ "run_time": 0.021102,
+ "status": "success"
+ },
+ "2015-11-02T13:34:13.661198": {
+ "run_id": 57460,
+ "run_time": 0.022075,
+ "status": "success"
+ },
+ "2015-11-02T13:38:25.946878": {
+ "run_id": 92566,
+ "run_time": 0.019312,
+ "status": "success"
+ },
+ "2015-11-02T13:43:58.228929": {
+ "run_id": 115237,
+ "run_time": 0.058536,
+ "status": "success"
+ },
+ "2015-11-02T13:49:10.836496": {
+ "run_id": 118108,
+ "run_time": 0.069969,
+ "status": "success"
+ },
+ "2015-11-02T14:06:18.625258": {
+ "run_id": 158346,
+ "run_time": 0.012928,
+ "status": "success"
+ },
+ "2015-11-02T14:14:58.097067": {
+ "run_id": 59975,
+ "run_time": 0.013438,
+ "status": "success"
+ },
+ "2015-11-02T14:17:49.449379": {
+ "run_id": 55506,
+ "run_time": 0.013609,
+ "status": "success"
+ },
+ "2015-11-02T14:22:05.712563": {
+ "run_id": 46554,
+ "run_time": 0.023182,
+ "status": "success"
+ },
+ "2015-11-02T14:33:30.487910": {
+ "run_id": 599,
+ "run_time": 0.018991,
+ "status": "success"
+ },
+ "2015-11-02T14:43:25.502026": {
+ "run_id": 12514,
+ "run_time": 0.031398,
+ "status": "success"
+ },
+ "2015-11-02T14:44:22.676896": {
+ "run_id": 161001,
+ "run_time": 0.116917,
+ "status": "success"
+ },
+ "2015-11-02T15:46:11.449058": {
+ "run_id": 71330,
+ "run_time": 0.017796,
+ "status": "success"
+ },
+ "2015-11-02T16:42:01.962719": {
+ "run_id": 80307,
+ "run_time": 0.016806,
+ "status": "success"
+ },
+ "2015-11-02T16:45:53.780516": {
+ "run_id": 63984,
+ "run_time": 0.016583,
+ "status": "success"
+ },
+ "2015-11-02T16:53:48.431066": {
+ "run_id": 31018,
+ "run_time": 0.015082,
+ "status": "success"
+ },
+ "2015-11-02T16:53:55.290351": {
+ "run_id": 162963,
+ "run_time": 0.015735,
+ "status": "success"
+ },
+ "2015-11-02T16:55:14.979653": {
+ "run_id": 14083,
+ "run_time": 0.032282,
+ "status": "success"
+ },
+ "2015-11-02T17:01:01.282831": {
+ "run_id": 106601,
+ "run_time": 0.013443,
+ "status": "success"
+ },
+ "2015-11-02T17:08:40.703509": {
+ "run_id": 92504,
+ "run_time": 0.018598,
+ "status": "success"
+ },
+ "2015-11-02T17:38:11.036868": {
+ "run_id": 121501,
+ "run_time": 0.034067,
+ "status": "success"
+ },
+ "2015-11-02T18:33:42.123968": {
+ "run_id": 154149,
+ "run_time": 0.017088,
+ "status": "success"
+ },
+ "2015-11-02T18:38:08.406395": {
+ "run_id": 122021,
+ "run_time": 0.021967,
+ "status": "success"
+ },
+ "2015-11-02T18:38:43.469517": {
+ "run_id": 155118,
+ "run_time": 0.042394,
+ "status": "success"
+ },
+ "2015-11-02T18:39:24.415214": {
+ "run_id": 61434,
+ "run_time": 0.015306,
+ "status": "success"
+ },
+ "2015-11-02T19:31:07.663173": {
+ "run_id": 72665,
+ "run_time": 0.01735,
+ "status": "success"
+ },
+ "2015-11-02T19:41:15.503530": {
+ "run_id": 192883,
+ "run_time": 0.014081,
+ "status": "success"
+ },
+ "2015-11-02T20:04:03.725369": {
+ "run_id": 22034,
+ "run_time": 0.016241,
+ "status": "success"
+ },
+ "2015-11-02T20:10:44.169290": {
+ "run_id": 85666,
+ "run_time": 0.020533,
+ "status": "success"
+ },
+ "2015-11-02T20:11:32.451023": {
+ "run_id": 34396,
+ "run_time": 0.015341,
+ "status": "success"
+ },
+ "2015-11-02T20:18:37.400257": {
+ "run_id": 131621,
+ "run_time": 0.014312,
+ "status": "success"
+ },
+ "2015-11-02T20:19:59.759422": {
+ "run_id": 97553,
+ "run_time": 0.023146,
+ "status": "success"
+ },
+ "2015-11-02T20:22:31.440839": {
+ "run_id": 162355,
+ "run_time": 0.01791,
+ "status": "success"
+ },
+ "2015-11-02T20:23:02.124251": {
+ "run_id": 83893,
+ "run_time": 0.01618,
+ "status": "success"
+ },
+ "2015-11-02T20:26:16.035012": {
+ "run_id": 23575,
+ "run_time": 0.045818,
+ "status": "success"
+ },
+ "2015-11-02T21:26:54.656497": {
+ "run_id": 41077,
+ "run_time": 0.023523,
+ "status": "success"
+ },
+ "2015-11-02T21:54:10.596232": {
+ "run_id": 38493,
+ "run_time": 0.014847,
+ "status": "success"
+ },
+ "2015-11-02T21:57:45.216474": {
+ "run_id": 120429,
+ "run_time": 0.015238,
+ "status": "success"
+ },
+ "2015-11-02T22:01:51.437871": {
+ "run_id": 199434,
+ "run_time": 0.0177,
+ "status": "success"
+ },
+ "2015-11-02T23:14:11.106709": {
+ "run_id": 172444,
+ "run_time": 0.021441,
+ "status": "success"
+ },
+ "2015-11-03T01:55:28.506993": {
+ "run_id": 129762,
+ "run_time": 0.020201,
+ "status": "success"
+ },
+ "2015-11-03T03:39:36.589137": {
+ "run_id": 95749,
+ "run_time": 0.018903,
+ "status": "success"
+ },
+ "2015-11-03T03:41:12.563281": {
+ "run_id": 103042,
+ "run_time": 0.020127,
+ "status": "success"
+ },
+ "2015-11-03T03:51:56.225424": {
+ "run_id": 131119,
+ "run_time": 0.014433,
+ "status": "success"
+ },
+ "2015-11-03T03:54:39.499312": {
+ "run_id": 181899,
+ "run_time": 0.014116,
+ "status": "success"
+ },
+ "2015-11-03T03:55:17.861858": {
+ "run_id": 10998,
+ "run_time": 0.025004,
+ "status": "success"
+ },
+ "2015-11-03T04:03:55.526098": {
+ "run_id": 182062,
+ "run_time": 0.028803,
+ "status": "success"
+ },
+ "2015-11-03T04:05:58.315794": {
+ "run_id": 168321,
+ "run_time": 0.015644,
+ "status": "success"
+ },
+ "2015-11-03T04:08:58.127949": {
+ "run_id": 91538,
+ "run_time": 0.014831,
+ "status": "success"
+ },
+ "2015-11-03T04:25:19.767468": {
+ "run_id": 15448,
+ "run_time": 0.017014,
+ "status": "success"
+ },
+ "2015-11-03T04:30:33.181113": {
+ "run_id": 36184,
+ "run_time": 0.022527,
+ "status": "success"
+ },
+ "2015-11-03T04:31:31.477353": {
+ "run_id": 39357,
+ "run_time": 0.025355,
+ "status": "success"
+ },
+ "2015-11-03T04:32:00.665192": {
+ "run_id": 97960,
+ "run_time": 0.057353,
+ "status": "success"
+ },
+ "2015-11-03T05:50:08.163248": {
+ "run_id": 107759,
+ "run_time": 0.019159,
+ "status": "success"
+ },
+ "2015-11-03T05:54:24.671860": {
+ "run_id": 52817,
+ "run_time": 0.019954,
+ "status": "success"
+ },
+ "2015-11-03T05:56:32.810519": {
+ "run_id": 102524,
+ "run_time": 0.020218,
+ "status": "success"
+ },
+ "2015-11-03T06:04:45.906773": {
+ "run_id": 195744,
+ "run_time": 0.018326,
+ "status": "success"
+ },
+ "2015-11-03T06:09:37.574811": {
+ "run_id": 23657,
+ "run_time": 0.013177,
+ "status": "success"
+ },
+ "2015-11-03T06:12:13.747453": {
+ "run_id": 118887,
+ "run_time": 0.018813,
+ "status": "success"
+ },
+ "2015-11-03T06:15:47.237307": {
+ "run_id": 181329,
+ "run_time": 0.016679,
+ "status": "success"
+ },
+ "2015-11-03T07:29:10.025522": {
+ "run_id": 201291,
+ "run_time": 0.021449,
+ "status": "success"
+ },
+ "2015-11-03T07:35:34.205409": {
+ "run_id": 132286,
+ "run_time": 0.017252,
+ "status": "success"
+ },
+ "2015-11-03T07:42:53.707987": {
+ "run_id": 69496,
+ "run_time": 0.013556,
+ "status": "success"
+ },
+ "2015-11-03T07:46:46.336541": {
+ "run_id": 180341,
+ "run_time": 0.054122,
+ "status": "success"
+ },
+ "2015-11-03T08:10:24.634094": {
+ "run_id": 16412,
+ "run_time": 0.019053,
+ "status": "success"
+ },
+ "2015-11-03T08:34:50.675936": {
+ "run_id": 101477,
+ "run_time": 0.013883,
+ "status": "success"
+ },
+ "2015-11-03T09:00:31.808132": {
+ "run_id": 148665,
+ "run_time": 0.018268,
+ "status": "success"
+ },
+ "2015-11-03T09:18:43.394218": {
+ "run_id": 185587,
+ "run_time": 0.059416,
+ "status": "success"
+ },
+ "2015-11-03T09:22:28.400289": {
+ "run_id": 76945,
+ "run_time": 0.025145,
+ "status": "success"
+ },
+ "2015-11-03T09:27:15.679960": {
+ "run_id": 97261,
+ "run_time": 0.014526,
+ "status": "success"
+ },
+ "2015-11-03T09:35:02.628764": {
+ "run_id": 67952,
+ "run_time": 0.020944,
+ "status": "success"
+ },
+ "2015-11-03T09:57:34.905081": {
+ "run_id": 78685,
+ "run_time": 0.012768,
+ "status": "success"
+ },
+ "2015-11-03T10:00:32.490034": {
+ "run_id": 28595,
+ "run_time": 0.014158,
+ "status": "success"
+ },
+ "2015-11-03T10:01:26.971477": {
+ "run_id": 140094,
+ "run_time": 0.016267,
+ "status": "success"
+ },
+ "2015-11-03T10:04:35.688114": {
+ "run_id": 139786,
+ "run_time": 0.038287,
+ "status": "success"
+ },
+ "2015-11-03T10:11:49.791995": {
+ "run_id": 193717,
+ "run_time": 0.018484,
+ "status": "success"
+ },
+ "2015-11-03T10:15:05.760876": {
+ "run_id": 83089,
+ "run_time": 0.020801,
+ "status": "success"
+ },
+ "2015-11-03T10:15:21.956085": {
+ "run_id": 62546,
+ "run_time": 0.01775,
+ "status": "success"
+ },
+ "2015-11-03T10:57:01.512602": {
+ "run_id": 194498,
+ "run_time": 0.016412,
+ "status": "success"
+ },
+ "2015-11-03T10:57:48.425003": {
+ "run_id": 110810,
+ "run_time": 0.024954,
+ "status": "success"
+ },
+ "2015-11-03T11:01:29.137476": {
+ "run_id": 87102,
+ "run_time": 0.012801,
+ "status": "success"
+ },
+ "2015-11-03T11:04:37.643810": {
+ "run_id": 60972,
+ "run_time": 0.019069,
+ "status": "success"
+ },
+ "2015-11-03T12:34:30.897672": {
+ "run_id": 165405,
+ "run_time": 0.016476,
+ "status": "success"
+ },
+ "2015-11-03T12:39:21.374857": {
+ "run_id": 10530,
+ "run_time": 0.016794,
+ "status": "success"
+ },
+ "2015-11-03T12:41:12.916698": {
+ "run_id": 110916,
+ "run_time": 0.02208,
+ "status": "success"
+ },
+ "2015-11-03T12:42:46.857261": {
+ "run_id": 81160,
+ "run_time": 0.018877,
+ "status": "success"
+ },
+ "2015-11-03T12:43:12.507827": {
+ "run_id": 11804,
+ "run_time": 0.014681,
+ "status": "success"
+ },
+ "2015-11-03T14:43:30.019390": {
+ "run_id": 63952,
+ "run_time": 0.02087,
+ "status": "success"
+ },
+ "2015-11-03T14:43:48.540687": {
+ "run_id": 13796,
+ "run_time": 0.016039,
+ "status": "success"
+ },
+ "2015-11-03T14:45:06.369415": {
+ "run_id": 11275,
+ "run_time": 0.022614,
+ "status": "success"
+ },
+ "2015-11-03T14:46:43.896246": {
+ "run_id": 52460,
+ "run_time": 0.021359,
+ "status": "success"
+ },
+ "2015-11-03T14:50:28.101158": {
+ "run_id": 93685,
+ "run_time": 0.01493,
+ "status": "success"
+ },
+ "2015-11-03T14:55:55.947335": {
+ "run_id": 57133,
+ "run_time": 0.01425,
+ "status": "success"
+ },
+ "2015-11-03T15:05:24.164350": {
+ "run_id": 18078,
+ "run_time": 0.01625,
+ "status": "success"
+ },
+ "2015-11-03T15:07:08.534488": {
+ "run_id": 59372,
+ "run_time": 0.027877,
+ "status": "success"
+ },
+ "2015-11-03T15:09:22.890091": {
+ "run_id": 23359,
+ "run_time": 0.017697,
+ "status": "success"
+ },
+ "2015-11-03T15:10:29.480401": {
+ "run_id": 63121,
+ "run_time": 0.016415,
+ "status": "success"
+ },
+ "2015-11-03T15:16:05.852811": {
+ "run_id": 202160,
+ "run_time": 0.05509,
+ "status": "success"
+ },
+ "2015-11-03T15:21:50.985273": {
+ "run_id": 141944,
+ "run_time": 0.014155,
+ "status": "success"
+ },
+ "2015-11-03T15:22:29.186902": {
+ "run_id": 139688,
+ "run_time": 0.019822,
+ "status": "success"
+ },
+ "2015-11-03T15:22:37.539778": {
+ "run_id": 9571,
+ "run_time": 0.016629,
+ "status": "success"
+ },
+ "2015-11-03T15:23:53.595471": {
+ "run_id": 190988,
+ "run_time": 0.048468,
+ "status": "success"
+ },
+ "2015-11-03T15:24:04.019090": {
+ "run_id": 124183,
+ "run_time": 0.029403,
+ "status": "success"
+ },
+ "2015-11-03T15:27:15.516271": {
+ "run_id": 174303,
+ "run_time": 0.018184,
+ "status": "success"
+ },
+ "2015-11-03T15:27:43.282353": {
+ "run_id": 154442,
+ "run_time": 0.0218,
+ "status": "success"
+ },
+ "2015-11-03T15:29:51.005086": {
+ "run_id": 47251,
+ "run_time": 0.038698,
+ "status": "success"
+ },
+ "2015-11-03T15:30:12.128262": {
+ "run_id": 80943,
+ "run_time": 0.016783,
+ "status": "success"
+ },
+ "2015-11-03T15:31:01.689603": {
+ "run_id": 71316,
+ "run_time": 0.016032,
+ "status": "success"
+ },
+ "2015-11-03T15:31:34.008205": {
+ "run_id": 161033,
+ "run_time": 0.020854,
+ "status": "success"
+ },
+ "2015-11-03T15:32:16.297289": {
+ "run_id": 102911,
+ "run_time": 0.01468,
+ "status": "success"
+ },
+ "2015-11-03T15:32:51.302916": {
+ "run_id": 203616,
+ "run_time": 0.017706,
+ "status": "success"
+ },
+ "2015-11-03T15:39:38.353772": {
+ "run_id": 200742,
+ "run_time": 0.068364,
+ "status": "success"
+ },
+ "2015-11-03T15:41:06.705236": {
+ "run_id": 148320,
+ "run_time": 0.020857,
+ "status": "success"
+ },
+ "2015-11-03T15:42:04.599467": {
+ "run_id": 9951,
+ "run_time": 0.018137,
+ "status": "success"
+ },
+ "2015-11-03T15:45:51.002130": {
+ "run_id": 2153,
+ "run_time": 0.020568,
+ "status": "success"
+ },
+ "2015-11-03T15:50:54.137488": {
+ "run_id": 127138,
+ "run_time": 0.023681,
+ "status": "success"
+ }
+ }
+ }
+ }
+};
diff --git a/test/e2e/routes_spec.js b/test/e2e/routes_spec.js
index f6720838..0ea8927d 100644
--- a/test/e2e/routes_spec.js
+++ b/test/e2e/routes_spec.js
@@ -49,8 +49,22 @@ describe('E2E: Routes', function() {
expect(element(by.css(selector)).isPresent()).toBe(true);
});
+ it('should have a single test route', function() {
+ mock(['config', 'test_project']);
+
+ browser.get('#/test/tempest.api.volume.test_qos.QosSpecsV2TestJSON.test_get_qos');
+
+ // route should be defined (will redirect to / if not)
+ expect(browser.getLocationAbsUrl()).toMatch('/test/tempest.api.volume.' +
+ 'test_qos.QosSpecsV2TestJSON.test_get_qos');
+ // data should actually be requested (no request if error)
+ expect(mock.requestsMade()).toContain(jasmine.objectContaining({
+ url: 'http://localhost:5000/test_runs/tempest.api.volume.test_qos.' +
+ 'QosSpecsV2TestJSON.test_get_qos',
+ method: 'JSONP'
+ }));
+ });
afterEach(function() {
mock.teardown();
});
-
});