installer_test.js 25 KB

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