123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- /**
- * 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/summary');
- var batchUtils = require('utils/batch_scheduled_requests');
- describe('App.MainServiceInfoSummaryView', function() {
- var view = App.MainServiceInfoSummaryView.create({
- monitorsLiveTextView: Em.View.create(),
- controller: Em.Object.create({
- content: Em.Object.create({
- id: 'HDFS',
- serviceName: 'HDFS',
- hostComponents: []
- }),
- getActiveWidgetLayout: Em.K
- }),
- alertsController: Em.Object.create(),
- service: Em.Object.create()
- });
- App.TestAliases.testAsComputedAlias(view, 'servicesHaveClients', 'App.services.hasClient', 'boolean');
- App.TestAliases.testAsComputedAlias(view, 'serviceName', 'service.serviceName', 'string');
- App.TestAliases.testAsComputedAlias(view, 'alertsCount', 'controller.content.alertsCount', 'number');
- App.TestAliases.testAsComputedAlias(view, 'hasCriticalAlerts', 'controller.content.hasCriticalAlerts', 'boolean');
- describe('#servers', function () {
- it('services shouldn\'t have servers except FLUME and ZOOKEEPER', function () {
- expect(view.get('servers')).to.be.empty;
- });
- it('if one server exists then first server should have isComma and isAnd property false', function () {
- view.set('controller.content', Em.Object.create({
- id: 'ZOOKEEPER',
- serviceName: 'ZOOKEEPER',
- hostComponents: [
- Em.Object.create({
- displayName: '',
- isMaster: true
- })
- ]
- }));
- expect(view.get('servers').objectAt(0).isComma).to.equal(false);
- expect(view.get('servers').objectAt(0).isAnd).to.equal(false);
- });
- it('if more than one servers exist then first server should have isComma - true and isAnd - false', function () {
- view.set('controller.content', Em.Object.create({
- id: 'ZOOKEEPER',
- serviceName: 'ZOOKEEPER',
- hostComponents: [
- Em.Object.create({
- displayName: '',
- isMaster: true
- }),
- Em.Object.create({
- displayName: '',
- isMaster: true
- })
- ]
- }));
- expect(view.get('servers').objectAt(0).isComma).to.equal(true);
- expect(view.get('servers').objectAt(0).isAnd).to.equal(false);
- expect(view.get('servers').objectAt(1).isComma).to.equal(false);
- expect(view.get('servers').objectAt(1).isAnd).to.equal(false);
- });
- it('if more than two servers exist then second server should have isComma - false and isAnd - true', function () {
- view.set('controller.content', Em.Object.create({
- id: 'ZOOKEEPER',
- serviceName: 'ZOOKEEPER',
- hostComponents: [
- Em.Object.create({
- displayName: '',
- isMaster: true
- }),
- Em.Object.create({
- displayName: '',
- isMaster: true
- }),
- Em.Object.create({
- displayName: '',
- isMaster: true
- })
- ]
- }));
- expect(view.get('servers').objectAt(0).isComma).to.equal(true);
- expect(view.get('servers').objectAt(0).isAnd).to.equal(false);
- expect(view.get('servers').objectAt(1).isComma).to.equal(false);
- expect(view.get('servers').objectAt(1).isAnd).to.equal(true);
- expect(view.get('servers').objectAt(2).isComma).to.equal(false);
- expect(view.get('servers').objectAt(2).isAnd).to.equal(false);
- });
- });
- describe('#hasAlertDefinitions', function () {
- beforeEach(function () {
- sinon.stub(App.AlertDefinition, 'find', function () {
- return [
- {
- serviceName: 'HDFS'
- },
- {
- serviceName: 'YARN'
- }
- ];
- });
- });
- afterEach(function () {
- App.AlertDefinition.find.restore();
- });
- it('should return true if at least one alert definition for this service exists', function () {
- view.set('controller.content', Em.Object.create({
- serviceName: 'HDFS'
- }));
- expect(view.get('hasAlertDefinitions')).to.be.true;
- it('should return false if there is no alert definition for this service', function () {
- view.set('controller.content', Em.Object.create({
- serviceName: 'ZOOKEEPER'
- }));
- expect(view.get('hasAlertDefinitions')).to.be.false;
- });
- })
- });
- describe('#didInsertElement', function () {
- var cases = [
- {
- serviceName: 'STORM',
- isStormMetricsSupported: false,
- isConstructGraphObjectsCalled: false,
- title: 'Storm, metrics not supported'
- },
- {
- serviceName: 'STORM',
- isStormMetricsSupported: true,
- isConstructGraphObjectsCalled: true,
- title: 'Storm, metrics supported'
- },
- {
- serviceName: 'HDFS',
- isConstructGraphObjectsCalled: true,
- title: 'not Storm'
- }
- ];
- beforeEach(function () {
- sinon.stub(view, 'constructGraphObjects', Em.K);
- this.mock = sinon.stub(App, 'get');
- });
- afterEach(function () {
- view.constructGraphObjects.restore();
- this.mock.restore();
- });
- cases.forEach(function (item) {
- it(item.title, function () {
- view.set('controller.content.serviceName', item.serviceName);
- this.mock.withArgs('isStormMetricsSupported').returns(item.isStormMetricsSupported);
- view.didInsertElement();
- expect(view.constructGraphObjects.calledOnce).to.equal(item.isConstructGraphObjectsCalled);
- });
- });
- });
- describe.skip('#setTimeRange', function () {
- var cases = [
- {
- currentTimeRangeIndex: 0,
- isServiceMetricLoaded: false,
- graphIds: [],
- title: 'no event passed'
- },
- {
- event: {},
- currentTimeRangeIndex: 0,
- isServiceMetricLoaded: false,
- graphIds: [],
- title: 'no event context passed'
- },
- {
- event: {
- context: {
- index: 1
- }
- },
- currentTimeRangeIndex: 1,
- isServiceMetricLoaded: false,
- graphIds: [],
- title: 'no service name set'
- },
- {
- event: {
- context: {
- index: 2
- }
- },
- serviceName: 'HDFS',
- currentTimeRangeIndex: 2,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-hdfs-space-utilization', 'service-metrics-hdfs-file-operations',
- 'service-metrics-hdfs-block-status', 'service-metrics-hdfs-io', 'service-metrics-hdfs-rpc'
- ],
- [
- 'service-metrics-hdfs-gc', 'service-metrics-hdfs-jvm-heap', 'service-metrics-hdfs-jvm-threads'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 3
- }
- },
- serviceName: 'YARN',
- currentTimeRangeIndex: 3,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-yarn-queue-allocated', 'service-metrics-yarn-queue-memory-resource',
- 'service-metrics-yarn-queue-allocated-container', 'service-metrics-yarn-node-manager-statuses',
- 'service-metrics-yarn-apps-current-states'
- ],
- [
- 'service-metrics-yarn-apps-finished-states', 'service-metrics-yarn-rpc', 'service-metrics-yarn-gc',
- 'service-metrics-yarn-jvm-threads', 'service-metrics-yarn-jvm-heap'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 4
- }
- },
- serviceName: 'HBASE',
- currentTimeRangeIndex: 4,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-hbase-cluster-requests', 'service-metrics-hbase-regionserver-rw-requests',
- 'service-metrics-hbase-regionserver-regions', 'service-metrics-hbase-regionserver-queuesize',
- 'service-metrics-hbase-hlog-split-time'
- ],
- [
- 'service-metrics-hbase-hlog-split-size'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 5
- }
- },
- serviceName: 'AMBARI_METRICS',
- currentTimeRangeIndex: 5,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-ambari-metrics-master-average-load',
- 'service-metrics-ambari-metrics-region-server-store-files',
- 'service-metrics-ambari-metrics-region-server-regions',
- 'service-metrics-ambari-metrics-region-server-requests',
- 'service-metrics-ambari-metrics-region-server-block-cache-hit-percent'
- ],
- [
- 'service-metrics-ambari-metrics-region-server-compaction-queue-size'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 6
- }
- },
- serviceName: 'FLUME',
- currentTimeRangeIndex: 6,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-flume-channel-size-mma', 'service-metrics-flume-channel-size-sum',
- 'service-metrics-flume-incoming_mma', 'service-metrics-flume-incoming_sum',
- 'service-metrics-flume-outgoing_mma'
- ],
- [
- 'service-metrics-flume-outgoing_sum'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 7
- }
- },
- serviceName: 'STORM',
- currentTimeRangeIndex: 7,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-storm-supervisor-allocated', 'service-metrics-storm-executors',
- 'service-metrics-storm-topologies', 'service-metrics-storm-tasks'
- ]
- ]
- },
- {
- event: {
- context: {
- index: 8
- }
- },
- serviceName: 'KAFKA',
- chunkSize: 4,
- currentTimeRangeIndex: 8,
- isServiceMetricLoaded: true,
- graphIds: [
- [
- 'service-metrics-kafka-broker-topic-metrics', 'service-metrics-kafka-controller-metrics',
- 'service-metrics-kafka-controler-status-metrics', 'service-metrics-kafka-replica-manager-metrics'
- ],
- [
- 'service-metrics-kafka-log-metrics', 'service-metrics-kafka-replica-fetcher-metrics'
- ]
- ]
- }
- ];
- beforeEach(function () {
- sinon.stub(view, 'postUserPref', Em.K);
- view.setProperties({
- chunkSize: 5,
- currentTimeRangeIndex: 0,
- isServiceMetricLoaded: false,
- serviceMetricGraphs: []
- });
- });
- afterEach(function () {
- view.postUserPref.restore();
- });
- cases.forEach(function (item) {
- it(item.serviceName || item.title, function () {
- view.set('chunkSize', Em.isNone(item.chunkSize) ? 5 : item.chunkSize);
- view.set('service.serviceName', item.serviceName);
- view.setTimeRange(item.event);
- var graphIndices = [],
- graphIds = view.get('serviceMetricGraphs').map(function (graphs) {
- return graphs.map(function (graph) {
- var graphView = graph.create();
- graphIndices.push(graphView.get('currentTimeIndex'));
- return graphView.get('id');
- });
- });
- expect(view.get('currentTimeRangeIndex')).to.equal(item.currentTimeRangeIndex);
- expect(view.get('isServiceMetricLoaded')).to.equal(item.isServiceMetricLoaded);
- if (item.event && item.event.context && item.serviceName) {
- expect(graphIndices.uniq()).to.eql([item.currentTimeRangeIndex]);
- }
- expect(graphIds).to.eql(item.graphIds);
- });
- });
- });
- describe("#restartAllStaleConfigComponents", function () {
- it("trigger restartAllServiceHostComponents", function () {
- var view = App.MainServiceInfoSummaryView.create({
- controller: Em.Object.create({
- content: {
- serviceName: "HDFS"
- },
- getActiveWidgetLayout: Em.K
- }),
- service: Em.Object.create({
- displayName: 'HDFS'
- })
- });
- sinon.stub(batchUtils, "restartAllServiceHostComponents", Em.K);
- view.restartAllStaleConfigComponents().onPrimary();
- expect(batchUtils.restartAllServiceHostComponents.calledOnce).to.equal(true);
- batchUtils.restartAllServiceHostComponents.restore();
- });
- it("trigger check last check point warning before triggering restartAllServiceHostComponents", function () {
- var view = App.MainServiceInfoSummaryView.create({
- controller: Em.Object.create({
- content: {
- serviceName: "HDFS",
- hostComponents: [{
- componentName: 'NAMENODE',
- workStatus: 'STARTED'
- }],
- restartRequiredHostsAndComponents: {
- "host1": ['NameNode'],
- "host2": ['DataNode', 'ZooKeeper']
- }
- },
- getActiveWidgetLayout: Em.K
- }),
- service: Em.Object.create({
- displayName: 'HDFS'
- })
- });
- var mainServiceItemController = App.MainServiceItemController.create({});
- sinon.stub(mainServiceItemController, 'checkNnLastCheckpointTime', function() {
- return true;
- });
- sinon.stub(App.router, 'get', function(k) {
- if ('mainServiceItemController' === k) {
- return mainServiceItemController;
- }
- return Em.get(App.router, k);
- });
- view.restartAllStaleConfigComponents();
- expect(mainServiceItemController.checkNnLastCheckpointTime.calledOnce).to.equal(true);
- mainServiceItemController.checkNnLastCheckpointTime.restore();
- App.router.get.restore();
- });
- });
- });
|