installer_test.js 31 KB

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