stack_and_upgrade_controller_test.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. require('controllers/main/admin/stack_and_upgrade_controller');
  20. describe('App.MainAdminStackAndUpgradeController', function() {
  21. var controller = App.MainAdminStackAndUpgradeController.create({
  22. getDBProperty: Em.K,
  23. setDBProperty: Em.K
  24. });
  25. describe("#realRepoUrl", function() {
  26. before(function () {
  27. this.mock = sinon.stub(App, 'get');
  28. });
  29. after(function () {
  30. this.mock.restore();
  31. });
  32. it("", function() {
  33. this.mock.withArgs('apiPrefix').returns('apiPrefix');
  34. this.mock.withArgs('stackVersionURL').returns('stackVersionURL');
  35. controller.propertyDidChange('realRepoUrl');
  36. expect(controller.get('realRepoUrl')).to.equal('apiPrefixstackVersionURL/repository_versions?fields=*,operating_systems/*,operating_systems/repositories/*');
  37. });
  38. });
  39. describe("#realStackUrl", function() {
  40. before(function () {
  41. this.mock = sinon.stub(App, 'get');
  42. });
  43. after(function () {
  44. this.mock.restore();
  45. });
  46. it("", function() {
  47. this.mock.withArgs('apiPrefix').returns('apiPrefix');
  48. this.mock.withArgs('clusterName').returns('clusterName');
  49. controller.propertyDidChange('realStackUrl');
  50. expect(controller.get('realStackUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/repositories/*');
  51. });
  52. });
  53. describe("#realUpdateUrl", function() {
  54. before(function () {
  55. this.mock = sinon.stub(App, 'get');
  56. });
  57. after(function () {
  58. this.mock.restore();
  59. });
  60. it("", function() {
  61. this.mock.withArgs('apiPrefix').returns('apiPrefix');
  62. this.mock.withArgs('clusterName').returns('clusterName');
  63. controller.propertyDidChange('realUpdateUrl');
  64. expect(controller.get('realUpdateUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=ClusterStackVersions/*');
  65. });
  66. });
  67. describe("#load()", function() {
  68. before(function(){
  69. sinon.stub(controller, 'loadUpgradeData').returns({
  70. done: function(callback) {callback();}
  71. });
  72. sinon.stub(controller, 'loadStackVersionsToModel').returns({
  73. done: function(callback) {callback();}
  74. });
  75. sinon.stub(controller, 'loadRepoVersionsToModel').returns({
  76. done: function(callback) {callback();}
  77. });
  78. sinon.stub(App.StackVersion, 'find').returns([Em.Object.create({
  79. state: 'CURRENT',
  80. repositoryVersion: {
  81. repositoryVersion: '2.2',
  82. displayName: 'HDP-2.2'
  83. }
  84. })]);
  85. });
  86. after(function(){
  87. controller.loadUpgradeData.restore();
  88. controller.loadStackVersionsToModel.restore();
  89. controller.loadRepoVersionsToModel.restore();
  90. App.StackVersion.find.restore();
  91. });
  92. it("", function() {
  93. controller.load();
  94. expect(controller.loadUpgradeData.calledWith(true)).to.be.true;
  95. expect(controller.loadStackVersionsToModel.calledWith(true)).to.be.true;
  96. expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
  97. expect(controller.get('currentVersion')).to.eql({
  98. "repository_version": "2.2",
  99. "repository_name": "HDP-2.2"
  100. });
  101. });
  102. });
  103. describe("#loadUpgradeData()", function() {
  104. beforeEach(function () {
  105. sinon.stub(App.ajax, 'send').returns({
  106. then: Em.K
  107. });
  108. });
  109. afterEach(function () {
  110. App.ajax.send.restore();
  111. });
  112. it("get entire data", function() {
  113. controller.set('upgradeId', 1);
  114. controller.loadUpgradeData();
  115. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  116. name: 'admin.upgrade.data',
  117. sender: controller,
  118. data: {
  119. id: 1
  120. },
  121. success: 'loadUpgradeDataSuccessCallback'
  122. })
  123. });
  124. it("get only state", function() {
  125. controller.set('upgradeId', 1);
  126. controller.loadUpgradeData(true);
  127. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  128. name: 'admin.upgrade.state',
  129. sender: controller,
  130. data: {
  131. id: 1
  132. },
  133. success: 'loadUpgradeDataSuccessCallback'
  134. })
  135. });
  136. it("upgrade id is null", function() {
  137. controller.set('upgradeId', null);
  138. controller.loadUpgradeData();
  139. expect(App.ajax.send.called).to.be.false;
  140. });
  141. });
  142. describe("#loadUpgradeDataSuccessCallback()", function() {
  143. beforeEach(function () {
  144. sinon.stub(controller, 'updateUpgradeData', Em.K);
  145. });
  146. afterEach(function () {
  147. controller.updateUpgradeData.restore();
  148. });
  149. it("", function() {
  150. var data = {
  151. "Upgrade": {
  152. "request_status": "UPGRADED"
  153. },
  154. "upgrade_groups": [
  155. {
  156. "UpgradeGroup": {
  157. "id": 1
  158. },
  159. "upgrade_items": []
  160. }
  161. ]};
  162. controller.loadUpgradeDataSuccessCallback(data);
  163. expect(App.get('upgradeState')).to.equal('UPGRADED');
  164. expect(controller.updateUpgradeData.called).to.be.true;
  165. });
  166. });
  167. describe("#openUpgradeDialog()", function () {
  168. before(function () {
  169. sinon.stub(App.router, 'transitionTo', Em.K);
  170. });
  171. after(function () {
  172. App.router.transitionTo.restore();
  173. });
  174. it("should open dialog", function () {
  175. controller.openUpgradeDialog();
  176. expect(App.router.transitionTo.calledWith('admin.stackUpgrade')).to.be.true;
  177. });
  178. });
  179. describe("#runPreUpgradeCheck()", function() {
  180. before(function () {
  181. sinon.stub(App.ajax, 'send', Em.K);
  182. });
  183. after(function () {
  184. App.ajax.send.restore();
  185. });
  186. it("make ajax call", function() {
  187. controller.runPreUpgradeCheck(Em.Object.create({
  188. repositoryVersion: '2.2',
  189. displayName: 'HDP-2.2'
  190. }));
  191. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  192. name: "admin.rolling_upgrade.pre_upgrade_check",
  193. sender: controller,
  194. data: {
  195. value: '2.2',
  196. label: 'HDP-2.2'
  197. },
  198. success: "runPreUpgradeCheckSuccess"
  199. });
  200. });
  201. });
  202. describe("#runPreUpgradeCheckSuccess()", function () {
  203. beforeEach(function () {
  204. sinon.stub(App, 'showClusterCheckPopup', Em.K);
  205. sinon.stub(controller, 'upgrade', Em.K);
  206. });
  207. afterEach(function () {
  208. App.showClusterCheckPopup.restore();
  209. controller.upgrade.restore();
  210. });
  211. it("shows popup", function () {
  212. var check = { items: [{
  213. UpgradeChecks: {
  214. "check": "Work-preserving RM/NM restart is enabled in YARN configs",
  215. "status": "FAIL",
  216. "reason": "FAIL",
  217. "failed_on": [],
  218. "check_type": "SERVICE"
  219. }
  220. }]};
  221. controller.runPreUpgradeCheckSuccess(check,null,{label: "name"});
  222. expect(controller.upgrade.called).to.be.false;
  223. expect(App.showClusterCheckPopup.called).to.be.true;
  224. });
  225. it("runs upgrade popup", function () {
  226. var check = { items: [{
  227. UpgradeChecks: {
  228. "check": "Work-preserving RM/NM restart is enabled in YARN configs",
  229. "status": "PASS",
  230. "reason": "OK",
  231. "failed_on": [],
  232. "check_type": "SERVICE"
  233. }
  234. }]};
  235. controller.runPreUpgradeCheckSuccess(check,null,{label: "name"});
  236. expect(controller.upgrade.called).to.be.true;
  237. expect(App.showClusterCheckPopup.called).to.be.false;
  238. });
  239. });
  240. describe("#initDBProperties()", function() {
  241. before(function () {
  242. sinon.stub(controller, 'getDBProperty', function (prop) {
  243. return prop;
  244. });
  245. });
  246. after(function () {
  247. controller.getDBProperty.restore();
  248. });
  249. it("set properties", function () {
  250. controller.set('wizardStorageProperties', ['prop1']);
  251. controller.initDBProperties();
  252. expect(controller.get('prop1')).to.equal('prop1');
  253. });
  254. });
  255. describe("#init()", function() {
  256. before(function () {
  257. sinon.stub(controller, 'initDBProperties', Em.K);
  258. });
  259. after(function () {
  260. controller.initDBProperties.restore();
  261. });
  262. it("call initDBProperties", function () {
  263. controller.init();
  264. expect(controller.initDBProperties.calledOnce).to.be.true;
  265. });
  266. });
  267. describe("#upgrade()", function() {
  268. before(function () {
  269. sinon.stub(App.ajax, 'send', Em.K);
  270. sinon.stub(controller, 'setDBProperty', Em.K);
  271. });
  272. after(function () {
  273. App.ajax.send.restore();
  274. controller.setDBProperty.restore();
  275. });
  276. it("make ajax call", function() {
  277. controller.set('currentVersion', {
  278. repository_version: '2.2'
  279. });
  280. controller.upgrade({
  281. value: '2.2',
  282. label: 'HDP-2.2'
  283. });
  284. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  285. name: 'admin.upgrade.start',
  286. sender: controller,
  287. data: {
  288. value: '2.2',
  289. label: 'HDP-2.2'
  290. },
  291. success: 'upgradeSuccessCallback'
  292. });
  293. expect(controller.setDBProperty.calledWith('currentVersion', {
  294. repository_version: '2.2'
  295. })).to.be.true;
  296. });
  297. });
  298. describe("#upgradeSuccessCallback()", function() {
  299. before(function () {
  300. sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
  301. sinon.stub(controller, 'openUpgradeDialog', Em.K);
  302. sinon.stub(controller, 'setDBProperty', Em.K);
  303. sinon.stub(controller, 'load', Em.K);
  304. });
  305. after(function () {
  306. App.clusterStatus.setClusterStatus.restore();
  307. controller.openUpgradeDialog.restore();
  308. controller.setDBProperty.restore();
  309. controller.load.restore();
  310. });
  311. it("open upgrade dialog", function() {
  312. var data = {
  313. resources: [
  314. {
  315. Upgrade: {
  316. request_id: 1
  317. }
  318. }
  319. ]
  320. };
  321. controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1', isDowngrade: true});
  322. expect(controller.setDBProperty.calledWith('upgradeId', 1)).to.be.true;
  323. expect(controller.setDBProperty.calledWith('upgradeVersion', 'HDP-2.2.1')).to.be.true;
  324. expect(controller.setDBProperty.calledWith('isDowngrade', true)).to.be.true;
  325. expect(controller.load.calledOnce).to.be.true;
  326. expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1');
  327. expect(controller.get('upgradeData')).to.be.null;
  328. expect(controller.get('isDowngrade')).to.be.true;
  329. expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
  330. expect(controller.openUpgradeDialog.calledOnce).to.be.true;
  331. });
  332. });
  333. describe("#updateUpgradeData()", function() {
  334. beforeEach(function () {
  335. sinon.stub(controller, 'initUpgradeData', Em.K);
  336. });
  337. afterEach(function () {
  338. controller.initUpgradeData.restore();
  339. });
  340. it("data loaded first time", function() {
  341. controller.set('upgradeData', null);
  342. controller.updateUpgradeData({});
  343. expect(controller.initUpgradeData.calledWith({})).to.be.true;
  344. });
  345. it("update loaded data", function() {
  346. var oldData = Em.Object.create({
  347. upgradeGroups: [
  348. Em.Object.create({
  349. group_id: 1,
  350. upgradeItems: [
  351. Em.Object.create({
  352. stage_id: 1,
  353. tasks: [
  354. Em.Object.create({
  355. id: 1
  356. })
  357. ]
  358. })
  359. ]
  360. })
  361. ]
  362. });
  363. var newData = {
  364. Upgrade: {
  365. request_id: 1
  366. },
  367. upgrade_groups: [
  368. {
  369. UpgradeGroup: {
  370. group_id: 1,
  371. status: 'COMPLETED',
  372. progress_percent: 100
  373. },
  374. upgrade_items: [
  375. {
  376. UpgradeItem: {
  377. stage_id: 1,
  378. status: 'COMPLETED',
  379. progress_percent: 100
  380. },
  381. tasks: [
  382. {
  383. Tasks: {
  384. id: 1,
  385. status: 'COMPLETED'
  386. }
  387. }
  388. ]
  389. }
  390. ]
  391. }
  392. ]
  393. };
  394. controller.set('upgradeData', oldData);
  395. controller.updateUpgradeData(newData);
  396. expect(controller.get('upgradeData.upgradeGroups')[0].get('status')).to.equal('COMPLETED');
  397. expect(controller.get('upgradeData.upgradeGroups')[0].get('progress_percent')).to.equal(100);
  398. expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
  399. expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
  400. expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')[0].get('status')).to.equal('COMPLETED');
  401. });
  402. });
  403. describe("#initUpgradeData()", function() {
  404. it("", function() {
  405. var newData = {
  406. Upgrade: {
  407. request_id: 1
  408. },
  409. upgrade_groups: [
  410. {
  411. UpgradeGroup: {
  412. group_id: 1
  413. },
  414. upgrade_items: [
  415. {
  416. UpgradeItem: {
  417. stage_id: 1
  418. },
  419. tasks: [
  420. {
  421. Tasks: {
  422. id: 1
  423. }
  424. }
  425. ]
  426. },
  427. {
  428. UpgradeItem: {
  429. stage_id: 2
  430. },
  431. tasks: [
  432. {
  433. Tasks: {
  434. id: 2
  435. }
  436. }
  437. ]
  438. }
  439. ]
  440. },
  441. {
  442. UpgradeGroup: {
  443. group_id: 2
  444. },
  445. upgrade_items: [
  446. ]
  447. }
  448. ]
  449. };
  450. controller.initUpgradeData(newData);
  451. expect(controller.get('upgradeData.Upgrade.request_id')).to.equal(1);
  452. expect(controller.get('upgradeData.upgradeGroups')[0].get('group_id')).to.equal(2);
  453. expect(controller.get('upgradeData.upgradeGroups')[1].get('group_id')).to.equal(1);
  454. expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[0].get('stage_id')).to.equal(2);
  455. expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[1].get('stage_id')).to.equal(1);
  456. expect(controller.get('upgradeData.upgradeGroups')[1].get('upgradeItems')[0].get('tasks')[0].get('id')).to.equal(2);
  457. });
  458. });
  459. describe.skip("#finish()", function() {
  460. before(function () {
  461. sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
  462. sinon.stub(controller, 'setDBProperty', Em.K);
  463. });
  464. after(function () {
  465. App.clusterStatus.setClusterStatus.restore();
  466. controller.setDBProperty.restore();
  467. });
  468. it("upgradeState is not COMPLETED", function() {
  469. App.set('upgradeState', 'UPGRADING');
  470. controller.finish();
  471. expect(App.clusterStatus.setClusterStatus.called).to.be.false;
  472. });
  473. it("upgradeState is COMPLETED", function() {
  474. App.set('upgradeState', 'COMPLETED');
  475. controller.finish();
  476. expect(controller.setDBProperty.calledWith('upgradeId', undefined)).to.be.true;
  477. expect(controller.setDBProperty.calledWith('upgradeVersion', undefined)).to.be.true;
  478. expect(controller.setDBProperty.calledWith('upgradeState', 'INIT')).to.be.true;
  479. expect(controller.setDBProperty.calledWith('currentVersion', undefined)).to.be.true;
  480. expect(App.get('upgradeState')).to.equal('INIT');
  481. expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
  482. });
  483. });
  484. describe("#confirmDowngrade()", function() {
  485. before(function () {
  486. sinon.spy(App, 'showConfirmationPopup');
  487. sinon.stub(controller, 'downgrade', Em.K);
  488. });
  489. after(function () {
  490. App.showConfirmationPopup.restore();
  491. controller.downgrade.restore();
  492. });
  493. it("show confirmation popup", function() {
  494. controller.set('currentVersion', Em.Object.create({
  495. repository_version: '2.2',
  496. repository_name: 'HDP-2.2'
  497. }));
  498. var popup = controller.confirmDowngrade();
  499. expect(App.showConfirmationPopup.calledOnce).to.be.true;
  500. popup.onPrimary();
  501. expect(controller.downgrade.calledWith(Em.Object.create({
  502. repository_version: '2.2',
  503. repository_name: 'HDP-2.2'
  504. }))).to.be.true;
  505. });
  506. });
  507. describe("#confirmUpgrade()", function() {
  508. before(function () {
  509. sinon.spy(App, 'showConfirmationPopup');
  510. sinon.stub(controller, 'runPreUpgradeCheck', Em.K);
  511. });
  512. after(function () {
  513. App.showConfirmationPopup.restore();
  514. controller.runPreUpgradeCheck.restore();
  515. });
  516. it("show confirmation popup", function() {
  517. var version = Em.Object.create({displayName: 'HDP-2.2'});
  518. var popup = controller.confirmUpgrade(version);
  519. expect(App.showConfirmationPopup.calledOnce).to.be.true;
  520. popup.onPrimary();
  521. expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
  522. });
  523. });
  524. describe("#downgrade()", function() {
  525. before(function () {
  526. sinon.stub(App.ajax, 'send', Em.K);
  527. sinon.stub(controller, 'abortUpgrade');
  528. });
  529. after(function () {
  530. App.ajax.send.restore();
  531. controller.abortUpgrade.restore();
  532. });
  533. it("make ajax call", function() {
  534. controller.downgrade(Em.Object.create({
  535. repository_version: '2.2',
  536. repository_name: 'HDP-2.2'
  537. }), {context: 'context'});
  538. expect(controller.abortUpgrade.calledOnce).to.be.true;
  539. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  540. name: 'admin.downgrade.start',
  541. sender: controller,
  542. data: {
  543. value: '2.2',
  544. label: 'HDP-2.2',
  545. isDowngrade: true
  546. },
  547. success: 'upgradeSuccessCallback'
  548. });
  549. });
  550. });
  551. describe("#installRepoVersionConfirmation()", function () {
  552. before(function () {
  553. sinon.stub(controller, 'installRepoVersion', Em.K);
  554. });
  555. after(function () {
  556. controller.installRepoVersion.restore();
  557. });
  558. it("show popup", function () {
  559. var repo = Em.Object.create({'displayName': 'HDP-2.2'});
  560. var popup = controller.installRepoVersionConfirmation(repo);
  561. popup.onPrimary();
  562. expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
  563. });
  564. });
  565. describe("#installRepoVersion()", function () {
  566. before(function () {
  567. sinon.stub(App.ajax, 'send', Em.K);
  568. });
  569. after(function () {
  570. App.ajax.send.restore();
  571. });
  572. it("make ajax call", function () {
  573. var repo = Em.Object.create({
  574. stackVersionType: 'HDP',
  575. stackVersionNumber: '2.2',
  576. repositoryVersion: '2.2.1',
  577. repoId: 1
  578. });
  579. controller.installRepoVersion(repo);
  580. expect(App.ajax.send.calledOnce).to.be.true;
  581. });
  582. });
  583. describe("#installRepoVersionSuccess()", function() {
  584. var mock = {set: Em.K};
  585. before(function () {
  586. sinon.spy(mock, 'set');
  587. sinon.stub(App.db, 'set', Em.K);
  588. sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
  589. sinon.stub(App.RepositoryVersion, 'find').returns(mock);
  590. });
  591. after(function () {
  592. mock.set.restore();
  593. App.db.set.restore();
  594. App.clusterStatus.setClusterStatus.restore();
  595. App.RepositoryVersion.find.restore();
  596. });
  597. it("", function() {
  598. controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
  599. expect(App.db.set.calledWith('repoVersionInstall', 'id', [1])).to.be.true;
  600. expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
  601. expect(App.RepositoryVersion.find.calledWith(1)).to.be.true;
  602. expect(mock.set.calledWith('defaultStatus', 'INSTALLING')).to.be.true; });
  603. });
  604. describe("#setUpgradeItemStatus()", function () {
  605. before(function () {
  606. sinon.stub(App.ajax, 'send', function () {
  607. return {
  608. done: function (callback) {
  609. callback();
  610. }
  611. }
  612. });
  613. });
  614. after(function () {
  615. App.ajax.send.restore();
  616. });
  617. it("", function () {
  618. var item = Em.Object.create({
  619. request_id: 1,
  620. stage_id: 1,
  621. group_id: 1
  622. });
  623. controller.setUpgradeItemStatus(item, 'PENDING');
  624. expect(App.ajax.send.getCall(0).args[0]).to.eql({
  625. name: 'admin.upgrade.upgradeItem.setState',
  626. sender: controller,
  627. data: {
  628. upgradeId: 1,
  629. itemId: 1,
  630. groupId: 1,
  631. status: 'PENDING'
  632. }
  633. });
  634. expect(item.get('status')).to.equal('PENDING');
  635. });
  636. });
  637. describe("#prepareRepoForSaving()", function () {
  638. it("prepare date for saving", function () {
  639. var repo = Em.Object.create({
  640. operatingSystems: [
  641. Em.Object.create({
  642. osType: "redhat6",
  643. isDisabled: Ember.computed.not('isSelected'),
  644. repositories: [Em.Object.create({
  645. "baseUrl": "111121",
  646. "repoId": "HDP-2.2",
  647. "repoName": "HDP",
  648. hasError: false
  649. }),
  650. Em.Object.create({
  651. "baseUrl": "1",
  652. "repoId": "HDP-UTILS-1.1.0.20",
  653. "repoName": "HDP-UTILS",
  654. hasError: false
  655. })]
  656. })
  657. ]
  658. });
  659. var result = {
  660. "operating_systems": [
  661. {
  662. "OperatingSystems": {
  663. "os_type": "redhat6"
  664. },
  665. "repositories": [
  666. {
  667. "Repositories": {
  668. "base_url": "111121",
  669. "repo_id": "HDP-2.2",
  670. "repo_name": "HDP"
  671. }
  672. },
  673. {
  674. "Repositories": {
  675. "base_url": "1",
  676. "repo_id": "HDP-UTILS-1.1.0.20",
  677. "repo_name": "HDP-UTILS"
  678. }
  679. }
  680. ]
  681. }
  682. ]};
  683. expect(controller.prepareRepoForSaving(repo)).to.eql(result);
  684. });
  685. });
  686. describe("#saveRepoOS()", function() {
  687. before(function(){
  688. this.mock = sinon.stub(controller, 'validateRepoVersions');
  689. sinon.stub(controller, 'prepareRepoForSaving', Em.K);
  690. sinon.stub(App.ajax, 'send').returns({success: Em.K});
  691. });
  692. after(function(){
  693. this.mock.restore();
  694. controller.prepareRepoForSaving.restore();
  695. App.ajax.send.restore();
  696. });
  697. it("validation errors present", function() {
  698. this.mock.returns({
  699. done: function(callback) {callback([1]);}
  700. });
  701. controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
  702. expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
  703. expect(controller.prepareRepoForSaving.called).to.be.false;
  704. expect(App.ajax.send.called).to.be.false;
  705. });
  706. it("no validation errors", function() {
  707. this.mock.returns({
  708. done: function(callback) {callback([]);}
  709. });
  710. controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
  711. expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
  712. expect(controller.prepareRepoForSaving.calledWith(Em.Object.create({repoVersionId: 1}))).to.be.true;
  713. expect(App.ajax.send.calledOnce).to.be.true;
  714. });
  715. });
  716. describe("#validateRepoVersions()", function () {
  717. before(function () {
  718. sinon.stub(App.ajax, 'send').returns({success: Em.K, error: Em.K});
  719. });
  720. after(function () {
  721. App.ajax.send.restore();
  722. });
  723. it("skip validation", function () {
  724. controller.validateRepoVersions(Em.Object.create({repoVersionId: 1}), true);
  725. expect(App.ajax.send.called).to.be.false;
  726. });
  727. it("do validation", function () {
  728. var repo = Em.Object.create({
  729. repoVersionId: 1,
  730. operatingSystems: [
  731. Em.Object.create({
  732. isSelected: true,
  733. repositories: [
  734. Em.Object.create()
  735. ]
  736. })
  737. ]
  738. });
  739. controller.validateRepoVersions(repo, false);
  740. expect(App.ajax.send.calledOnce).to.be.true;
  741. });
  742. });
  743. describe("#showProgressPopup()", function () {
  744. var mock = {
  745. initPopup: Em.K
  746. };
  747. before(function () {
  748. sinon.stub(App.router, 'get').withArgs('highAvailabilityProgressPopupController').returns(mock);
  749. sinon.spy(mock, 'initPopup');
  750. });
  751. after(function () {
  752. App.router.get.restore();
  753. mock.initPopup.restore();
  754. });
  755. it("", function () {
  756. controller.showProgressPopup(Em.Object.create());
  757. expect(mock.initPopup.calledOnce).to.be.true;
  758. });
  759. });
  760. describe("#getUrl()", function() {
  761. beforeEach(function(){
  762. controller.reopen({
  763. realStackUrl: 'realStackUrl',
  764. realRepoUrl: 'realRepoUrl',
  765. realUpdateUrl: 'realUpdateUrl'
  766. });
  767. });
  768. it("full load is true, stack is null", function() {
  769. expect(controller.getUrl(null, true)).to.equal('realRepoUrl');
  770. });
  771. it("full load is true, stack is valid", function() {
  772. expect(controller.getUrl({}, true)).to.equal('realStackUrl');
  773. });
  774. it("full load is false, stack is valid", function() {
  775. expect(controller.getUrl({}, false)).to.equal('realUpdateUrl');
  776. });
  777. });
  778. describe("#loadStackVersionsToModel()", function () {
  779. before(function () {
  780. sinon.stub(App.HttpClient, 'get');
  781. });
  782. after(function () {
  783. App.HttpClient.get.restore();
  784. });
  785. it("", function () {
  786. controller.loadStackVersionsToModel();
  787. expect(App.HttpClient.get.calledOnce).to.be.true;
  788. });
  789. });
  790. describe("#loadRepoVersionsToModel()", function () {
  791. before(function () {
  792. sinon.stub(App.HttpClient, 'get');
  793. });
  794. after(function () {
  795. App.HttpClient.get.restore();
  796. });
  797. it("", function () {
  798. controller.loadRepoVersionsToModel();
  799. expect(App.HttpClient.get.calledOnce).to.be.true;
  800. });
  801. });
  802. });