installer_test.js 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  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('models/cluster');
  20. require('controllers/wizard');
  21. require('controllers/installer');
  22. describe('App.InstallerController', function () {
  23. var installerController = App.InstallerController.create();
  24. describe('#init', function () {
  25. var c;
  26. beforeEach(function () {
  27. c = App.InstallerController.create({});
  28. });
  29. it('all steps are disabled by default', function () {
  30. expect(c.get('isStepDisabled.length') > 0 ).to.be.ok;
  31. expect(c.get('isStepDisabled').everyProperty('value', true)).to.be.ok;
  32. });
  33. });
  34. describe('#loadStacksVersionsSuccessCallback', function() {
  35. beforeEach(function () {
  36. sinon.stub(App.store, 'commit', Em.K);
  37. });
  38. afterEach(function () {
  39. App.store.commit.restore();
  40. });
  41. it ('Correct data', function() {
  42. installerController.set('loadStacksRequestsCounter', 1);
  43. installerController.loadStacksVersionsSuccessCallback(require('test/stack'));
  44. expect(installerController.get('content.stacks.length')).to.equal(2);
  45. expect(installerController.get('content.stacks').everyProperty('isSelected')).to.be.false;
  46. expect(installerController.get('content.stacks').mapProperty('id')).to.eql(['HDP-2.1','HDP-1.3']);
  47. });
  48. });
  49. describe('#getCluster', function() {
  50. it ('Should return merged clusterStatusTemplate', function() {
  51. installerController.set('clusterStatusTemplate', {
  52. name: 'template'
  53. });
  54. expect(installerController.getCluster()).to.eql({
  55. name: 'template'
  56. });
  57. });
  58. });
  59. describe('#getHosts', function() {
  60. it ('Should return empty array', function() {
  61. expect(installerController.getHosts()).to.eql([]);
  62. });
  63. });
  64. describe('#loadServices', function() {
  65. it ('Should resolve nothing', function() {
  66. var res = installerController.loadServices();
  67. res.then(function(data){
  68. expect(data).to.be.undefined;
  69. });
  70. });
  71. });
  72. describe('#checkRepoURL', function() {
  73. beforeEach(function () {
  74. sinon.stub(App.ajax, 'send', function(data){
  75. return null;
  76. });
  77. });
  78. afterEach(function () {
  79. App.ajax.send.restore();
  80. });
  81. it ('Should reload installed stacks', function() {
  82. var stacks = Em.A([
  83. Em.Object.create({
  84. isSelected: false
  85. }),
  86. Em.Object.create({
  87. isSelected: true,
  88. reload: false,
  89. id: 'nn-cc',
  90. repositories: Em.A([
  91. Em.Object.create({
  92. isSelected: true
  93. })
  94. ]),
  95. operatingSystems: Em.A([
  96. Em.Object.create({
  97. isSelected: true,
  98. repositories: Em.A([
  99. Em.Object.create({
  100. errorTitle: '1',
  101. errorContent: '1',
  102. validation: ''
  103. })
  104. ])
  105. })
  106. ])
  107. })
  108. ]);
  109. var wizard = Em.Object.create({
  110. skipValidationChecked: true
  111. });
  112. installerController.set('content.stacks', stacks);
  113. installerController.checkRepoURL(wizard);
  114. var expected = [
  115. {
  116. "isSelected": false
  117. },
  118. {
  119. "isSelected": true,
  120. "reload": true,
  121. "id": "nn-cc",
  122. "repositories": [
  123. {
  124. "isSelected": true
  125. }
  126. ],
  127. "operatingSystems": [
  128. {
  129. "isSelected": true,
  130. "repositories": [
  131. {
  132. "errorTitle": "",
  133. "errorContent": "",
  134. "validation": "icon-repeat"
  135. }
  136. ]
  137. }
  138. ]
  139. }
  140. ];
  141. var res = JSON.parse(JSON.stringify(installerController.get('content.stacks')));
  142. expect(res).to.be.eql(expected);
  143. });
  144. });
  145. describe('#checkRepoURLSuccessCallback', function() {
  146. it ('Should check stacks for sucess', function() {
  147. var stacks = Em.A([
  148. Em.Object.create({
  149. isSelected: false
  150. }),
  151. Em.Object.create({
  152. isSelected: true,
  153. reload: false,
  154. id: 'nn-cc',
  155. repositories: Em.A([
  156. Em.Object.create({
  157. repoId: 11,
  158. isSelected: true
  159. })
  160. ]),
  161. operatingSystems: Em.A([
  162. Em.Object.create({
  163. isSelected: true,
  164. id: 1,
  165. repositories: Em.A([
  166. Em.Object.create({
  167. repoId: 11,
  168. errorTitle: '1',
  169. errorContent: '1',
  170. validation: ''
  171. })
  172. ])
  173. })
  174. ])
  175. })
  176. ]);
  177. var resolve = false;
  178. var data = {
  179. osId: 1,
  180. repoId: 11,
  181. dfd: {
  182. resolve: function() {
  183. resolve = true;
  184. }
  185. }
  186. };
  187. installerController.set('content.stacks', stacks);
  188. installerController.checkRepoURLSuccessCallback(null,null,data);
  189. var expected = [
  190. {
  191. "isSelected": false
  192. },
  193. {
  194. "isSelected": true,
  195. "reload": false,
  196. "id": "nn-cc",
  197. "repositories": [
  198. {
  199. "repoId": 11,
  200. "isSelected": true
  201. }
  202. ],
  203. "operatingSystems": [
  204. {
  205. "isSelected": true,
  206. "id": 1,
  207. "repositories": [
  208. {
  209. "repoId": 11,
  210. "errorTitle": "1",
  211. "errorContent": "1",
  212. "validation": "icon-ok"
  213. }
  214. ]
  215. }
  216. ]
  217. }
  218. ];
  219. var res = JSON.parse(JSON.stringify(installerController.get('content.stacks')));
  220. expect(resolve).to.be.true;
  221. expect(res).to.be.eql(expected);
  222. });
  223. });
  224. describe('#checkRepoURLErrorCallback', function() {
  225. it ('Should check stacks for error', function() {
  226. var stacks = Em.A([
  227. Em.Object.create({
  228. isSelected: false
  229. }),
  230. Em.Object.create({
  231. isSelected: true,
  232. reload: false,
  233. id: 'nn-cc',
  234. repositories: Em.A([
  235. Em.Object.create({
  236. repoId: 11,
  237. isSelected: true
  238. })
  239. ]),
  240. operatingSystems: Em.A([
  241. Em.Object.create({
  242. isSelected: true,
  243. id: 1,
  244. repositories: Em.A([
  245. Em.Object.create({
  246. repoId: 11,
  247. errorTitle: '1',
  248. errorContent: '1',
  249. validation: ''
  250. })
  251. ])
  252. })
  253. ])
  254. })
  255. ]);
  256. var resolve = false;
  257. var data = {
  258. osId: 1,
  259. repoId: 11,
  260. dfd: {
  261. reject: function() {
  262. resolve = true;
  263. }
  264. }
  265. };
  266. var req = {
  267. status: 500,
  268. statusText: 'error'
  269. };
  270. installerController.set('content.stacks', stacks);
  271. installerController.checkRepoURLErrorCallback(req,{},{},{},data);
  272. var expected = [
  273. {
  274. "isSelected": false
  275. },
  276. {
  277. "isSelected": true,
  278. "reload": false,
  279. "id": "nn-cc",
  280. "repositories": [
  281. {
  282. "repoId": 11,
  283. "isSelected": true
  284. }
  285. ],
  286. "operatingSystems": [
  287. {
  288. "isSelected": true,
  289. "id": 1,
  290. "repositories": [
  291. {
  292. "repoId": 11,
  293. "errorTitle": "500:error",
  294. "errorContent": "",
  295. "validation": "icon-exclamation-sign"
  296. }
  297. ]
  298. }
  299. ]
  300. }
  301. ];
  302. var res = JSON.parse(JSON.stringify(installerController.get('content.stacks')));
  303. expect(resolve).to.be.true;
  304. expect(res).to.be.eql(expected);
  305. });
  306. });
  307. describe('#loadStacks', function() {
  308. it ('Should resolve promise with true', function() {
  309. installerController.set('content.stacks', Em.Object.create({
  310. length: 2
  311. }));
  312. var res = installerController.loadStacks();
  313. res.then(function(data){
  314. expect(data).to.be.true;
  315. });
  316. });
  317. it ('Should resolve promise with false', function() {
  318. installerController.set('content.stacks', null);
  319. var res = installerController.loadStacks();
  320. res.then(function(data){
  321. expect(data).to.be.false;
  322. });
  323. });
  324. });
  325. describe('#setLowerStepsDisable', function() {
  326. it ('Should disable lower steps', function() {
  327. var steps = Em.A([
  328. Em.Object.create({
  329. step: 0,
  330. value: false
  331. }),
  332. Em.Object.create({
  333. step: 1,
  334. value: false
  335. }),
  336. Em.Object.create({
  337. step: 2,
  338. value: false
  339. }),
  340. Em.Object.create({
  341. step: 3,
  342. value: false
  343. }),
  344. Em.Object.create({
  345. step: 4,
  346. value: false
  347. })
  348. ]);
  349. installerController.set('isStepDisabled', steps);
  350. installerController.setLowerStepsDisable(3);
  351. var expected = [
  352. {
  353. "step": 0,
  354. "value": true
  355. },
  356. {
  357. "step": 1,
  358. "value": true
  359. },
  360. {
  361. "step": 2,
  362. "value": true
  363. },
  364. {
  365. "step": 3,
  366. "value": false
  367. },
  368. {
  369. "step": 4,
  370. "value": false
  371. }
  372. ];
  373. var res = JSON.parse(JSON.stringify(installerController.get('isStepDisabled')));
  374. expect(res).to.eql(expected);
  375. });
  376. });
  377. describe('#setStepsEnable', function() {
  378. it ('Should enable next steps', function() {
  379. var steps = Em.A([
  380. Em.Object.create({
  381. step: 0,
  382. value: false
  383. }),
  384. Em.Object.create({
  385. step: 1,
  386. value: false
  387. }),
  388. Em.Object.create({
  389. step: 2,
  390. value: false
  391. }),
  392. Em.Object.create({
  393. step: 3,
  394. value: false
  395. }),
  396. Em.Object.create({
  397. step: 4,
  398. value: false
  399. })
  400. ]);
  401. installerController.set('isStepDisabled', steps);
  402. installerController.totalSteps = steps.length - 1;
  403. installerController.set('currentStep',2);
  404. var expected = [
  405. {
  406. "step": 0,
  407. "value": false
  408. },
  409. {
  410. "step": 1,
  411. "value": true
  412. },
  413. {
  414. "step": 2,
  415. "value": true
  416. },
  417. {
  418. "step": 3,
  419. "value": true
  420. },
  421. {
  422. "step": 4,
  423. "value": true
  424. }
  425. ];
  426. var res = JSON.parse(JSON.stringify(installerController.get('isStepDisabled')));
  427. expect(res).to.eql(expected);
  428. });
  429. });
  430. describe('#loadMap', function() {
  431. it ('Should load cluster', function() {
  432. var loadCluster = false;
  433. var checker = {
  434. load: function() {
  435. loadCluster = true;
  436. }
  437. };
  438. installerController.loadMap['0'][0].callback.call(checker);
  439. expect(loadCluster).to.be.true;
  440. });
  441. it ('Should load stacks', function() {
  442. var loadStacks = false;
  443. var checker = {
  444. loadStacks: function() {
  445. return {
  446. always: function() {
  447. loadStacks = true;
  448. }
  449. };
  450. }
  451. };
  452. installerController.loadMap['1'][0].callback.call(checker);
  453. expect(loadStacks).to.be.true;
  454. });
  455. it ('Should load stacks async', function() {
  456. var loadStacksVersions = false;
  457. var checker = {
  458. loadStacksVersions: function() {
  459. loadStacksVersions = true;
  460. }
  461. };
  462. installerController.loadMap['1'][1].callback.call(checker, true).then(function(data){
  463. expect(data).to.be.true;
  464. });
  465. expect(loadStacksVersions).to.be.false;
  466. });
  467. it ('Should load installOptions', function() {
  468. var loadStacks = false;
  469. var checker = {
  470. load: function() {
  471. loadStacks = true;
  472. }
  473. };
  474. installerController.loadMap['2'][0].callback.call(checker);
  475. expect(loadStacks).to.be.true;
  476. });
  477. it ('Should load loadConfirmedHosts', function() {
  478. var loadConfirmedHosts = false;
  479. var checker = {
  480. loadConfirmedHosts: function() {
  481. loadConfirmedHosts = true;
  482. }
  483. };
  484. installerController.loadMap['3'][0].callback.call(checker);
  485. expect(loadConfirmedHosts).to.be.true;
  486. });
  487. it ('Should load loadServices', function() {
  488. var loadServices = false;
  489. var checker = {
  490. loadServices: function() {
  491. loadServices = true;
  492. }
  493. };
  494. installerController.loadMap['4'][0].callback.call(checker);
  495. expect(loadServices).to.be.true;
  496. });
  497. it ('Should load loadServices', function() {
  498. var setSkipSlavesStep = false;
  499. var loadMasterComponentHosts = false;
  500. var loadConfirmedHosts = false;
  501. var loadRecommendations = false;
  502. var checker = {
  503. setSkipSlavesStep: function() {
  504. setSkipSlavesStep = true;
  505. },
  506. loadMasterComponentHosts: function() {
  507. loadMasterComponentHosts = true;
  508. },
  509. loadConfirmedHosts: function() {
  510. loadConfirmedHosts = true;
  511. },
  512. loadRecommendations: function() {
  513. loadRecommendations = true;
  514. }
  515. };
  516. installerController.loadMap['5'][0].callback.call(checker);
  517. expect(loadConfirmedHosts).to.be.true;
  518. expect(setSkipSlavesStep).to.be.true;
  519. expect(loadMasterComponentHosts).to.be.true;
  520. expect(loadRecommendations).to.be.true;
  521. });
  522. it ('Should load serviceConfigGroups', function() {
  523. var loadServiceConfigGroups = false;
  524. var loadServiceConfigProperties = false;
  525. var loadCurrentHostGroups = false;
  526. var loadRecommendationsConfigs = false;
  527. var loadConfigThemes = false;
  528. var checker = {
  529. loadServiceConfigGroups: function() {
  530. loadServiceConfigGroups = true;
  531. },
  532. loadServiceConfigProperties: function() {
  533. loadServiceConfigProperties = true;
  534. },
  535. loadCurrentHostGroups: function() {
  536. loadCurrentHostGroups = true;
  537. },
  538. loadRecommendationsConfigs: function() {
  539. loadRecommendationsConfigs = true;
  540. },
  541. loadConfigThemes: function() {
  542. loadConfigThemes = true;
  543. }
  544. };
  545. installerController.loadMap['7'][0].callback.call(checker);
  546. expect(loadServiceConfigGroups).to.be.true;
  547. expect(loadServiceConfigProperties).to.be.true;
  548. expect(loadCurrentHostGroups).to.be.true;
  549. expect(loadRecommendationsConfigs).to.be.true;
  550. expect(loadConfigThemes).to.be.true;
  551. });
  552. it ('Should load clients', function() {
  553. var loadSlaveComponentHosts = false;
  554. var loadClients = false;
  555. var loadRecommendations = false;
  556. var checker = {
  557. loadSlaveComponentHosts: function() {
  558. loadSlaveComponentHosts = true;
  559. },
  560. loadClients: function() {
  561. loadClients = true;
  562. },
  563. loadRecommendations: function() {
  564. loadRecommendations = true;
  565. }
  566. };
  567. installerController.loadMap['6'][0].callback.call(checker);
  568. expect(loadSlaveComponentHosts).to.be.true;
  569. expect(loadClients).to.be.true;
  570. expect(loadRecommendations).to.be.true;
  571. });
  572. });
  573. describe('#removeHosts', function() {
  574. var hostsDb = {
  575. 'h1': {},
  576. 'h2': {},
  577. 'h3': {},
  578. 'h4': {}
  579. };
  580. beforeEach(function () {
  581. sinon.stub(installerController, 'getDBProperty').returns(hostsDb);
  582. });
  583. afterEach(function () {
  584. installerController.getDBProperty.restore();
  585. });
  586. it ('Should remove hosts from the list', function() {
  587. var hosts = Em.A([
  588. {
  589. name: 'h1'
  590. },
  591. {
  592. name: 'h2'
  593. },
  594. {
  595. name: 'h3'
  596. }
  597. ]);
  598. installerController.removeHosts(hosts);
  599. expect(hostsDb).to.eql({
  600. 'h4': {}
  601. });
  602. });
  603. });
  604. describe('#allHosts', function() {
  605. it ('Should return hosts', function() {
  606. var hosts = {
  607. 'h1': {
  608. disk_info: Em.A([{
  609. available: 1,
  610. size: 10
  611. }]),
  612. hostComponents: Em.A([])
  613. }
  614. };
  615. var masterComponentHosts = Em.A([
  616. {
  617. hostName: 'h1',
  618. component: 'component',
  619. display_name: 'n1'
  620. }
  621. ]);
  622. var slaveComponentHosts = Em.A([
  623. {
  624. hosts: Em.A([
  625. {
  626. hostName: 'h1'
  627. }
  628. ])
  629. }
  630. ]);
  631. installerController.set('content.hosts', hosts);
  632. installerController.set('content.masterComponentHosts', masterComponentHosts);
  633. installerController.set('content.slaveComponentHosts', slaveComponentHosts);
  634. var res = JSON.parse(JSON.stringify(installerController.get('allHosts')));
  635. expect(res).to.eql([
  636. {
  637. "diskInfo": [
  638. {
  639. "available": 1,
  640. "size": 10
  641. }
  642. ],
  643. "diskTotal": 0.0000095367431640625,
  644. "diskFree": 9.5367431640625e-7,
  645. "hostComponents": [
  646. {
  647. "componentName": "component",
  648. "displayName": "n1"
  649. },
  650. {}
  651. ]
  652. }
  653. ]);
  654. });
  655. });
  656. describe('#loadServiceConfigProperties', function() {
  657. beforeEach(function () {
  658. sinon.stub(installerController, 'getDBProperty').returns({
  659. value: 2
  660. });
  661. });
  662. afterEach(function () {
  663. installerController.getDBProperty.restore();
  664. });
  665. it ('Should load service config property', function() {
  666. installerController.loadServiceConfigProperties();
  667. expect(installerController.get('content.serviceConfigProperties')).to.eql({
  668. "value": 2
  669. });
  670. });
  671. });
  672. describe('#saveServices', function() {
  673. it ('Should return correct names', function() {
  674. var stepController = Em.A([
  675. Em.Object.create({
  676. isInstalled: true,
  677. isSelected: true,
  678. serviceName: 'i1'
  679. }),
  680. Em.Object.create({
  681. isInstalled: false,
  682. isSelected: true,
  683. serviceName: 'i2'
  684. }),
  685. Em.Object.create({
  686. isInstalled: true,
  687. isSelected: false,
  688. serviceName: 'i3'
  689. })
  690. ]);
  691. installerController.saveServices(stepController);
  692. expect(installerController.get('content.selectedServiceNames')).to.eql(['i1','i2']);
  693. expect(installerController.get('content.installedServiceNames')).to.eql(['i1','i3']);
  694. });
  695. });
  696. describe('#saveClients', function() {
  697. it ('Should return correct clients names', function() {
  698. var stepController = Em.Object.create({
  699. content: Em.A([
  700. Em.Object.create({
  701. isInstalled: true,
  702. isSelected: true,
  703. serviceName: 'i1',
  704. serviceComponents: Em.A([
  705. Em.Object.create({
  706. isClient: true,
  707. componentName: 'name',
  708. displayName: 'dname'
  709. })
  710. ])
  711. }),
  712. Em.Object.create({
  713. isInstalled: false,
  714. isSelected: true,
  715. serviceName: 'i2',
  716. serviceComponents: Em.A([
  717. Em.Object.create({
  718. isClient: false
  719. })
  720. ])
  721. }),
  722. Em.Object.create({
  723. isInstalled: true,
  724. isSelected: false,
  725. serviceName: 'i3',
  726. serviceComponents: Em.A([
  727. Em.Object.create({
  728. isClient: false
  729. })
  730. ])
  731. })
  732. ])
  733. });
  734. installerController.saveClients(stepController);
  735. var res = JSON.parse(JSON.stringify(installerController.get('content.clients')));
  736. expect(res).to.eql([
  737. {
  738. "component_name": "name",
  739. "display_name": "dname",
  740. "isInstalled": false
  741. }
  742. ]);
  743. });
  744. });
  745. describe('#saveMasterComponentHosts', function() {
  746. beforeEach(function () {
  747. sinon.stub(installerController, 'getDBProperty').returns({
  748. 'h1': {
  749. id: 11
  750. },
  751. 'h3': {
  752. id: 13
  753. },
  754. 'h2': {
  755. id: 12
  756. }
  757. });
  758. });
  759. afterEach(function () {
  760. installerController.getDBProperty.restore();
  761. });
  762. it ('Should return hosts', function() {
  763. var stepController = Em.Object.create({
  764. selectedServicesMasters: Em.A([
  765. Em.Object.create({
  766. display_name: 'n1',
  767. component_name: 'c1',
  768. serviceId: 1,
  769. selectedHost: 'h1'
  770. })
  771. ])
  772. });
  773. installerController.saveMasterComponentHosts(stepController);
  774. expect(installerController.get('content.masterComponentHosts')).to.eql([
  775. {
  776. "display_name": "n1",
  777. "component": "c1",
  778. "serviceId": 1,
  779. "isInstalled": false,
  780. "host_id": 11
  781. }
  782. ]);
  783. });
  784. });
  785. describe('#loadConfirmedHosts', function() {
  786. beforeEach(function () {
  787. sinon.stub(installerController, 'getDBProperty').returns({
  788. 'h1': {
  789. id: 11
  790. },
  791. 'h3': {
  792. id: 13
  793. },
  794. 'h2': {
  795. id: 12
  796. }
  797. });
  798. });
  799. afterEach(function () {
  800. installerController.getDBProperty.restore();
  801. });
  802. it ('Should load hosts from db', function() {
  803. installerController.loadConfirmedHosts();
  804. expect(installerController.get('content.hosts')).to.eql({
  805. 'h1': {
  806. id: 11
  807. },
  808. 'h3': {
  809. id: 13
  810. },
  811. 'h2': {
  812. id: 12
  813. }
  814. });
  815. });
  816. });
  817. describe('#loadMasterComponentHosts', function() {
  818. beforeEach(function () {
  819. sinon.stub(installerController, 'getDBProperties', function(key) {
  820. return {
  821. masterComponentHosts: Em.A([
  822. {
  823. hostName: '',
  824. host_id: 11
  825. }
  826. ]),
  827. hosts: {
  828. 'h1': {
  829. id: 11
  830. },
  831. 'h3': {
  832. id: 13
  833. },
  834. 'h2': {
  835. id: 12
  836. }
  837. }
  838. }
  839. });
  840. });
  841. afterEach(function () {
  842. installerController.getDBProperties.restore();
  843. });
  844. it ('Should load hosts', function() {
  845. installerController.loadMasterComponentHosts();
  846. expect(installerController.get('content.masterComponentHosts')).to.eql([
  847. {
  848. "hostName": "h1",
  849. "host_id": 11
  850. }
  851. ]);
  852. });
  853. });
  854. describe('#loadSlaveComponentHosts', function() {
  855. beforeEach(function () {
  856. sinon.stub(installerController, 'getDBProperties', function() {
  857. return {
  858. hosts: {
  859. 'h1': {
  860. id: 11
  861. },
  862. 'h3': {
  863. id: 13
  864. },
  865. 'h2': {
  866. id: 12
  867. }
  868. },
  869. slaveComponentHosts: Em.A([
  870. {
  871. hosts: Em.A([
  872. {
  873. hostName: '',
  874. host_id: 11
  875. }
  876. ])
  877. }
  878. ])
  879. };
  880. });
  881. });
  882. afterEach(function () {
  883. installerController.getDBProperties.restore();
  884. });
  885. it ('Should load slave hosts', function() {
  886. installerController.loadSlaveComponentHosts();
  887. expect(installerController.get('content.slaveComponentHosts')).to.eql([
  888. {
  889. "hosts": [
  890. {
  891. "hostName": "h1",
  892. "host_id": 11
  893. }
  894. ]
  895. }
  896. ]);
  897. });
  898. });
  899. describe('#getServerVersionSuccessCallback', function () {
  900. var cases = [
  901. {
  902. osFamily: 'redhat5',
  903. expected: false
  904. },
  905. {
  906. osFamily: 'redhat6',
  907. expected: true
  908. },
  909. {
  910. osFamily: 'suse11',
  911. expected: false
  912. }
  913. ],
  914. title = 'App.isManagedMySQLForHiveEnabled should be {0} for {1}';
  915. cases.forEach(function (item) {
  916. it(title.format(item.expected, item.osFamily), function () {
  917. installerController.getServerVersionSuccessCallback({
  918. 'RootServiceComponents': {
  919. 'component_version': '',
  920. 'properties': {
  921. 'server.os_family': item.osFamily
  922. }
  923. }
  924. });
  925. expect(App.get('isManagedMySQLForHiveEnabled')).to.equal(item.expected);
  926. });
  927. });
  928. });
  929. describe('#validateJDKVersion', function() {
  930. var tests = [
  931. {
  932. isCustomJDK: false,
  933. ambariProperties: {
  934. 'java.version': '1.8'
  935. },
  936. successCallbackCalled: false,
  937. popupCalled: true,
  938. stacks: [Em.Object.create({
  939. minJdkVersion: '1.6',
  940. maxJdkVersion: '1.7',
  941. isSelected: true
  942. })],
  943. m: 'JDK 1.8, stack supports 1.6-1.7 popup should be displayed'
  944. },
  945. {
  946. isCustomJDK: false,
  947. ambariProperties: {
  948. 'java.version': '1.8'
  949. },
  950. successCallbackCalled: true,
  951. popupCalled: false,
  952. stacks: [Em.Object.create({
  953. minJdkVersion: '1.6',
  954. maxJdkVersion: '1.8',
  955. isSelected: true
  956. })],
  957. m: 'JDK 1.8, stack supports 1.7-1.8 procceed installation without warning'
  958. },
  959. {
  960. isCustomJDK: false,
  961. ambariProperties: {
  962. 'java.version': '1.5'
  963. },
  964. successCallbackCalled: false,
  965. popupCalled: true,
  966. stacks: [Em.Object.create({
  967. minJdkVersion: '1.6',
  968. maxJdkVersion: '1.8',
  969. isSelected: true
  970. })],
  971. m: 'JDK 1.5, stack supports 1.6-1.8, popup should be displayed'
  972. },
  973. {
  974. isCustomJDK: false,
  975. ambariProperties: {
  976. 'java.version': '1.8'
  977. },
  978. successCallbackCalled: true,
  979. popupCalled: false,
  980. stacks: [Em.Object.create({
  981. isSelected: true
  982. })],
  983. m: 'JDK 1.8, min, max jdk missed in stack definition, procceed installation without warning'
  984. },
  985. {
  986. isCustomJDK: true,
  987. ambariProperties: {
  988. 'java.version': '1.8'
  989. },
  990. successCallbackCalled: true,
  991. popupCalled: false,
  992. stacks: [Em.Object.create({
  993. minJdkVersion: '1.6',
  994. maxJdkVersion: '1.8',
  995. isSelected: true
  996. })],
  997. m: 'JDK 1.8, custom jdk location used, procceed installation without warning'
  998. }
  999. ];
  1000. tests.forEach(function(test) {
  1001. it(test.m, function() {
  1002. sinon.stub(App.Stack, 'find').returns(test.stacks);
  1003. sinon.stub(App.router, 'get').withArgs('clusterController.isCustomJDK').returns(test.isCustomJDK)
  1004. .withArgs('clusterController.ambariProperties').returns(test.ambariProperties);
  1005. sinon.stub(App, 'showConfirmationPopup', Em.K);
  1006. var successCallback = sinon.spy();
  1007. installerController.validateJDKVersion(successCallback);
  1008. expect(successCallback.called).to.be.eql(test.successCallbackCalled);
  1009. expect(App.showConfirmationPopup.called).to.be.eql(test.popupCalled);
  1010. App.router.get.restore();
  1011. App.Stack.find.restore();
  1012. App.showConfirmationPopup.restore();
  1013. });
  1014. });
  1015. });
  1016. });