blob: 1e89378fff964fe3e4cfd288235444e374d6c220 [file] [log] [blame]
/**
* 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("utils/host_progress_popup");
require("views/common/modal_popup");
describe('App.HostProgressPopupBodyView', function () {
var view, controller;
beforeEach(function () {
controller = Em.Object.create({
setSelectCount: Em.K,
dataSourceController: Em.Object.create({
levelInfo: {},
requestMostRecent: Em.K
}),
refreshRequestScheduleInfo: Em.K,
setBackgroundOperationHeader: Em.K,
onHostUpdate: Em.K,
hosts: [],
breadcrumbs: null,
rootBreadcrumb: { label: "rootBreadcrumb" },
serviceName: "serviceName",
currentHostName: "currentHostName"
});
view = App.HostProgressPopupBodyView.create({
updateSelectView: sinon.spy(),
controller: controller,
parentView: App.HostPopup.initPopup("serviceName", controller, false, 1)
});
});
describe('when not isBackgroundOperations', function() {
describe('#switchLevel when isBackgroundOperations is false', function () {
var map = App.HostProgressPopupBodyView.create().get('customControllersSwitchLevelMap');
Object.keys(map).forEach(function (controllerName) {
var methodName = map [controllerName];
var levelName = 'OPS_LIST';
beforeEach(function () {
sinon.stub(view, methodName, Em.K);
});
afterEach(function () {
view[methodName].restore();
});
it('should call ' + methodName, function () {
view.set('controller.dataSourceController.name', controllerName);
view.switchLevel(levelName);
expect(view[methodName].args[0]).to.eql([levelName]);
});
});
});
describe('_determineRoleRelation', function() {
var cases;
beforeEach(function() {
sinon.stub(App.StackServiceComponent, 'find').returns([{componentName: 'DATANODE'}]);
sinon.stub(App.StackService, 'find').returns([{serviceName: 'HDFS'}])
});
afterEach(function() {
App.StackServiceComponent.find.restore();
App.StackService.find.restore();
});
cases = [
{
task: { role: 'HDFS_SERVICE_CHECK'},
m: 'Role is HDFS_SERVICE_CHECK',
e: {
type: 'service',
value: 'HDFS'
}
},
{
task: { role: 'DATANODE'},
m: 'Role is DATANODE',
e: {
type: 'component',
value: 'DATANODE'
}
},
{
task: { role: 'UNDEFINED'},
m: 'Role is UNDEFINED',
e: false
}
];
cases.forEach(function(test) {
it(test.m, function() {
view.reopen({
currentHost: Em.Object.create({
logTasks: [
{ Tasks: { id: 1, role: test.task.role }}
]
})
});
var ret = view._determineRoleRelation(Em.Object.create({ id: 1 }));
expect(ret).to.be.eql(test.e);
});
});
});
describe('#didInsertElement', function () {
beforeEach(function () {
sinon.stub(view, 'updateHostInfo', Em.K);
view.didInsertElement();
});
afterEach(function () {
view.updateHostInfo.restore();
});
it('should display relevant info', function () {
expect(view.updateHostInfo.calledOnce).to.be.true;
});
});
describe('#preloadHostModel', function() {
describe('When Log Search installed', function() {
beforeEach(function() {
this.HostModelStub = sinon.stub(App.Host, 'find');
this.isLogSearchInstalled = sinon.stub(view, 'get').withArgs('isLogSearchInstalled');
this.logSearchSupported = sinon.stub(App, 'get').withArgs('supports.logSearch');
this.updateCtrlStub = sinon.stub(App.router.get('updateController'), 'updateLogging');
});
afterEach(function () {
App.Host.find.restore();
view.get.restore();
App.get.restore();
App.router.get('updateController').updateLogging.restore();
});
[
{
hostName: 'host1',
logSearchSupported: true,
isLogSearchInstalled: true,
requestFailed: false,
hosts: [
{
hostName: 'host2'
}
],
e: {
updateLoggingCalled: true
},
m: 'Host absent, log search installed and supported'
},
{
hostName: 'host1',
logSearchSupported: true,
isLogSearchInstalled: true,
requestFailed: false,
hosts: [
{
hostName: 'host1'
}
],
e: {
updateLoggingCalled: false
},
m: 'Host present, log search installed and supported'
},
{
hostName: 'host1',
logSearchSupported: false,
isLogSearchInstalled: true,
requestFailed: false,
hosts: [
{
hostName: 'host1'
}
],
e: {
updateLoggingCalled: false
},
m: 'Host present, log search installed and support is off'
},
{
hostName: 'host1',
logSearchSupported: true,
isLogSearchInstalled: true,
requestFailed: true,
hosts: [
{
hostName: 'host2'
}
],
e: {
updateLoggingCalled: true
},
m: 'Host is absent, log search installed and supported, update request was failed'
},
{
hostName: 'host1',
logSearchSupported: true,
isLogSearchInstalled: false,
requestFailed: true,
hosts: [
{
hostName: 'host2'
}
],
e: {
updateLoggingCalled: false
},
m: 'Host is absent, log search not installed and supported'
}
].forEach(function(test) {
it('hostInfoLoaded should be true on init', function() {
expect(Em.get(view, 'hostInfoLoaded')).to.be.true;
});
describe(test.m, function () {
beforeEach(function () {
this.HostModelStub.returns(test.hosts);
this.isLogSearchInstalled.returns(test.isLogSearchInstalled);
this.logSearchSupported.returns(test.logSearchSupported);
if (test.requestFailed) {
this.updateCtrlStub.returns($.Deferred().reject().promise());
} else {
this.updateCtrlStub.returns($.Deferred().resolve().promise());
}
Em.set(view, 'hostInfoLoaded', false);
view.preloadHostModel(test.hostName);
});
it('updateLogging call validation', function() {
expect(App.router.get('updateController').updateLogging.called).to.be.equal(test.e.updateLoggingCalled);
});
it('in result hostInfoLoaded should be always true', function() {
expect(Em.get(view, 'hostInfoLoaded')).to.be.true;
});
});
});
});
});
describe("#resetState()", function () {
beforeEach(function() {
sinon.stub(view.get('controller'), 'setBackgroundOperationHeader');
sinon.stub(view, 'setOnStart');
sinon.stub(view, 'rerender');
});
afterEach(function() {
view.get('controller').setBackgroundOperationHeader.restore();
view.setOnStart.restore();
view.rerender.restore();
});
it("parentView.isOpen should be true", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('parentView.isOpen')).to.be.true;
});
it("parentView.isLogWrapHidden should be true", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('parentView.isLogWrapHidden')).to.be.true;
});
it("parentView.isTaskListHidden should be true", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('parentView.isTaskListHidden')).to.be.true;
});
it("parentView.isHostListHidden should be true", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('parentView.isHostListHidden')).to.be.true;
});
it("parentView.isServiceListHidden should be false", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('parentView.isServiceListHidden')).to.be.false;
});
it("setBackgroundOperationHeader should be called", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('controller').setBackgroundOperationHeader.calledWith(false)).to.be.true;
});
it("controller.hosts should be empty", function() {
view.set('controller.hosts', [Em.Object.create({})]);
view.set('parentView.isOpen', true);
view.resetState();
expect(view.get('controller.hosts')).to.be.empty;
});
it("setOnStart should be called", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.setOnStart.called).to.be.true;
});
it("rerender should be called", function() {
view.set('parentView.isOpen', true);
view.resetState();
expect(view.rerender.called).to.be.true;
});
});
describe('#goToTaskDetails', function () {
var task = {};
beforeEach(function() {
view.goToTaskDetails({context: task});
});
it('clipboard created', function () {
expect(view.get('taskLogsClipboard')).to.be.instanceOf(Clipboard);
});
});
describe('#destroyClipBoard', function () {
beforeEach(function () {
view.goToTaskDetails({context: {}});
sinon.spy(view.get('taskLogsClipboard'), 'destroy');
view.destroyClipBoard();
});
afterEach(function () {
view.get('taskLogsClipboard').destroy.restore();
});
it('should destroy clipboard', function () {
expect(view.get('taskLogsClipboard').destroy.calledOnce).to.be.true;
});
});
});
describe('when isBackgroundOperations', function() {
beforeEach(function () {
view.reopen({
parentView: App.HostPopup.initPopup("", controller, true)
});
sinon.stub(view, "changeLevel");
});
describe("#switchLevel", function () {
it("makes Operations list visible", function() {
view.switchLevel("OPS_LIST");
expect(view.changeLevel.calledWith("OPS_LIST")).to.be.true;
expect(view.get("parentView.isLogWrapHidden")).to.be.true;
expect(view.get("parentView.isTaskListHidden")).to.be.true;
expect(view.get("parentView.isHostListHidden")).to.be.true;
expect(view.get("parentView.isServiceListHidden")).to.be.false;
});
it("makes Hosts list visible", function() {
view.switchLevel("HOSTS_LIST", Em.Object.create());
expect(view.changeLevel.calledWith("HOSTS_LIST")).to.be.true;
expect(view.get("parentView.isLogWrapHidden")).to.be.true;
expect(view.get("parentView.isTaskListHidden")).to.be.true;
expect(view.get("parentView.isHostListHidden")).to.be.false;
expect(view.get("parentView.isServiceListHidden")).to.be.true;
});
it("makes Tasks list visible", function() {
view.switchLevel("TASKS_LIST", Em.Object.create());
expect(view.changeLevel.calledWith("TASKS_LIST")).to.be.true;
expect(view.get("parentView.isLogWrapHidden")).to.be.true;
expect(view.get("parentView.isTaskListHidden")).to.be.false;
expect(view.get("parentView.isHostListHidden")).to.be.true;
expect(view.get("parentView.isServiceListHidden")).to.be.true;
});
it("makes Task Details visible", function() {
view.switchLevel("TASK_DETAILS", Em.Object.create());
expect(view.changeLevel.calledWith("TASK_DETAILS")).to.be.true;
expect(view.get("parentView.isLogWrapHidden")).to.be.false;
expect(view.get("parentView.isTaskListHidden")).to.be.true;
expect(view.get("parentView.isHostListHidden")).to.be.true;
expect(view.get("parentView.isServiceListHidden")).to.be.true;
});
});
});
describe("#changeLevel", function() {
beforeEach(function () {
view.reopen({
parentView: Em.Object.create({isOpen: true})
});
});
it("sets correct breadcrumbs for Operations view", function() {
view.changeLevel("OPS_LIST");
var breadcrumbs = view.get("controller.breadcrumbs");
expect(breadcrumbs.length).to.equal(1);
expect(breadcrumbs[0].label).to.equal("rootBreadcrumb");
expect(breadcrumbs[0].action).to.be.a("function");
});
it("sets correct breadcrumbs for Hosts view", function() {
view.changeLevel("HOSTS_LIST");
var breadcrumbs = view.get("controller.breadcrumbs");
expect(breadcrumbs.length).to.equal(2);
expect(breadcrumbs[0].label).to.equal("rootBreadcrumb");
expect(breadcrumbs[0].action).to.be.a("function");
expect(breadcrumbs[1].label).to.equal("serviceName");
expect(breadcrumbs[1].action).to.be.a("function");
});
it("sets correct breadcrumbs for Tasks view", function() {
view.changeLevel("TASKS_LIST");
var breadcrumbs = view.get("controller.breadcrumbs");
expect(breadcrumbs.length).to.equal(3);
expect(breadcrumbs[0].label).to.equal("rootBreadcrumb");
expect(breadcrumbs[0].action).to.be.a("function");
expect(breadcrumbs[1].label).to.equal("serviceName");
expect(breadcrumbs[1].action).to.be.a("function");
expect(breadcrumbs[2].label).to.equal("currentHostName");
expect(breadcrumbs[2].action).to.be.a("function");
});
it("sets correct breadcrumbs for Tasks view", function() {
view.changeLevel("TASK_DETAILS");
var breadcrumbs = view.get("controller.breadcrumbs");
expect(breadcrumbs.length).to.equal(4);
expect(breadcrumbs[0].label).to.equal("rootBreadcrumb");
expect(breadcrumbs[0].action).to.be.a("function");
expect(breadcrumbs[1].label).to.equal("serviceName");
expect(breadcrumbs[1].action).to.be.a("function");
expect(breadcrumbs[2].label).to.equal("currentHostName");
expect(breadcrumbs[2].action).to.be.a("function");
expect(breadcrumbs[3].itemView).to.be.a("function");
});
});
});