test_hbase_regionserver.py 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  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, patch
  19. from stacks.utils.RMFTestCase import *
  20. @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
  21. @patch("os.path.exists", new = MagicMock(return_value=True))
  22. class TestHbaseRegionServer(RMFTestCase):
  23. COMMON_SERVICES_PACKAGE_DIR = "HBASE/0.96.0.2.0/package"
  24. STACK_VERSION = "2.0.6"
  25. TMP_PATH = '/hadoop'
  26. def test_configure_default(self):
  27. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  28. classname = "HbaseRegionServer",
  29. command = "configure",
  30. config_file="default.json",
  31. hdp_stack_version = self.STACK_VERSION,
  32. target = RMFTestCase.TARGET_COMMON_SERVICES
  33. )
  34. self.assert_configure_default()
  35. self.assertNoMoreResources()
  36. def test_start_default(self):
  37. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  38. classname = "HbaseRegionServer",
  39. command = "start",
  40. config_file="default.json",
  41. hdp_stack_version = self.STACK_VERSION,
  42. target = RMFTestCase.TARGET_COMMON_SERVICES
  43. )
  44. self.assert_configure_default()
  45. self.assertResourceCalled('Execute', '/usr/lib/hbase/bin/hbase-daemon.sh --config /etc/hbase/conf start regionserver',
  46. not_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  47. user = 'hbase'
  48. )
  49. self.assertNoMoreResources()
  50. def test_stop_default(self):
  51. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  52. classname = "HbaseRegionServer",
  53. command = "stop",
  54. config_file="default.json",
  55. hdp_stack_version = self.STACK_VERSION,
  56. target = RMFTestCase.TARGET_COMMON_SERVICES
  57. )
  58. self.assertResourceCalled('Execute', '/usr/lib/hbase/bin/hbase-daemon.sh --config /etc/hbase/conf stop regionserver',
  59. only_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  60. on_timeout = '! ( ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1 ) || ambari-sudo.sh -H -E kill -9 `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid`',
  61. timeout = 30,
  62. user = 'hbase',
  63. )
  64. self.assertResourceCalled('File', '/var/run/hbase/hbase-hbase-regionserver.pid',
  65. action = ['delete'],
  66. )
  67. self.assertNoMoreResources()
  68. def test_configure_secured(self):
  69. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  70. classname = "HbaseRegionServer",
  71. command = "configure",
  72. config_file="secured.json",
  73. hdp_stack_version = self.STACK_VERSION,
  74. target = RMFTestCase.TARGET_COMMON_SERVICES
  75. )
  76. self.assert_configure_secured()
  77. self.assertNoMoreResources()
  78. def test_start_secured(self):
  79. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  80. classname = "HbaseRegionServer",
  81. command = "start",
  82. config_file="secured.json",
  83. hdp_stack_version = self.STACK_VERSION,
  84. target = RMFTestCase.TARGET_COMMON_SERVICES
  85. )
  86. self.assert_configure_secured()
  87. self.assertResourceCalled('Execute', '/usr/lib/hbase/bin/hbase-daemon.sh --config /etc/hbase/conf start regionserver',
  88. not_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  89. user = 'hbase',
  90. )
  91. self.assertNoMoreResources()
  92. def test_stop_secured(self):
  93. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  94. classname = "HbaseRegionServer",
  95. command = "stop",
  96. config_file="secured.json",
  97. hdp_stack_version = self.STACK_VERSION,
  98. target = RMFTestCase.TARGET_COMMON_SERVICES
  99. )
  100. self.assertResourceCalled('Execute', '/usr/lib/hbase/bin/hbase-daemon.sh --config /etc/hbase/conf stop regionserver',
  101. only_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  102. on_timeout = '! ( ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1 ) || ambari-sudo.sh -H -E kill -9 `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid`',
  103. timeout = 30,
  104. user = 'hbase',
  105. )
  106. self.assertResourceCalled('File', '/var/run/hbase/hbase-hbase-regionserver.pid',
  107. action = ['delete'],
  108. )
  109. self.assertNoMoreResources()
  110. def assert_configure_default(self):
  111. self.assertResourceCalled('Directory', '/etc/hbase',
  112. mode = 0755
  113. )
  114. self.assertResourceCalled('Directory', '/etc/hbase/conf',
  115. owner = 'hbase',
  116. group = 'hadoop',
  117. recursive = True,
  118. )
  119. self.assertResourceCalled('Directory', '/tmp',
  120. owner = 'hbase',
  121. group = 'hadoop',
  122. recursive = True,
  123. mode = 0777
  124. )
  125. self.assertResourceCalled('Directory', '/hadoop',
  126. recursive = True,
  127. cd_access = 'a',
  128. )
  129. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  130. sudo = True,
  131. )
  132. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  133. owner = 'hbase',
  134. group = 'hadoop',
  135. conf_dir = '/etc/hbase/conf',
  136. configurations = self.getConfig()['configurations']['hbase-site'],
  137. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  138. )
  139. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  140. owner = 'hbase',
  141. group = 'hadoop',
  142. conf_dir = '/etc/hbase/conf',
  143. configurations = self.getConfig()['configurations']['core-site'],
  144. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  145. )
  146. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  147. owner = 'hbase',
  148. group = 'hadoop',
  149. conf_dir = '/etc/hbase/conf',
  150. configurations = self.getConfig()['configurations']['hdfs-site'],
  151. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  152. )
  153. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  154. owner = 'hdfs',
  155. group = 'hadoop',
  156. conf_dir = '/etc/hadoop/conf',
  157. configurations = self.getConfig()['configurations']['hdfs-site'],
  158. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  159. )
  160. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  161. owner = 'hbase',
  162. group = 'hadoop',
  163. )
  164. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  165. owner = 'hbase',
  166. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  167. group = 'hadoop',
  168. )
  169. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  170. owner = 'root',
  171. group = 'root',
  172. recursive = True,
  173. )
  174. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  175. content = Template('hbase.conf.j2'),
  176. owner = 'root',
  177. group = 'root',
  178. mode = 0644,
  179. )
  180. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  181. owner = 'hbase',
  182. template_tag = 'GANGLIA-RS',
  183. )
  184. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  185. owner = 'hbase',
  186. template_tag = None,
  187. )
  188. self.assertResourceCalled('Directory', '/var/run/hbase',
  189. owner = 'hbase',
  190. recursive = True,
  191. mode = 0755,
  192. cd_access = 'a',
  193. )
  194. self.assertResourceCalled('Directory', '/var/log/hbase',
  195. owner = 'hbase',
  196. recursive = True,
  197. mode = 0755,
  198. cd_access = 'a',
  199. )
  200. self.assertResourceCalled('File',
  201. '/etc/hbase/conf/log4j.properties',
  202. mode=0644,
  203. group='hadoop',
  204. owner='hbase',
  205. content='log4jproperties\nline2'
  206. )
  207. def assert_configure_secured(self):
  208. self.assertResourceCalled('Directory', '/etc/hbase',
  209. mode = 0755
  210. )
  211. self.assertResourceCalled('Directory', '/etc/hbase/conf',
  212. owner = 'hbase',
  213. group = 'hadoop',
  214. recursive = True,
  215. )
  216. self.assertResourceCalled('Directory', '/tmp',
  217. owner = 'hbase',
  218. group = 'hadoop',
  219. recursive = True,
  220. mode = 0777
  221. )
  222. self.assertResourceCalled('Directory', '/hadoop',
  223. recursive = True,
  224. cd_access = 'a',
  225. )
  226. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  227. sudo = True,
  228. )
  229. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  230. owner = 'hbase',
  231. group = 'hadoop',
  232. conf_dir = '/etc/hbase/conf',
  233. configurations = self.getConfig()['configurations']['hbase-site'],
  234. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  235. )
  236. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  237. owner = 'hbase',
  238. group = 'hadoop',
  239. conf_dir = '/etc/hbase/conf',
  240. configurations = self.getConfig()['configurations']['core-site'],
  241. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  242. )
  243. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  244. owner = 'hbase',
  245. group = 'hadoop',
  246. conf_dir = '/etc/hbase/conf',
  247. configurations = self.getConfig()['configurations']['hdfs-site'],
  248. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  249. )
  250. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  251. owner = 'hdfs',
  252. group = 'hadoop',
  253. conf_dir = '/etc/hadoop/conf',
  254. configurations = self.getConfig()['configurations']['hdfs-site'],
  255. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  256. )
  257. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  258. owner = 'hbase',
  259. group = 'hadoop',
  260. )
  261. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  262. owner = 'hbase',
  263. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  264. group = 'hadoop',
  265. )
  266. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  267. owner = 'root',
  268. group = 'root',
  269. recursive = True,
  270. )
  271. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  272. content = Template('hbase.conf.j2'),
  273. owner = 'root',
  274. group = 'root',
  275. mode = 0644,
  276. )
  277. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  278. owner = 'hbase',
  279. template_tag = 'GANGLIA-RS',
  280. )
  281. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  282. owner = 'hbase',
  283. template_tag = None,
  284. )
  285. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hbase_regionserver_jaas.conf',
  286. owner = 'hbase',
  287. template_tag = None,
  288. )
  289. self.assertResourceCalled('Directory', '/var/run/hbase',
  290. owner = 'hbase',
  291. recursive = True,
  292. mode = 0755,
  293. cd_access = 'a',
  294. )
  295. self.assertResourceCalled('Directory', '/var/log/hbase',
  296. owner = 'hbase',
  297. recursive = True,
  298. mode = 0755,
  299. cd_access = 'a',
  300. )
  301. self.assertResourceCalled('File',
  302. '/etc/hbase/conf/log4j.properties',
  303. mode=0644,
  304. group='hadoop',
  305. owner='hbase',
  306. content='log4jproperties\nline2'
  307. )
  308. def test_start_default_22(self):
  309. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  310. classname = "HbaseRegionServer",
  311. command = "start",
  312. config_file="hbase-rs-2.2.json",
  313. hdp_stack_version = self.STACK_VERSION,
  314. target = RMFTestCase.TARGET_COMMON_SERVICES)
  315. self.assertResourceCalled('Directory', '/etc/hbase',
  316. mode = 0755)
  317. self.assertResourceCalled('Directory', '/usr/hdp/current/hbase-regionserver/conf',
  318. owner = 'hbase',
  319. group = 'hadoop',
  320. recursive = True)
  321. self.assertResourceCalled('Directory', '/tmp',
  322. owner = 'hbase',
  323. group = 'hadoop',
  324. recursive = True,
  325. mode = 0777
  326. )
  327. self.assertResourceCalled('Directory', '/hadoop',
  328. recursive = True,
  329. cd_access = 'a',
  330. )
  331. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  332. sudo = True,
  333. )
  334. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  335. owner = 'hbase',
  336. group = 'hadoop',
  337. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  338. configurations = self.getConfig()['configurations']['hbase-site'],
  339. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site'])
  340. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  341. owner = 'hbase',
  342. group = 'hadoop',
  343. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  344. configurations = self.getConfig()['configurations']['core-site'],
  345. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  346. )
  347. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  348. owner = 'hbase',
  349. group = 'hadoop',
  350. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  351. configurations = self.getConfig()['configurations']['hdfs-site'],
  352. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  353. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  354. owner = 'hdfs',
  355. group = 'hadoop',
  356. conf_dir = '/usr/hdp/current/hadoop-client/conf',
  357. configurations = self.getConfig()['configurations']['hdfs-site'],
  358. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  359. self.assertResourceCalled('XmlConfig', 'hbase-policy.xml',
  360. owner = 'hbase',
  361. group = 'hadoop',
  362. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  363. configurations = self.getConfig()['configurations']['hbase-policy'],
  364. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-policy'])
  365. self.assertResourceCalled('File', '/usr/hdp/current/hbase-regionserver/conf/hbase-env.sh',
  366. owner = 'hbase',
  367. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  368. group = 'hadoop'
  369. )
  370. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  371. owner = 'root',
  372. group = 'root',
  373. recursive = True,
  374. )
  375. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  376. content = Template('hbase.conf.j2'),
  377. owner = 'root',
  378. group = 'root',
  379. mode = 0644,
  380. )
  381. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/hadoop-metrics2-hbase.properties',
  382. owner = 'hbase',
  383. template_tag = 'GANGLIA-RS')
  384. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/regionservers',
  385. owner = 'hbase',
  386. template_tag = None)
  387. self.assertResourceCalled('Directory', '/var/run/hbase',
  388. owner = 'hbase',
  389. recursive = True,
  390. mode = 0755,
  391. cd_access = 'a',
  392. )
  393. self.assertResourceCalled('Directory', '/var/log/hbase',
  394. owner = 'hbase',
  395. recursive = True,
  396. mode = 0755,
  397. cd_access = 'a',
  398. )
  399. self.assertResourceCalled('File',
  400. '/usr/hdp/current/hbase-regionserver/conf/log4j.properties',
  401. mode=0644,
  402. group='hadoop',
  403. owner='hbase',
  404. content='log4jproperties\nline2')
  405. self.assertResourceCalled('Execute', '/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh --config /usr/hdp/current/hbase-regionserver/conf start regionserver',
  406. not_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  407. user = 'hbase')
  408. self.assertNoMoreResources()
  409. def test_start_default_22_with_phoenix_enabled(self):
  410. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  411. classname = "HbaseRegionServer",
  412. command = "start",
  413. config_file="hbase-rs-2.2-phoenix.json",
  414. hdp_stack_version = self.STACK_VERSION,
  415. target = RMFTestCase.TARGET_COMMON_SERVICES)
  416. self.assertResourceCalled('Directory', '/etc/hbase',
  417. mode = 0755)
  418. self.assertResourceCalled('Directory', '/usr/hdp/current/hbase-regionserver/conf',
  419. owner = 'hbase',
  420. group = 'hadoop',
  421. recursive = True)
  422. self.assertResourceCalled('Directory', '/tmp',
  423. owner = 'hbase',
  424. group = 'hadoop',
  425. recursive = True,
  426. mode = 0777
  427. )
  428. self.assertResourceCalled('Directory', '/hadoop',
  429. recursive = True,
  430. cd_access = 'a',
  431. )
  432. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  433. sudo = True,
  434. )
  435. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  436. owner = 'hbase',
  437. group = 'hadoop',
  438. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  439. configurations = self.getConfig()['configurations']['hbase-site'],
  440. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site'])
  441. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  442. owner = 'hbase',
  443. group = 'hadoop',
  444. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  445. configurations = self.getConfig()['configurations']['core-site'],
  446. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  447. )
  448. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  449. owner = 'hbase',
  450. group = 'hadoop',
  451. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  452. configurations = self.getConfig()['configurations']['hdfs-site'],
  453. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  454. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  455. owner = 'hdfs',
  456. group = 'hadoop',
  457. conf_dir = '/usr/hdp/current/hadoop-client/conf',
  458. configurations = self.getConfig()['configurations']['hdfs-site'],
  459. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  460. self.assertResourceCalled('XmlConfig', 'hbase-policy.xml',
  461. owner = 'hbase',
  462. group = 'hadoop',
  463. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  464. configurations = self.getConfig()['configurations']['hbase-policy'],
  465. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-policy'])
  466. self.assertResourceCalled('File', '/usr/hdp/current/hbase-regionserver/conf/hbase-env.sh',
  467. owner = 'hbase',
  468. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  469. group = 'hadoop'
  470. )
  471. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  472. owner = 'root',
  473. group = 'root',
  474. recursive = True,
  475. )
  476. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  477. content = Template('hbase.conf.j2'),
  478. owner = 'root',
  479. group = 'root',
  480. mode = 0644,
  481. )
  482. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/hadoop-metrics2-hbase.properties',
  483. owner = 'hbase',
  484. template_tag = 'GANGLIA-RS')
  485. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/regionservers',
  486. owner = 'hbase',
  487. template_tag = None)
  488. self.assertResourceCalled('Directory', '/var/run/hbase',
  489. owner = 'hbase',
  490. recursive = True,
  491. mode = 0755,
  492. cd_access = 'a',
  493. )
  494. self.assertResourceCalled('Directory', '/var/log/hbase',
  495. owner = 'hbase',
  496. recursive = True,
  497. mode = 0755,
  498. cd_access = 'a',
  499. )
  500. self.assertResourceCalled('File',
  501. '/usr/hdp/current/hbase-regionserver/conf/log4j.properties',
  502. mode=0644,
  503. group='hadoop',
  504. owner='hbase',
  505. content='log4jproperties\nline2')
  506. self.assertResourceCalled('Package', 'phoenix_2_2_*')
  507. self.assertResourceCalled('Execute', '/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh --config /usr/hdp/current/hbase-regionserver/conf start regionserver',
  508. not_if = 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E test -f /var/run/hbase/hbase-hbase-regionserver.pid && ps -p `ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E cat /var/run/hbase/hbase-hbase-regionserver.pid` >/dev/null 2>&1',
  509. user = 'hbase')
  510. self.assertNoMoreResources()
  511. @patch("resource_management.libraries.functions.security_commons.build_expectations")
  512. @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")
  513. @patch("resource_management.libraries.functions.security_commons.validate_security_config_properties")
  514. @patch("resource_management.libraries.functions.security_commons.cached_kinit_executor")
  515. @patch("resource_management.libraries.script.Script.put_structured_out")
  516. def test_security_status(self, put_structured_out_mock, cached_kinit_executor_mock, validate_security_config_mock, get_params_mock, build_exp_mock):
  517. # Test that function works when is called with correct parameters
  518. security_params = {
  519. 'hbase-site': {
  520. 'hbase.regionserver.keytab.file': '/path/to/hbase_keytab',
  521. 'hbase.regionserver.kerberos.principal': 'hbase_principal'
  522. }
  523. }
  524. result_issues = []
  525. props_value_check = {"hbase.security.authentication": "kerberos",
  526. "hbase.security.authorization": "true"}
  527. props_empty_check = ["hbase.regionserver.keytab.file",
  528. "hbase.regionserver.kerberos.principal"]
  529. props_read_check = ["hbase.regionserver.keytab.file"]
  530. get_params_mock.return_value = security_params
  531. validate_security_config_mock.return_value = result_issues
  532. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  533. classname = "HbaseRegionServer",
  534. command = "security_status",
  535. config_file="secured.json",
  536. hdp_stack_version = self.STACK_VERSION,
  537. target = RMFTestCase.TARGET_COMMON_SERVICES
  538. )
  539. build_exp_mock.assert_called_with('hbase-site', props_value_check, props_empty_check, props_read_check)
  540. put_structured_out_mock.assert_called_with({"securityState": "SECURED_KERBEROS"})
  541. cached_kinit_executor_mock.called_with('/usr/bin/kinit',
  542. self.config_dict['configurations']['hbase-env']['hbase_user'],
  543. security_params['hbase-site']['hbase.regionserver.keytab.file'],
  544. security_params['hbase-site']['hbase.regionserver.kerberos.principal'],
  545. self.config_dict['hostname'],
  546. '/tmp')
  547. # Testing that the exception throw by cached_executor is caught
  548. cached_kinit_executor_mock.reset_mock()
  549. cached_kinit_executor_mock.side_effect = Exception("Invalid command")
  550. try:
  551. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  552. classname = "HbaseRegionServer",
  553. command = "security_status",
  554. config_file="secured.json",
  555. hdp_stack_version = self.STACK_VERSION,
  556. target = RMFTestCase.TARGET_COMMON_SERVICES
  557. )
  558. except:
  559. self.assertTrue(True)
  560. # Testing with a security_params which doesn't contains hbase-site
  561. empty_security_params = {}
  562. cached_kinit_executor_mock.reset_mock()
  563. get_params_mock.reset_mock()
  564. put_structured_out_mock.reset_mock()
  565. get_params_mock.return_value = empty_security_params
  566. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  567. classname = "HbaseRegionServer",
  568. command = "security_status",
  569. config_file="secured.json",
  570. hdp_stack_version = self.STACK_VERSION,
  571. target = RMFTestCase.TARGET_COMMON_SERVICES
  572. )
  573. put_structured_out_mock.assert_called_with({"securityIssuesFound": "Keytab file or principal are not set property."})
  574. # Testing with not empty result_issues
  575. result_issues_with_params = {
  576. 'hbase-site' : "Something bad happened"
  577. }
  578. validate_security_config_mock.reset_mock()
  579. get_params_mock.reset_mock()
  580. validate_security_config_mock.return_value = result_issues_with_params
  581. get_params_mock.return_value = security_params
  582. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  583. classname = "HbaseRegionServer",
  584. command = "security_status",
  585. config_file="secured.json",
  586. hdp_stack_version = self.STACK_VERSION,
  587. target = RMFTestCase.TARGET_COMMON_SERVICES
  588. )
  589. put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
  590. # Testing with security_enable = false
  591. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  592. classname = "HbaseRegionServer",
  593. command = "security_status",
  594. config_file="default.json",
  595. hdp_stack_version = self.STACK_VERSION,
  596. target = RMFTestCase.TARGET_COMMON_SERVICES
  597. )
  598. put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
  599. def test_pre_upgrade_restart(self):
  600. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  601. with open(config_file, "r") as f:
  602. json_content = json.load(f)
  603. version = '2.2.1.0-3242'
  604. json_content['commandParams']['version'] = version
  605. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  606. classname = "HbaseRegionServer",
  607. command = "pre_upgrade_restart",
  608. config_dict = json_content,
  609. hdp_stack_version = self.STACK_VERSION,
  610. target = RMFTestCase.TARGET_COMMON_SERVICES)
  611. self.assertResourceCalled('Execute',
  612. ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hbase-regionserver', version), sudo=True,)
  613. self.assertNoMoreResources()
  614. def test_post_rolling_restart(self):
  615. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  616. with open(config_file, "r") as f:
  617. json_content = json.load(f)
  618. version = '2.2.1.0-3242'
  619. json_content['commandParams']['version'] = version
  620. mocks_dict = {}
  621. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  622. classname = "HbaseRegionServer",
  623. command = "post_upgrade_restart",
  624. config_dict = json_content,
  625. hdp_stack_version = self.STACK_VERSION,
  626. call_mocks = [(0, "Dummy output c6401.ambari.apache.org:")],
  627. target = RMFTestCase.TARGET_COMMON_SERVICES,
  628. mocks_dict = mocks_dict)
  629. self.assertTrue(mocks_dict['call'].called)
  630. self.assertNoMoreResources()
  631. @patch("resource_management.core.shell.call")
  632. def test_upgrade_23(self, call_mock):
  633. call_mock.side_effects = [(0, None), (0, None)]
  634. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  635. with open(config_file, "r") as f:
  636. json_content = json.load(f)
  637. version = '2.3.0.0-1234'
  638. json_content['commandParams']['version'] = version
  639. mocks_dict = {}
  640. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  641. classname = "HbaseRegionServer",
  642. command = "pre_upgrade_restart",
  643. config_dict = json_content,
  644. hdp_stack_version = self.STACK_VERSION,
  645. target = RMFTestCase.TARGET_COMMON_SERVICES,
  646. call_mocks = [(0, None), (0, None), (0, None), (0, None)],
  647. mocks_dict = mocks_dict)
  648. self.assertResourceCalled('Execute', ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hbase-regionserver', version), sudo=True)
  649. self.assertEquals(1, mocks_dict['call'].call_count)
  650. self.assertEquals(3, mocks_dict['checked_call'].call_count)
  651. self.assertEquals(
  652. ('ambari-python-wrap', '/usr/bin/conf-select', 'set-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  653. mocks_dict['checked_call'].call_args_list[1][0][0])
  654. self.assertEquals(
  655. ('ambari-python-wrap', '/usr/bin/conf-select', 'create-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  656. mocks_dict['call'].call_args_list[0][0][0])