test_mapreduce2_client.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. #!/usr/bin/env python
  2. '''
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing, software
  12. distributed under the License is distributed on an "AS IS" BASIS,
  13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. See the License for the specific language governing permissions and
  15. limitations under the License.
  16. '''
  17. import json
  18. from mock.mock import MagicMock, call, patch
  19. from resource_management.libraries.functions import version
  20. from stacks.utils.RMFTestCase import *
  21. import os
  22. from resource_management.libraries import functions
  23. origin_exists = os.path.exists
  24. @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
  25. @patch.object(os.path, "exists", new=MagicMock(
  26. side_effect=lambda *args: origin_exists(args[0])
  27. if args[0][-2:] == "j2" else True))
  28. @patch.object(functions, "get_stack_version", new = MagicMock(return_value="2.2.0.0-1234"))
  29. class TestMapReduce2Client(RMFTestCase):
  30. COMMON_SERVICES_PACKAGE_DIR = "YARN/2.1.0.2.0/package"
  31. STACK_VERSION = "2.0.6"
  32. def test_configure_default(self):
  33. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  34. classname = "MapReduce2Client",
  35. command = "configure",
  36. config_file="default.json",
  37. stack_version = self.STACK_VERSION,
  38. target = RMFTestCase.TARGET_COMMON_SERVICES
  39. )
  40. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn',
  41. owner = 'yarn',
  42. group = 'hadoop',
  43. create_parents = True,
  44. cd_access = 'a',
  45. )
  46. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  47. owner = 'yarn',
  48. group = 'hadoop',
  49. create_parents = True,
  50. cd_access = 'a',
  51. )
  52. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  53. owner = 'yarn',
  54. group = 'hadoop',
  55. create_parents = True,
  56. cd_access = 'a',
  57. )
  58. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce',
  59. owner = 'mapred',
  60. group = 'hadoop',
  61. create_parents = True,
  62. cd_access = 'a',
  63. )
  64. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  65. owner = 'mapred',
  66. group = 'hadoop',
  67. create_parents = True,
  68. cd_access = 'a',
  69. )
  70. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce',
  71. owner = 'mapred',
  72. group = 'hadoop',
  73. create_parents = True,
  74. cd_access = 'a',
  75. )
  76. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  77. owner = 'mapred',
  78. group = 'hadoop',
  79. create_parents = True,
  80. cd_access = 'a',
  81. )
  82. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  83. owner = 'yarn',
  84. group = 'hadoop',
  85. create_parents = True,
  86. ignore_failures = True,
  87. cd_access = 'a',
  88. )
  89. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  90. owner = 'hdfs',
  91. group = 'hadoop',
  92. mode = 0644,
  93. conf_dir = '/etc/hadoop/conf',
  94. configurations = self.getConfig()['configurations']['core-site'],
  95. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  96. )
  97. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  98. owner = 'hdfs',
  99. group = 'hadoop',
  100. mode = 0644,
  101. conf_dir = '/etc/hadoop/conf',
  102. configurations = self.getConfig()['configurations']['hdfs-site'],
  103. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  104. )
  105. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  106. owner = 'yarn',
  107. group = 'hadoop',
  108. mode = 0644,
  109. conf_dir = '/etc/hadoop/conf',
  110. configurations = self.getConfig()['configurations']['mapred-site'],
  111. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  112. )
  113. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  114. owner = 'yarn',
  115. group = 'hadoop',
  116. mode = 0644,
  117. conf_dir = '/etc/hadoop/conf',
  118. configurations = self.getConfig()['configurations']['yarn-site'],
  119. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  120. )
  121. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  122. owner = 'yarn',
  123. group = 'hadoop',
  124. mode = 0644,
  125. conf_dir = '/etc/hadoop/conf',
  126. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  127. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  128. )
  129. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  130. owner = 'yarn',
  131. group = 'hadoop',
  132. )
  133. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  134. content = Template('yarn.conf.j2'),
  135. mode = 0644,
  136. )
  137. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  138. content = Template('mapreduce.conf.j2'),
  139. mode = 0644,
  140. )
  141. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  142. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  143. owner = 'yarn',
  144. group = 'hadoop',
  145. mode = 0755,
  146. )
  147. self.assertResourceCalled('File', '/usr/lib/hadoop-yarn/bin/container-executor',
  148. group = 'hadoop',
  149. mode = 02050,
  150. )
  151. self.assertResourceCalled('File', '/etc/hadoop/conf/container-executor.cfg',
  152. content = Template('container-executor.cfg.j2'),
  153. group = 'hadoop',
  154. mode = 0644,
  155. )
  156. self.assertResourceCalled('Directory', '/cgroups_test/cpu',
  157. group = 'hadoop',
  158. create_parents = True,
  159. mode = 0755,
  160. cd_access="a"
  161. )
  162. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  163. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  164. mode = 0755,
  165. owner = 'hdfs',
  166. )
  167. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  168. content = Template('taskcontroller.cfg.j2'),
  169. owner = 'hdfs',
  170. )
  171. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  172. owner = 'mapred',
  173. group = 'hadoop',
  174. conf_dir = '/etc/hadoop/conf',
  175. configurations = self.getConfig()['configurations']['mapred-site'],
  176. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  177. )
  178. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  179. owner = 'hdfs',
  180. group = 'hadoop',
  181. conf_dir = '/etc/hadoop/conf',
  182. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  183. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  184. )
  185. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  186. owner = 'mapred',
  187. group = 'hadoop',
  188. )
  189. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  190. owner = 'mapred',
  191. group = 'hadoop',
  192. )
  193. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  194. owner = 'mapred',
  195. group = 'hadoop',
  196. )
  197. self.assertNoMoreResources()
  198. def test_configure_secured(self):
  199. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  200. classname = "MapReduce2Client",
  201. command = "configure",
  202. config_file="secured.json",
  203. stack_version = self.STACK_VERSION,
  204. target = RMFTestCase.TARGET_COMMON_SERVICES
  205. )
  206. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn',
  207. owner = 'yarn',
  208. group = 'hadoop',
  209. create_parents = True,
  210. cd_access = 'a',
  211. )
  212. self.assertResourceCalled('Directory', '/var/run/hadoop-yarn/yarn',
  213. owner = 'yarn',
  214. group = 'hadoop',
  215. create_parents = True,
  216. cd_access = 'a',
  217. )
  218. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn/yarn',
  219. owner = 'yarn',
  220. group = 'hadoop',
  221. create_parents = True,
  222. cd_access = 'a',
  223. )
  224. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce',
  225. owner = 'mapred',
  226. group = 'hadoop',
  227. create_parents = True,
  228. cd_access = 'a',
  229. )
  230. self.assertResourceCalled('Directory', '/var/run/hadoop-mapreduce/mapred',
  231. owner = 'mapred',
  232. group = 'hadoop',
  233. create_parents = True,
  234. cd_access = 'a',
  235. )
  236. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce',
  237. owner = 'mapred',
  238. group = 'hadoop',
  239. create_parents = True,
  240. cd_access = 'a',
  241. )
  242. self.assertResourceCalled('Directory', '/var/log/hadoop-mapreduce/mapred',
  243. owner = 'mapred',
  244. group = 'hadoop',
  245. create_parents = True,
  246. cd_access = 'a',
  247. )
  248. self.assertResourceCalled('Directory', '/var/log/hadoop-yarn',
  249. owner = 'yarn',
  250. group = 'hadoop',
  251. create_parents = True,
  252. ignore_failures = True,
  253. cd_access = 'a',
  254. )
  255. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  256. owner = 'hdfs',
  257. group = 'hadoop',
  258. mode = 0644,
  259. conf_dir = '/etc/hadoop/conf',
  260. configurations = self.getConfig()['configurations']['core-site'],
  261. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  262. )
  263. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  264. owner = 'hdfs',
  265. group = 'hadoop',
  266. mode = 0644,
  267. conf_dir = '/etc/hadoop/conf',
  268. configurations = self.getConfig()['configurations']['hdfs-site'],
  269. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  270. )
  271. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  272. owner = 'yarn',
  273. group = 'hadoop',
  274. mode = 0644,
  275. conf_dir = '/etc/hadoop/conf',
  276. configurations = self.getConfig()['configurations']['mapred-site'],
  277. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  278. )
  279. self.assertResourceCalled('XmlConfig', 'yarn-site.xml',
  280. owner = 'yarn',
  281. group = 'hadoop',
  282. mode = 0644,
  283. conf_dir = '/etc/hadoop/conf',
  284. configurations = self.getConfig()['configurations']['yarn-site'],
  285. configuration_attributes = self.getConfig()['configuration_attributes']['yarn-site']
  286. )
  287. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  288. owner = 'yarn',
  289. group = 'hadoop',
  290. mode = 0644,
  291. conf_dir = '/etc/hadoop/conf',
  292. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  293. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  294. )
  295. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn.exclude',
  296. owner = 'yarn',
  297. group = 'hadoop',
  298. )
  299. self.assertResourceCalled('File', '/etc/security/limits.d/yarn.conf',
  300. content = Template('yarn.conf.j2'),
  301. mode = 0644,
  302. )
  303. self.assertResourceCalled('File', '/etc/security/limits.d/mapreduce.conf',
  304. content = Template('mapreduce.conf.j2'),
  305. mode = 0644,
  306. )
  307. self.assertResourceCalled('File', '/etc/hadoop/conf/yarn-env.sh',
  308. content = InlineTemplate(self.getConfig()['configurations']['yarn-env']['content']),
  309. owner = 'yarn',
  310. group = 'hadoop',
  311. mode = 0755,
  312. )
  313. self.assertResourceCalled('File', '/usr/lib/hadoop-yarn/bin/container-executor',
  314. group = 'hadoop',
  315. mode = 06050,
  316. )
  317. self.assertResourceCalled('File', '/etc/hadoop/conf/container-executor.cfg',
  318. content = Template('container-executor.cfg.j2'),
  319. group = 'hadoop',
  320. mode = 0644,
  321. )
  322. self.assertResourceCalled('Directory', '/cgroups_test/cpu',
  323. group = 'hadoop',
  324. create_parents = True,
  325. mode = 0755,
  326. cd_access="a"
  327. )
  328. self.assertResourceCalled('File', '/etc/hadoop/conf/mapred-env.sh',
  329. content = InlineTemplate(self.getConfig()['configurations']['mapred-env']['content']),
  330. mode = 0755,
  331. owner = 'root',
  332. )
  333. self.assertResourceCalled('File', '/usr/lib/hadoop/sbin/task-controller',
  334. owner = 'root',
  335. group = 'hadoop',
  336. mode = 06050,
  337. )
  338. self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
  339. content = Template('taskcontroller.cfg.j2'),
  340. owner = 'root',
  341. group = 'hadoop',
  342. mode = 0644,
  343. )
  344. self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
  345. owner = 'mapred',
  346. group = 'hadoop',
  347. conf_dir = '/etc/hadoop/conf',
  348. configurations = self.getConfig()['configurations']['mapred-site'],
  349. configuration_attributes = self.getConfig()['configuration_attributes']['mapred-site']
  350. )
  351. self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
  352. owner = 'hdfs',
  353. group = 'hadoop',
  354. conf_dir = '/etc/hadoop/conf',
  355. configurations = self.getConfig()['configurations']['capacity-scheduler'],
  356. configuration_attributes = self.getConfig()['configuration_attributes']['capacity-scheduler']
  357. )
  358. self.assertResourceCalled('File', '/etc/hadoop/conf/fair-scheduler.xml',
  359. owner = 'mapred',
  360. group = 'hadoop',
  361. )
  362. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-client.xml.example',
  363. owner = 'mapred',
  364. group = 'hadoop',
  365. )
  366. self.assertResourceCalled('File', '/etc/hadoop/conf/ssl-server.xml.example',
  367. owner = 'mapred',
  368. group = 'hadoop',
  369. )
  370. self.assertNoMoreResources()
  371. @patch.object(functions, "get_stack_version", new=MagicMock(return_value="2.2.0.0-2041"))
  372. def test_upgrade(self):
  373. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  374. classname = "MapReduce2Client",
  375. command = "restart",
  376. config_file="client-upgrade.json",
  377. stack_version = self.STACK_VERSION,
  378. target = RMFTestCase.TARGET_COMMON_SERVICES
  379. )
  380. # for now, it's enough that <stack-selector-tool> is confirmed
  381. self.assertResourceCalled("Execute", ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hadoop-client', '2.2.1.0-2067'), sudo=True)
  382. def test_pre_upgrade_restart_23(self):
  383. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/client-upgrade.json"
  384. with open(config_file, "r") as f:
  385. json_content = json.load(f)
  386. version = '2.3.0.0-1234'
  387. json_content['commandParams']['version'] = version
  388. mocks_dict = {}
  389. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
  390. classname = "MapReduce2Client",
  391. command = "pre_upgrade_restart",
  392. config_dict = json_content,
  393. stack_version = self.STACK_VERSION,
  394. target = RMFTestCase.TARGET_COMMON_SERVICES,
  395. call_mocks = [(0, None, ''), (0, None)],
  396. mocks_dict = mocks_dict)
  397. self.assertResourceCalledIgnoreEarlier('Execute', ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hadoop-client', version), sudo=True)
  398. self.assertNoMoreResources()
  399. self.assertEquals(1, mocks_dict['call'].call_count)
  400. self.assertEquals(1, mocks_dict['checked_call'].call_count)
  401. self.assertEquals(
  402. ('ambari-python-wrap', '/usr/bin/conf-select', 'set-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  403. mocks_dict['checked_call'].call_args_list[0][0][0])
  404. self.assertEquals(
  405. ('ambari-python-wrap', '/usr/bin/conf-select', 'create-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  406. mocks_dict['call'].call_args_list[0][0][0])