You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/04/11 13:09:09 UTC
git commit: AMBARI-5438 Add unit tests to configuration and update
controllers. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk 03e04a684 -> 50ee0ff6a
AMBARI-5438 Add unit tests to configuration and update controllers. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/50ee0ff6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/50ee0ff6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/50ee0ff6
Branch: refs/heads/trunk
Commit: 50ee0ff6aacfaeee971606b1b1be50af722b47ed
Parents: 03e04a6
Author: atkach <at...@hortonworks.com>
Authored: Fri Apr 11 14:05:18 2014 +0300
Committer: atkach <at...@hortonworks.com>
Committed: Fri Apr 11 14:05:18 2014 +0300
----------------------------------------------------------------------
ambari-web/app/assets/test/tests.js | 2 +
.../controllers/global/cluster_controller.js | 3 +-
.../global/configuration_controller.js | 2 -
.../app/controllers/global/update_controller.js | 127 ++++-----
.../global/configuration_controller_test.js | 134 ++++++++++
.../global/update_controller_test.js | 259 +++++++++++++++++++
6 files changed, 462 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index 4390c02..40f1e25 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -23,6 +23,8 @@ require('test/app_test');
require('test/data/HDP2/site_properties_test');
require('test/controllers/global/background_operations_test');
require('test/controllers/global/cluster_controller_test');
+require('test/controllers/global/update_controller_test');
+require('test/controllers/global/configuration_controller_test');
require('test/controllers/main/app_contoller_test');
require('test/controllers/main/admin/cluster_test');
require('test/controllers/main/admin/security/add/addSecurity_controller_test');
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 7bea318..657b7a1 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -353,8 +353,7 @@ App.ClusterController = Em.Controller.extend({
self.updateLoadStatus('componentConfigs');
}
}, true);
- App.router.get('updateController').updateServiceMetric(function () {
- }, true);
+ App.router.get('updateController').updateServiceMetric(function () {});
});
});
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/app/controllers/global/configuration_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/configuration_controller.js b/ambari-web/app/controllers/global/configuration_controller.js
index 5aa410d..3e01572 100644
--- a/ambari-web/app/controllers/global/configuration_controller.js
+++ b/ambari-web/app/controllers/global/configuration_controller.js
@@ -80,6 +80,4 @@ App.ConfigurationController = Em.Controller.extend({
App.db.setConfigs(storedConfigs);
return loadedConfigs;
}
-
-
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 227b4ee..66f6dea 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -19,24 +19,27 @@
var App = require('app');
App.UpdateController = Em.Controller.extend({
- name:'updateController',
- isUpdated:false,
- cluster:null,
+ name: 'updateController',
+ isUpdated: false,
+ cluster: null,
isWorking: false,
timeIntervalId: null,
- clusterName:function () {
+ clusterName: function () {
return App.router.get('clusterController.clusterName');
}.property('App.router.clusterController.clusterName'),
+ location: function () {
+ return App.router.get('location.lastSetURL');
+ }.property('App.router.location.lastSetURL'),
- getUrl:function (testUrl, url) {
+ getUrl: function (testUrl, url) {
return (App.testMode) ? testUrl : App.apiPrefix + '/clusters/' + this.get('clusterName') + url;
},
/**
* Start polling, when <code>isWorking</code> become true
*/
- updateAll:function(){
- if(this.get('isWorking')) {
+ updateAll: function () {
+ if (this.get('isWorking')) {
App.updater.run(this, 'updateServices', 'isWorking');
App.updater.run(this, 'updateHostConditionally', 'isWorking');
App.updater.run(this, 'updateServiceMetricConditionally', 'isWorking', App.componentsUpdateInterval);
@@ -55,8 +58,7 @@ App.UpdateController = Em.Controller.extend({
* @param callback
*/
updateHostConditionally: function (callback) {
- var location = App.router.get('location.lastSetURL');
- if (/\/main\/(hosts|charts\/heatmap).*/.test(location)) {
+ if (/\/main\/(hosts|charts\/heatmap).*/.test(this.get('location'))) {
this.updateHost(callback);
} else {
callback();
@@ -69,19 +71,18 @@ App.UpdateController = Em.Controller.extend({
* /main/services/*
* @param callback
*/
- updateServiceMetricConditionally: function(callback){
- var location = App.router.get('location.lastSetURL');
- if (/\/main\/(dashboard|services).*/.test(location)) {
+ updateServiceMetricConditionally: function (callback) {
+ if (/\/main\/(dashboard|services).*/.test(this.get('location'))) {
this.updateServiceMetric(callback);
} else {
callback();
}
},
- updateHost:function(callback) {
+ updateHost: function (callback) {
var testUrl = App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json' : '/data/hosts/hosts.json';
var hostsUrl = this.getUrl(testUrl, '/hosts?fields=Hosts/host_name,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/disk_info,Hosts/maintenance_state,' +
- 'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,metrics/memory/mem_total,metrics/memory/mem_free'+
+ 'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,metrics/memory/mem_total,metrics/memory/mem_free' +
'&minimal_response=true');
App.HttpClient.get(hostsUrl, App.hostsMapper, {
complete: callback
@@ -89,64 +90,35 @@ App.UpdateController = Em.Controller.extend({
},
graphs: [],
graphsUpdate: function (callback) {
- var existedGraphs = [];
- this.get('graphs').forEach(function (_graph) {
- var view = Em.View.views[_graph.id];
- if (view) {
- existedGraphs.push(_graph);
- //console.log('updated graph', _graph.name);
+ var existedGraphs = [];
+ this.get('graphs').forEach(function (_graph) {
+ var view = Em.View.views[_graph.id];
+ if (view) {
+ existedGraphs.push(_graph);
+ //console.log('updated graph', _graph.name);
+ view.loadData();
+ //if graph opened as modal popup update it to
+ if ($(".modal-graph-line .modal-body #" + _graph.popupId + "-container-popup").length) {
view.loadData();
- //if graph opened as modal popup update it to
- if($(".modal-graph-line .modal-body #" + _graph.popupId + "-container-popup").length) {
- view.loadData();
- }
}
- });
+ }
+ });
callback();
this.set('graphs', existedGraphs);
},
/**
- * Updates the services information.
+ * Updates the services information.
*
* @param callback
- * @param isInitialLoad If true, only basic information is loaded.
*/
- updateServiceMetric: function (callback, isInitialLoad) {
+ updateServiceMetric: function (callback) {
var self = this;
self.set('isUpdated', false);
- var conditionalFields = [];
- var initialFields = [];
- var serviceSpecificParams = {
- 'FLUME': "host_components/metrics/flume/flume",
- 'YARN': "host_components/metrics/yarn/Queue," +
- "ServiceComponentInfo/rm_metrics/cluster/activeNMcount," +
- "ServiceComponentInfo/rm_metrics/cluster/unhealthyNMcount," +
- "ServiceComponentInfo/rm_metrics/cluster/rebootedNMcount," +
- "ServiceComponentInfo/rm_metrics/cluster/decommissionedNMcount",
- 'HBASE': "host_components/metrics/hbase/master/IsActiveMaster," +
- "ServiceComponentInfo/MasterStartTime," +
- "ServiceComponentInfo/MasterActiveTime," +
- "ServiceComponentInfo/AverageLoad," +
- "ServiceComponentInfo/Revision," +
- "ServiceComponentInfo/RegionsInTransition",
- 'MAPREDUCE': "ServiceComponentInfo/AliveNodes," +
- "ServiceComponentInfo/GrayListedNodes," +
- "ServiceComponentInfo/BlackListedNodes," +
- "ServiceComponentInfo/jobtracker/*,",
- 'STORM': "metrics/api/cluster/summary,"
- };
- var services = App.cache['services'];
- services.forEach(function (service) {
- var urlParams = serviceSpecificParams[service.ServiceInfo.service_name];
- if (urlParams) {
- conditionalFields.push(urlParams);
- }
- });
+ var conditionalFields = this.getConditionalFields();
var conditionalFieldsString = conditionalFields.length > 0 ? ',' + conditionalFields.join(',') : '';
- var initialFieldsString = initialFields.length > 0 ? ',' + initialFields.join(',') : '';
- var testUrl = App.get('isHadoop2Stack') ? '/data/dashboard/HDP2/master_components.json':'/data/dashboard/services.json';
+ var testUrl = App.get('isHadoop2Stack') ? '/data/dashboard/HDP2/master_components.json' : '/data/dashboard/services.json';
var realUrl = '/components/?ServiceComponentInfo/category=MASTER&fields=' +
'ServiceComponentInfo/Version,' +
@@ -175,16 +147,50 @@ App.UpdateController = Em.Controller.extend({
conditionalFieldsString +
'&minimal_response=true';
- var servicesUrl = isInitialLoad ? this.getUrl(testUrl, realUrl + initialFieldsString) : this.getUrl(testUrl, realUrl);
+ var servicesUrl = this.getUrl(testUrl, realUrl);
callback = callback || function () {
self.set('isUpdated', true);
};
App.HttpClient.get(servicesUrl, App.serviceMetricsMapper, {
- complete: function(){
+ complete: function () {
callback();
}
});
},
+ /**
+ * construct conditional parameters of query, depending on which services are installed
+ * @return {Array}
+ */
+ getConditionalFields: function () {
+ var conditionalFields = [];
+ var serviceSpecificParams = {
+ 'FLUME': "host_components/metrics/flume/flume",
+ 'YARN': "host_components/metrics/yarn/Queue," +
+ "ServiceComponentInfo/rm_metrics/cluster/activeNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/unhealthyNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/rebootedNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/decommissionedNMcount",
+ 'HBASE': "host_components/metrics/hbase/master/IsActiveMaster," +
+ "ServiceComponentInfo/MasterStartTime," +
+ "ServiceComponentInfo/MasterActiveTime," +
+ "ServiceComponentInfo/AverageLoad," +
+ "ServiceComponentInfo/Revision," +
+ "ServiceComponentInfo/RegionsInTransition",
+ 'MAPREDUCE': "ServiceComponentInfo/AliveNodes," +
+ "ServiceComponentInfo/GrayListedNodes," +
+ "ServiceComponentInfo/BlackListedNodes," +
+ "ServiceComponentInfo/jobtracker/*,",
+ 'STORM': "metrics/api/cluster/summary,"
+ };
+ var services = App.cache['services'];
+ services.forEach(function (service) {
+ var urlParams = serviceSpecificParams[service.ServiceInfo.service_name];
+ if (urlParams) {
+ conditionalFields.push(urlParams);
+ }
+ });
+ return conditionalFields;
+ },
updateServices: function (callback) {
var testUrl = '/data/services/HDP2/services.json';
var componentConfigUrl = this.getUrl(testUrl, '/services?fields=alerts/summary,ServiceInfo/state,ServiceInfo/maintenance_state&minimal_response=true');
@@ -199,5 +205,4 @@ App.UpdateController = Em.Controller.extend({
complete: callback
});
}
-
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/test/controllers/global/configuration_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/configuration_controller_test.js b/ambari-web/test/controllers/global/configuration_controller_test.js
new file mode 100644
index 0000000..5baac0e
--- /dev/null
+++ b/ambari-web/test/controllers/global/configuration_controller_test.js
@@ -0,0 +1,134 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 App = require('app');
+require('controllers/global/configuration_controller');
+
+
+describe('App.ConfigurationController', function () {
+ var controller = App.ConfigurationController.create();
+
+ describe('#checkTagsChanges()', function () {
+ var testCases = [
+ {
+ title: 'Tags haven\'t been uploaded',
+ content: {
+ tags: [],
+ storedTags: []
+ },
+ result: false
+ },
+ {
+ title: 'New tag uploaded',
+ content: {
+ tags: [
+ {
+ siteName: 'site1',
+ tagName: 1
+ }
+ ],
+ storedTags: []
+ },
+ result: true
+ },
+ {
+ title: 'Existing tag with with new tagName',
+ content: {
+ tags: [
+ {
+ siteName: 'site1',
+ tagName: 1
+ }
+ ],
+ storedTags: [
+ {
+ siteName: 'site1',
+ tagName: 2
+ }
+ ]
+ },
+ result: true
+ },
+ {
+ title: 'Tags with different tagNames',
+ content: {
+ tags: [
+ {
+ siteName: 'site1',
+ tagName: 1
+ }
+ ],
+ storedTags: [
+ {
+ siteName: 'site2',
+ tagName: 1
+ }
+ ]
+ },
+ result: true
+ },
+ {
+ title: 'One new tag uploaded',
+ content: {
+ tags: [
+ {
+ siteName: 'site2',
+ tagName: 1
+ },
+ {
+ siteName: 'site1',
+ tagName: 1
+ }
+ ],
+ storedTags: [
+ {
+ siteName: 'site2',
+ tagName: 1
+ }
+ ]
+ },
+ result: true
+ },
+ {
+ title: 'Tags haven\'t been changed',
+ content: {
+ tags: [
+ {
+ siteName: 'site2',
+ tagName: 1
+ }
+ ],
+ storedTags: [
+ {
+ siteName: 'site2',
+ tagName: 1
+ }
+ ]
+ },
+ result: false
+ }
+ ];
+
+ testCases.forEach(function (test) {
+ it(test.title, function () {
+ expect(controller.checkTagsChanges(test.content.tags, test.content.storedTags)).to.equal(test.result);
+ });
+ });
+ });
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/50ee0ff6/ambari-web/test/controllers/global/update_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/update_controller_test.js b/ambari-web/test/controllers/global/update_controller_test.js
new file mode 100644
index 0000000..79374c5
--- /dev/null
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -0,0 +1,259 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 App = require('app');
+require('controllers/global/update_controller');
+
+
+describe('App.UpdateController', function () {
+ var controller = App.UpdateController.create({
+ clusterName: '',
+ location: '',
+ updateServiceMetric: function(){}
+ });
+
+ describe('#getUrl()', function () {
+
+ it('testMode = true', function () {
+ App.set('testMode', true);
+ expect(controller.getUrl('test', '/real')).to.equal('test');
+ });
+
+ it('testMode = false', function () {
+ App.set('testMode', false);
+ expect(controller.getUrl('test', '/real')).to.equal('/api/v1/clusters//real');
+ });
+
+ it('testMode = false', function () {
+ App.set('testMode', false);
+ controller.set('clusterName', 'mycluster');
+ expect(controller.getUrl('test', '/real')).to.equal('/api/v1/clusters/mycluster/real');
+ });
+ });
+
+ describe('#updateAll()', function () {
+
+ beforeEach(function () {
+ sinon.spy(App.updater, 'run');
+ });
+ afterEach(function () {
+ App.updater.run.restore();
+ });
+ it('isWorking = false', function () {
+ controller.set('isWorking', false);
+ expect(App.updater.run.called).to.equal(false);
+ });
+
+ it('isWorking = true, App.supports.hostOverrides = false', function () {
+ App.supports.hostOverrides = false;
+ controller.set('isWorking', true);
+ expect(App.updater.run.callCount).to.equal(4);
+ controller.set('isWorking', false);
+ });
+
+ it('isWorking = true, App.supports.hostOverrides = true', function () {
+ App.supports.hostOverrides = true;
+ controller.set('isWorking', true);
+ expect(App.updater.run.callCount).to.equal(5);
+ });
+ });
+
+ describe('#updateHostConditionally()', function () {
+ var context = {
+ callback: function(){}
+ };
+
+ beforeEach(function () {
+ sinon.spy(controller, 'updateHost');
+ sinon.spy(context, 'callback');
+ });
+ afterEach(function () {
+ controller.updateHost.restore();
+ context.callback.restore();
+ });
+
+ it('location is empty', function () {
+ controller.set('location', '');
+ controller.updateHostConditionally(context.callback);
+ expect(controller.updateHost.called).to.equal(false);
+ expect(context.callback.called).to.equal(true);
+ });
+ it('location is "/main/dashboard"', function () {
+ controller.set('location', '/main/dashboard');
+ controller.updateHostConditionally(context.callback);
+ expect(controller.updateHost.called).to.equal(false);
+ expect(context.callback.called).to.equal(true);
+ });
+ it('location is "/main/hosts"', function () {
+ controller.set('location', '/main/hosts');
+ controller.updateHostConditionally(context.callback);
+ expect(controller.updateHost.called).to.equal(true);
+ expect(context.callback.called).to.equal(false);
+ });
+ it('location is "/main/charts/heatmap"', function () {
+ controller.set('location', '/main/charts/heatmap');
+ controller.updateHostConditionally(context.callback);
+ expect(controller.updateHost.called).to.equal(true);
+ expect(context.callback.called).to.equal(false);
+ });
+ it('location is "/main/hosts/host1"', function () {
+ controller.set('location', '/main/hosts/host1');
+ controller.updateHostConditionally(context.callback);
+ expect(controller.updateHost.called).to.equal(true);
+ expect(context.callback.called).to.equal(false);
+ });
+ });
+
+ describe('#updateServiceMetricConditionally()', function () {
+ var context = {
+ callback: function(){}
+ };
+
+ beforeEach(function () {
+ sinon.spy(controller, 'updateServiceMetric');
+ sinon.spy(context, 'callback');
+ });
+ afterEach(function () {
+ controller.updateServiceMetric.restore();
+ context.callback.restore();
+ });
+
+ it('location is empty', function () {
+ controller.set('location', '');
+ controller.updateServiceMetricConditionally(context.callback);
+ expect(controller.updateServiceMetric.called).to.equal(false);
+ expect(context.callback.called).to.equal(true);
+ });
+ it('location is "/main/hosts"', function () {
+ controller.set('location', '/main/hosts');
+ controller.updateServiceMetricConditionally(context.callback);
+ expect(controller.updateServiceMetric.called).to.equal(false);
+ expect(context.callback.called).to.equal(true);
+ });
+ it('location is "/main/dashboard"', function () {
+ controller.set('location', '/main/dashboard');
+ controller.updateServiceMetricConditionally(context.callback);
+ expect(controller.updateServiceMetric.called).to.equal(true);
+ expect(context.callback.called).to.equal(false);
+ });
+ it('location is "/main/services/HDFS"', function () {
+ controller.set('location', '/main/services/HDFS');
+ controller.updateServiceMetricConditionally(context.callback);
+ expect(controller.updateServiceMetric.called).to.equal(true);
+ expect(context.callback.called).to.equal(false);
+ });
+ });
+
+
+ describe('#getConditionalFields()', function () {
+
+ var testCases = [
+ {
+ title: 'No services exist',
+ services: [],
+ result: []
+ },
+ {
+ title: 'HDFS service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'HDFS'
+ }
+ }
+ ],
+ result: []
+ },
+ {
+ title: 'FLUME service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'FLUME'
+ }
+ }
+ ],
+ result: ["host_components/metrics/flume/flume"]
+ },
+ {
+ title: 'YARN service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'YARN'
+ }
+ }
+ ],
+ result: ["host_components/metrics/yarn/Queue," +
+ "ServiceComponentInfo/rm_metrics/cluster/activeNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/unhealthyNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/rebootedNMcount," +
+ "ServiceComponentInfo/rm_metrics/cluster/decommissionedNMcount"]
+ },
+ {
+ title: 'HBASE service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'HBASE'
+ }
+ }
+ ],
+ result: ["host_components/metrics/hbase/master/IsActiveMaster," +
+ "ServiceComponentInfo/MasterStartTime," +
+ "ServiceComponentInfo/MasterActiveTime," +
+ "ServiceComponentInfo/AverageLoad," +
+ "ServiceComponentInfo/Revision," +
+ "ServiceComponentInfo/RegionsInTransition"]
+ },
+ {
+ title: 'MAPREDUCE service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'MAPREDUCE'
+ }
+ }
+ ],
+ result: ["ServiceComponentInfo/AliveNodes," +
+ "ServiceComponentInfo/GrayListedNodes," +
+ "ServiceComponentInfo/BlackListedNodes," +
+ "ServiceComponentInfo/jobtracker/*,"]
+ },
+ {
+ title: 'STORM service',
+ services: [
+ {
+ ServiceInfo: {
+ service_name: 'STORM'
+ }
+ }
+ ],
+ result: ["metrics/api/cluster/summary,"]
+ }
+ ];
+
+ testCases.forEach(function(test){
+ it(test.title, function () {
+ App.cache['services'] = test.services;
+ expect(controller.getConditionalFields()).to.eql(test.result);
+ });
+ });
+ });
+});
\ No newline at end of file