step3_controller_test.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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/highAvailability/resourceManager/step3_controller');
  20. describe('App.RMHighAvailabilityWizardStep3Controller', function () {
  21. describe('#isSubmitDisabled', function () {
  22. var controller = App.RMHighAvailabilityWizardStep3Controller.create({
  23. content: Em.Object.create({})
  24. }),
  25. cases = [
  26. {
  27. isLoaded: false,
  28. isSubmitDisabled: true,
  29. title: 'wizard step content not loaded'
  30. },
  31. {
  32. isLoaded: true,
  33. isSubmitDisabled: false,
  34. title: 'wizard step content loaded'
  35. }
  36. ];
  37. cases.forEach(function (item) {
  38. it(item.title, function () {
  39. controller.set('isLoaded', item.isLoaded);
  40. expect(controller.get('isSubmitDisabled')).to.equal(item.isSubmitDisabled);
  41. });
  42. });
  43. });
  44. describe('#loadConfigTagsSuccessCallback', function () {
  45. var controller = App.RMHighAvailabilityWizardStep3Controller.create({
  46. content: Em.Object.create({})
  47. });
  48. beforeEach(function () {
  49. sinon.stub(App.ajax, 'send', Em.K);
  50. });
  51. afterEach(function () {
  52. App.ajax.send.restore();
  53. });
  54. it('should send proper ajax request', function () {
  55. controller.loadConfigTagsSuccessCallback({
  56. 'Clusters': {
  57. 'desired_configs': {
  58. 'zoo.cfg': {
  59. 'tag': 1
  60. },
  61. 'yarn-site': {
  62. 'tag': 1
  63. }
  64. }
  65. }
  66. }, {}, {
  67. 'serviceConfig': {}
  68. });
  69. var data = App.ajax.send.args[0][0].data;
  70. expect(data.urlParams).to.equal('(type=zoo.cfg&tag=1)|(type=yarn-site&tag=1)');
  71. expect(data.serviceConfig).to.eql({});
  72. });
  73. });
  74. describe('#loadConfigsSuccessCallback', function () {
  75. var controller = App.RMHighAvailabilityWizardStep3Controller.create({
  76. content: Em.Object.create({})
  77. }),
  78. cases = [
  79. {
  80. 'items': [],
  81. 'params': {
  82. 'serviceConfig': {}
  83. },
  84. 'port': '2181',
  85. 'webAddressPort' : ':8088',
  86. 'httpsWebAddressPort' : ':8090',
  87. 'title': 'empty response'
  88. },
  89. {
  90. 'items': [
  91. {
  92. 'type': 'zoo.cfg'
  93. },
  94. {
  95. 'type': 'yarn-site'
  96. }
  97. ],
  98. 'params': {
  99. 'serviceConfig': {}
  100. },
  101. 'port': '2181',
  102. 'webAddressPort' : ':8088',
  103. 'httpsWebAddressPort' : ':8090',
  104. 'title': 'no zoo.cfg properties received'
  105. },
  106. {
  107. 'items': [
  108. {
  109. 'type': 'zoo.cfg',
  110. 'properties': {
  111. 'n': 'v'
  112. }
  113. },
  114. {
  115. 'type': 'yarn-site',
  116. 'properties': {
  117. 'n': 'v'
  118. }
  119. }
  120. ],
  121. 'params': {
  122. 'serviceConfig': {}
  123. },
  124. 'port': '2181',
  125. 'webAddressPort' : ':8088',
  126. 'httpsWebAddressPort' : ':8090',
  127. 'title': 'no clientPort property received'
  128. },
  129. {
  130. 'items': [
  131. {
  132. 'type': 'zoo.cfg',
  133. 'properties': {
  134. 'clientPort': '2182'
  135. }
  136. },
  137. {
  138. 'type': 'yarn-site',
  139. 'properties': {
  140. 'yarn.resourcemanager.webapp.address' : 'c6402.ambari.apache.org:7777',
  141. 'yarn.resourcemanager.webapp.https.address' : 'c6402.ambari.apache.org:8888'
  142. }
  143. }
  144. ],
  145. 'params': {
  146. 'serviceConfig': {}
  147. },
  148. 'port': '2182',
  149. 'webAddressPort' : ':7777',
  150. 'httpsWebAddressPort' : ':8888',
  151. 'title': 'clientPort property received'
  152. }
  153. ];
  154. beforeEach(function () {
  155. sinon.stub(controller, 'setDynamicConfigValues', Em.K);
  156. });
  157. afterEach(function () {
  158. controller.setDynamicConfigValues.restore();
  159. });
  160. cases.forEach(function (item) {
  161. it(item.title, function () {
  162. controller.loadConfigsSuccessCallback({
  163. items: item.items
  164. }, {}, item.params);
  165. expect(controller.get('selectedService')).to.eql({});
  166. expect(controller.get('isLoaded')).to.be.true;
  167. });
  168. });
  169. });
  170. describe('#loadConfigsSuccessCallback=loadConfigsErrorCallback(we have one callback for bouth cases)', function () {
  171. var controller = App.RMHighAvailabilityWizardStep3Controller.create({
  172. content: Em.Object.create({})
  173. });
  174. beforeEach(function () {
  175. sinon.stub(controller, 'setDynamicConfigValues', Em.K);
  176. });
  177. afterEach(function () {
  178. controller.setDynamicConfigValues.restore();
  179. });
  180. it('should proceed with default value', function () {
  181. controller.loadConfigsSuccessCallback({}, {}, {}, {}, {
  182. serviceConfig: {}
  183. });
  184. expect(controller.get('selectedService')).to.eql({});
  185. expect(controller.get('isLoaded')).to.be.true;
  186. });
  187. });
  188. describe('#setDynamicConfigValues', function () {
  189. var data = {
  190. items: [
  191. {
  192. type: 'zoo.cfg',
  193. properties: {
  194. clientPort: 2222
  195. }
  196. },
  197. {
  198. type: 'yarn-site',
  199. properties: {
  200. 'yarn.resourcemanager.webapp.address': 'lclhst:1234',
  201. 'yarn.resourcemanager.webapp.https.address': 'lclhst:4321'
  202. }
  203. }
  204. ]
  205. };
  206. var controller = App.RMHighAvailabilityWizardStep3Controller.create({
  207. content: Em.Object.create({
  208. masterComponentHosts: [
  209. {component: 'RESOURCEMANAGER', hostName: 'h0', isInstalled: true},
  210. {component: 'RESOURCEMANAGER', hostName: 'h1', isInstalled: false},
  211. {component: 'ZOOKEEPER_SERVER', hostName: 'h2', isInstalled: true},
  212. {component: 'ZOOKEEPER_SERVER', hostName: 'h3', isInstalled: true}
  213. ],
  214. slaveComponentHosts: [],
  215. hosts: {},
  216. rmHosts: {
  217. currentRM: 'h0',
  218. additionalRM: 'h1'
  219. }
  220. })
  221. }),
  222. configs = {
  223. configs: [
  224. Em.Object.create({
  225. name: 'yarn.resourcemanager.hostname.rm1'
  226. }),
  227. Em.Object.create({
  228. name: 'yarn.resourcemanager.hostname.rm2'
  229. }),
  230. Em.Object.create({
  231. name: 'yarn.resourcemanager.zk-address'
  232. }),
  233. Em.Object.create({
  234. name: 'yarn.resourcemanager.webapp.address.rm1'
  235. }),
  236. Em.Object.create({
  237. name: 'yarn.resourcemanager.webapp.address.rm2'
  238. }),
  239. Em.Object.create({
  240. name: 'yarn.resourcemanager.webapp.https.address.rm1'
  241. }),
  242. Em.Object.create({
  243. name: 'yarn.resourcemanager.webapp.https.address.rm2'
  244. }),
  245. Em.Object.create({
  246. name: 'yarn.resourcemanager.ha'
  247. }),
  248. Em.Object.create({
  249. name: 'yarn.resourcemanager.scheduler.ha'
  250. })
  251. ]
  252. };
  253. beforeEach(function () {
  254. sinon.stub(App.HostComponent, 'find', function () {
  255. return [
  256. Em.Object.create({
  257. componentName: 'ZOOKEEPER_SERVER',
  258. hostName: 'h2'
  259. }),
  260. Em.Object.create({
  261. componentName: 'ZOOKEEPER_SERVER',
  262. hostName: 'h3'
  263. }),
  264. Em.Object.create({
  265. componentName: 'RESOURCEMANAGER',
  266. hostName: 'h4'
  267. })
  268. ];
  269. });
  270. });
  271. afterEach(function () {
  272. App.HostComponent.find.restore();
  273. });
  274. it('setting new RM properties values', function () {
  275. controller.setDynamicConfigValues(configs, data);
  276. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm1').get('value')).to.equal('h0');
  277. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm1').get('recommendedValue')).to.equal('h0');
  278. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm2').get('value')).to.equal('h1');
  279. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm2').get('recommendedValue')).to.equal('h1');
  280. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1').get('value')).to.equal('h0:1234');
  281. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1').get('recommendedValue')).to.equal('h0:1234');
  282. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2').get('value')).to.equal('h1:1234');
  283. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2').get('recommendedValue')).to.equal('h1:1234');
  284. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1').get('value')).to.equal('h0:4321');
  285. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1').get('recommendedValue')).to.equal('h0:4321');
  286. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2').get('value')).to.equal('h1:4321');
  287. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2').get('recommendedValue')).to.equal('h1:4321');
  288. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.zk-address').get('value')).to.equal('h2:2222,h3:2222');
  289. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.zk-address').get('recommendedValue')).to.equal('h2:2222,h3:2222');
  290. });
  291. it('Setting new HAWQ RM properties values', function () {
  292. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.ha').get('value')).to.equal('h0:8032,h1:8032');
  293. expect(configs.configs.findProperty('name', 'yarn.resourcemanager.scheduler.ha').get('recommendedValue')).to.equal('h0:8030,h1:8030');
  294. });
  295. });
  296. });