123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665 |
- /**
- * 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('config');
- require('utils/updater');
- require('utils/ajax/ajax');
- require('models/host_component');
- require('controllers/global/background_operations_controller');
- require('views/common/modal_popup');
- require('utils/host_progress_popup');
- describe('App.BackgroundOperationsController', function () {
- var controller = App.BackgroundOperationsController.create();
- describe('#getQueryParams', function () {
- /**
- * Predefined data
- *
- */
- App.set('clusterName', 'testName');
- App.bgOperationsUpdateInterval = 100;
- var tests = Em.A([
- {
- levelInfo: Em.Object.create({
- name: 'REQUESTS_LIST',
- requestId: null,
- taskId: null,
- sync: false
- }),
- e: {
- name: 'background_operations.get_most_recent',
- successCallback: 'callBackForMostRecent',
- data: {}
- },
- response: {items: []},
- m: '"Get Most Recent"'
- },
- {
- levelInfo: Em.Object.create({
- name: 'TASK_DETAILS',
- requestId: 1,
- taskId: 1,
- sync: false
- }),
- e: {
- name: 'background_operations.get_by_task',
- successCallback: 'callBackFilteredByTask',
- data: {
- taskId: 1,
- requestId: 1,
- sync: false
- }
- },
- response: {items: {Tasks: {request_id: 0}}},
- m: '"Filtered By task"'
- },
- {
- levelInfo: Em.Object.create({
- name: 'TASKS_LIST',
- requestId: 1,
- taskId: 1,
- sync: false
- }),
- e: {
- name: 'background_operations.get_by_request',
- successCallback: 'callBackFilteredByRequest',
- data: {
- requestId: 1,
- sync: false
- }
- },
- response: {items: {Requests: {id: 0}}},
- m: '"Filtered By Request (TASKS_LIST)"'
- },
- {
- levelInfo: Em.Object.create({
- name: 'HOSTS_LIST',
- requestId: 1,
- taskId: 1,
- sync: false
- }),
- e: {
- name: 'background_operations.get_by_request',
- successCallback: 'callBackFilteredByRequest',
- data: {
- requestId: 1,
- sync: false
- }
- },
- response: {items: {Requests: {id: 0}}},
- m: '"Filtered By Request (HOSTS_LIST)"'
- }
- ]);
- beforeEach(function () {
- App.testMode = false;
- });
- afterEach(function () {
- App.testMode = true;
- });
- tests.forEach(function (test) {
- it(test.m, function () {
- controller.set('levelInfo', test.levelInfo);
- var r = controller.getQueryParams();
- expect(r.name).to.equal(test.e.name);
- expect(r.successCallback).to.equal(test.e.successCallback);
- expect(r.data).to.eql(test.e.data);
- });
- });
- });
- describe('#startPolling()', function () {
- beforeEach(function () {
- sinon.spy(App.updater, 'run');
- sinon.spy(controller, 'requestMostRecent');
- });
- afterEach(function () {
- App.updater.run.restore();
- controller.requestMostRecent.restore();
- });
- it('isWorking = false', function () {
- controller.set('isWorking', false);
- expect(App.updater.run.calledOnce).to.equal(false);
- expect(controller.requestMostRecent.calledOnce).to.equal(false);
- });
- it('isWorking = true', function () {
- controller.set('isWorking', true);
- expect(App.updater.run.calledOnce).to.equal(true);
- expect(controller.requestMostRecent.calledOnce).to.equal(true);
- });
- });
- describe('#callBackForMostRecent()', function () {
- it('No requests exists', function () {
- var data = {
- items: []
- };
- controller.callBackForMostRecent(data);
- expect(controller.get("allOperationsCount")).to.equal(0);
- expect(controller.get("services.length")).to.equal(0);
- });
- it('One non-running request', function () {
- var data = {
- items: [
- {
- Requests: {
- id: 1,
- request_context: '',
- task_count: 0,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- }
- ]
- };
- controller.callBackForMostRecent(data);
- expect(controller.get("allOperationsCount")).to.equal(0);
- expect(controller.get("services").mapProperty('id')).to.eql([1]);
- });
- it('One running request', function () {
- var data = {
- items: [
- {
- Requests: {
- id: 1,
- request_context: '',
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- }
- ]
- };
- controller.callBackForMostRecent(data);
- expect(controller.get("allOperationsCount")).to.equal(1);
- expect(controller.get("services").mapProperty('id')).to.eql([1]);
- });
- it('Two requests in order', function () {
- var data = {
- items: [
- {
- Requests: {
- id: 1,
- request_context: ''
- }
- },
- {
- Requests: {
- id: 2,
- request_context: ''
- }
- }
- ]
- };
- controller.callBackForMostRecent(data);
- expect(controller.get("allOperationsCount")).to.equal(0);
- expect(controller.get("services").mapProperty('id')).to.eql([2, 1]);
- });
- });
- describe('#removeOldRequests()', function () {
- var testCases = [
- {
- title: 'No requests exist',
- content: {
- currentRequestIds: [],
- services: []
- },
- result: []
- },
- {
- title: 'One current request',
- content: {
- currentRequestIds: [1],
- services: [
- {id: 1}
- ]
- },
- result: [
- {id: 1}
- ]
- },
- {
- title: 'One old request',
- content: {
- currentRequestIds: [2],
- services: [
- {id: 1}
- ]
- },
- result: []
- },
- {
- title: 'One old request and one is current',
- content: {
- currentRequestIds: [2],
- services: [
- {id: 1},
- {id: 2}
- ]
- },
- result: [
- {id: 2}
- ]
- }
- ];
- testCases.forEach(function (test) {
- it(test.title, function () {
- controller.set('services', test.content.services);
- controller.removeOldRequests(test.content.currentRequestIds);
- expect(controller.get('services')).to.eql(test.result);
- });
- });
- });
- describe('#isRequestRunning()', function () {
- var testCases = [
- {
- title: 'Counters are missing',
- request: {
- Requests: {}
- },
- result: false
- },
- {
- title: 'Request has zero tasks',
- request: {
- Requests: {
- task_count: 0,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- },
- result: false
- },
- {
- title: 'One task in running status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- },
- result: true
- },
- {
- title: 'One task in queued status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 1
- }
- },
- result: true
- },
- {
- title: 'One task in aborted status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 1,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- },
- result: false
- },
- {
- title: 'One task in completed status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 1,
- failed_task_count: 0,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- },
- result: false
- },
- {
- title: 'One task in failed status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 1,
- timed_out_task_count: 0,
- queued_task_count: 0
- }
- },
- result: false
- },
- {
- title: 'One task in timed out status',
- request: {
- Requests: {
- task_count: 1,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 1,
- queued_task_count: 0
- }
- },
- result: false
- },
- {
- title: 'One task in timed out status and the second one in running',
- request: {
- Requests: {
- task_count: 2,
- aborted_task_count: 0,
- completed_task_count: 0,
- failed_task_count: 0,
- timed_out_task_count: 1,
- queued_task_count: 0
- }
- },
- result: true
- },
- {
- title: 'One task in each status',
- request: {
- Requests: {
- task_count: 5,
- aborted_task_count: 1,
- completed_task_count: 1,
- failed_task_count: 1,
- timed_out_task_count: 1,
- queued_task_count: 1
- }
- },
- result: true
- },
- {
- title: 'One task in each status except queued',
- request: {
- Requests: {
- task_count: 5,
- aborted_task_count: 1,
- completed_task_count: 1,
- failed_task_count: 1,
- timed_out_task_count: 1,
- queued_task_count: 0
- }
- },
- result: true
- },
- {
- title: 'No tasks in running status',
- request: {
- Requests: {
- task_count: 4,
- aborted_task_count: 1,
- completed_task_count: 1,
- failed_task_count: 1,
- timed_out_task_count: 1,
- queued_task_count: 0
- }
- },
- result: false
- }
- ];
- testCases.forEach(function (test) {
- it(test.title, function () {
- expect(controller.isRequestRunning(test.request)).to.eql(test.result);
- });
- });
- });
- describe('#isOneHost()', function () {
- var testCases = [
- {
- title: 'inputs is null',
- inputs: null,
- result: false
- },
- {
- title: 'inputs is "null"',
- inputs: 'null',
- result: false
- },
- {
- title: 'inputs is empty object',
- inputs: '{}',
- result: false
- },
- {
- title: 'included_hosts is empty',
- inputs: '{"included_hosts": ""}',
- result: false
- },
- {
- title: 'included_hosts contain one host',
- inputs: '{"included_hosts": "host1"}',
- result: true
- },
- {
- title: 'included_hosts contain two hosts',
- inputs: '{"included_hosts": "host1,host2"}',
- result: false
- }
- ];
- testCases.forEach(function (test) {
- it(test.title, function () {
- expect(controller.isOneHost(test.inputs)).to.eql(test.result);
- });
- });
- });
- describe('#assignScheduleId()', function () {
- var testCases = [
- {
- title: 'isOneHost is false',
- content: {
- request: {
- Requests: {
- request_schedule: {
- schedule_id: 1
- },
- inputs: null
- }
- },
- requestParams: ''
- },
- result: 1
- },
- {
- title: 'isOneHost is true and requestContext is empty',
- content: {
- request: {
- Requests: {
- request_schedule: {
- schedule_id: 1
- },
- inputs: '{"included_hosts": "host1"}'
- }
- },
- requestParams: {
- requestContext: ''
- }
- },
- result: 1
- },
- {
- title: 'isOneHost is true and requestContext contains "Recommission"',
- content: {
- request: {
- Requests: {
- request_schedule: {
- schedule_id: 1
- },
- inputs: '{"included_hosts": "host1"}'
- }
- },
- requestParams: {
- requestContext: 'Recommission'
- }
- },
- result: null
- }
- ];
- testCases.forEach(function (test) {
- it(test.title, function () {
- controller.assignScheduleId(test.content.request, test.content.requestParams);
- expect(test.content.request.Requests.request_schedule.schedule_id).to.equal(test.result);
- });
- });
- });
- describe('#callBackFilteredByRequest()', function () {
- it('request haven\'t tasks and isRunning false', function () {
- var data = {
- Requests: {id: 1},
- tasks: []
- };
- var request = Em.Object.create({
- id: 1,
- previousTaskStatusMap: {},
- isRunning: false,
- progress: 0,
- status:''
- });
- controller.set('services', [request]);
- controller.callBackFilteredByRequest(data);
- expect(request.get('previousTaskStatusMap')).to.eql({});
- expect(request.get('hostsMap')).to.eql({});
- expect(request.get('isRunning')).to.equal(false);
- });
- it('request haven\'t tasks and isRunning true', function () {
- var data = {
- Requests: {id: 1},
- tasks: []
- };
- var request = Em.Object.create({
- id: 1,
- previousTaskStatusMap: {},
- isRunning: true,
- progress: 0,
- status:''
- });
- controller.set('services', [request]);
- controller.callBackFilteredByRequest(data);
- expect(request.get('previousTaskStatusMap')).to.eql({});
- expect(request.get('hostsMap')).to.eql({});
- expect(request.get('isRunning')).to.equal(true);
- });
- it('request has one completed task', function () {
- var data = {
- Requests: {id: 1},
- tasks: [
- {
- Tasks: {
- id: 1,
- host_name: 'host1',
- status: 'COMPLETED'
- }
- }
- ]
- };
- var request = Em.Object.create({
- id: 1,
- previousTaskStatusMap: {},
- isRunning: true,
- progress: 100,
- status:''
- });
- controller.set('services', [request]);
- controller.callBackFilteredByRequest(data);
- expect(request.get('previousTaskStatusMap')).to.eql({"1": "COMPLETED"});
- expect(request.get('hostsMap')['host1'].logTasks.length).to.equal(1);
- expect(request.get('isRunning')).to.equal(false);
- });
- it('request has one completed task and one running task', function () {
- var data = {
- Requests: {id: 1},
- tasks: [
- {
- Tasks: {
- id: 1,
- host_name: 'host1',
- status: 'COMPLETED'
- }
- },
- {
- Tasks: {
- id: 2,
- host_name: 'host1',
- status: 'IN_PROGRESS'
- }
- }
- ]
- };
- var request = Em.Object.create({
- id: 1,
- previousTaskStatusMap: {},
- isRunning: true,
- progress: 100,
- status:''
- });
- controller.set('services', [request]);
- controller.callBackFilteredByRequest(data);
- expect(request.get('previousTaskStatusMap')).to.eql({"1": "COMPLETED", "2": "IN_PROGRESS"});
- expect(request.get('hostsMap')['host1'].logTasks.length).to.equal(2);
- expect(request.get('isRunning')).to.equal(true);
- });
- });
- });
|