Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
AMBARI-25091 Cover flume metric graphs with unit tests
  • Loading branch information
atkach committed Jan 8, 2019
1 parent 883d95f commit 313178dc562cb8c2fc341b788a6da50b4274a869
Showing 4 changed files with 185 additions and 3 deletions.
@@ -388,6 +388,8 @@ var files = [
'test/views/main/service/info/component_list_view_test',
'test/views/main/service/info/metrics/ambari_metrics/regionserver_base_test',
'test/views/main/service/info/metrics/flume/flume_agent_metrics_section_test',
'test/views/main/service/info/metrics/flume/flume_metric_graph_test',
'test/views/main/service/info/metrics/flume/flume_metric_graphs_test',
'test/views/main/service/info/summary/hdfs/slaves_test',
'test/views/main/service/services/hdfs_test',
'test/views/main/service/services/hbase_test',
@@ -23,12 +23,11 @@ App.MainServiceInfoFlumeGraphsView = App.MainServiceInfoSummaryMetricGraphsView.
serviceMetricGraphs: [],

loadMetrics: function () {
var graphRows = [];
var viewData = this.get('viewData');
if (viewData != null) {
var metricType = viewData.metricType;
var hostName = viewData.agent.get('hostName');
App.ajax.send({
return App.ajax.send({
'name': 'host.host_component.flume.metrics',
'sender': this,
'success': 'onLoadMetricsSuccess',
@@ -37,8 +36,9 @@ App.MainServiceInfoFlumeGraphsView = App.MainServiceInfoSummaryMetricGraphsView.
flumeComponent: metricType
}
});
} else {
return $.Deferred().reject().promise();
}
return graphRows;
}.observes('viewData', 'metricType'),

onLoadMetricsSuccess: function (data) {
@@ -0,0 +1,77 @@
/**
* 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('views/main/service/info/metrics/flume/flume_metric_graph');

describe('App.ChartServiceFlumeMetricGraph', function () {

var view;

beforeEach(function () {
view = App.ChartServiceFlumeMetricGraph.create();
});

describe('#getDataForAjaxRequest', function() {

it('should return url', function() {
view.setProperties({
metricItems: ['metric1'],
metricType: 'type1',
metricName: 'name1',
customStartTime: 1000,
customEndTime: 10000,
currentTimeIndex: 8,
hostName: 'host1'
});

expect(view.getDataForAjaxRequest().url).to.be.equal(
'/api/v1/clusters/c1/hosts/host1/host_components/FLUME_HANDLER?fields=metrics/flume/flume/type1/metric1/name1[1,10,15]'
);
});
});

describe('#getData', function() {

it('should extract data from json', function() {
view.setProperties({
metricType: 'type1',
metricName: 'name1'
});
var json = {
metrics: {
flume: {
flume: {
type1: {
'C1': {
'name1': {data: 'data'}
}
}
}
}
}
};

expect(view.getData(json)).to.be.eql([{
name: 'C1',
data: {data: 'data'}
}]);
});
});

});
@@ -0,0 +1,103 @@
/**
* 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('views/main/service/info/metrics/flume/flume_metric_graphs');
var testHelpers = require('test/helpers');

describe('App.MainServiceInfoFlumeGraphsView', function () {

var view;

beforeEach(function () {
view = App.MainServiceInfoFlumeGraphsView.create();
});

describe('#loadMetrics', function() {

it('App.ajax.send should be called', function() {
view.set('viewData', {
metricType: 'type1',
agent: Em.Object.create({
hostName: 'host1'
})
});
view.loadMetrics();
var ajax = testHelpers.findAjaxRequest('name', 'host.host_component.flume.metrics')[0];
expect(ajax.data).to.be.eql({
hostName: 'host1',
flumeComponent: 'type1'
});
});
});

describe('#didInsertElement', function() {
beforeEach(function() {
sinon.stub(view, 'loadMetrics');
});
afterEach(function() {
view.loadMetrics.restore();
});

it('loadMetrics should be called', function() {
view.didInsertElement();
expect(view.loadMetrics.calledOnce).to.be.true;
});
});

describe('#onLoadMetricsSuccess', function() {
beforeEach(function() {
sinon.stub(App.ChartServiceFlumeMetricGraph, 'extend', function(object) {
return Em.Object.create(object);
});
});
afterEach(function() {
App.ChartServiceFlumeMetricGraph.extend.restore();
});

it('should add metrics to serviceMetricGraphs', function() {
view.set('viewData', {
metricType: 'type1',
agent: Em.Object.create({
hostName: 'host1'
})
});
var data = {
metrics: {
flume: {
flume: {
type1: {
name1: {
metric1: {}
}
}
}
}
}
};
view.onLoadMetricsSuccess(data);
expect(view.get('serviceMetricGraphs')[0][0]).to.be.eql(Em.Object.create({
metricType: 'type1',
metricName: 'metric1',
hostName: 'host1',
metricItems: ['name1']
}));
});
});

});

0 comments on commit 313178d

Please sign in to comment.