test_hbase_regionserver.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  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 `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 `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', '/hadoop',
  120. recursive = True,
  121. cd_access = 'a',
  122. )
  123. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  124. sudo = True,
  125. )
  126. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  127. owner = 'hbase',
  128. group = 'hadoop',
  129. conf_dir = '/etc/hbase/conf',
  130. configurations = self.getConfig()['configurations']['hbase-site'],
  131. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  132. )
  133. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  134. owner = 'hbase',
  135. group = 'hadoop',
  136. conf_dir = '/etc/hbase/conf',
  137. configurations = self.getConfig()['configurations']['core-site'],
  138. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  139. )
  140. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  141. owner = 'hbase',
  142. group = 'hadoop',
  143. conf_dir = '/etc/hbase/conf',
  144. configurations = self.getConfig()['configurations']['hdfs-site'],
  145. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  146. )
  147. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  148. owner = 'hdfs',
  149. group = 'hadoop',
  150. conf_dir = '/etc/hadoop/conf',
  151. configurations = self.getConfig()['configurations']['hdfs-site'],
  152. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  153. )
  154. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  155. owner = 'hbase',
  156. group = 'hadoop',
  157. )
  158. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  159. owner = 'hbase',
  160. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  161. group = 'hadoop',
  162. )
  163. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  164. owner = 'root',
  165. group = 'root',
  166. recursive = True,
  167. )
  168. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  169. content = Template('hbase.conf.j2'),
  170. owner = 'root',
  171. group = 'root',
  172. mode = 0644,
  173. )
  174. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  175. owner = 'hbase',
  176. template_tag = 'GANGLIA-RS',
  177. )
  178. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  179. owner = 'hbase',
  180. template_tag = None,
  181. )
  182. self.assertResourceCalled('Directory', '/var/run/hbase',
  183. owner = 'hbase',
  184. recursive = True,
  185. )
  186. self.assertResourceCalled('Directory', '/var/log/hbase',
  187. owner = 'hbase',
  188. recursive = True,
  189. )
  190. self.assertResourceCalled('File',
  191. '/etc/hbase/conf/log4j.properties',
  192. mode=0644,
  193. group='hadoop',
  194. owner='hbase',
  195. content='log4jproperties\nline2'
  196. )
  197. def assert_configure_secured(self):
  198. self.assertResourceCalled('Directory', '/etc/hbase',
  199. mode = 0755
  200. )
  201. self.assertResourceCalled('Directory', '/etc/hbase/conf',
  202. owner = 'hbase',
  203. group = 'hadoop',
  204. recursive = True,
  205. )
  206. self.assertResourceCalled('Directory', '/hadoop',
  207. recursive = True,
  208. cd_access = 'a',
  209. )
  210. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  211. sudo = True,
  212. )
  213. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  214. owner = 'hbase',
  215. group = 'hadoop',
  216. conf_dir = '/etc/hbase/conf',
  217. configurations = self.getConfig()['configurations']['hbase-site'],
  218. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  219. )
  220. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  221. owner = 'hbase',
  222. group = 'hadoop',
  223. conf_dir = '/etc/hbase/conf',
  224. configurations = self.getConfig()['configurations']['core-site'],
  225. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  226. )
  227. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  228. owner = 'hbase',
  229. group = 'hadoop',
  230. conf_dir = '/etc/hbase/conf',
  231. configurations = self.getConfig()['configurations']['hdfs-site'],
  232. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  233. )
  234. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  235. owner = 'hdfs',
  236. group = 'hadoop',
  237. conf_dir = '/etc/hadoop/conf',
  238. configurations = self.getConfig()['configurations']['hdfs-site'],
  239. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  240. )
  241. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  242. owner = 'hbase',
  243. group = 'hadoop',
  244. )
  245. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  246. owner = 'hbase',
  247. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  248. group = 'hadoop',
  249. )
  250. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  251. owner = 'root',
  252. group = 'root',
  253. recursive = True,
  254. )
  255. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  256. content = Template('hbase.conf.j2'),
  257. owner = 'root',
  258. group = 'root',
  259. mode = 0644,
  260. )
  261. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  262. owner = 'hbase',
  263. template_tag = 'GANGLIA-RS',
  264. )
  265. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  266. owner = 'hbase',
  267. template_tag = None,
  268. )
  269. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hbase_regionserver_jaas.conf',
  270. owner = 'hbase',
  271. template_tag = None,
  272. )
  273. self.assertResourceCalled('Directory', '/var/run/hbase',
  274. owner = 'hbase',
  275. recursive = True,
  276. )
  277. self.assertResourceCalled('Directory', '/var/log/hbase',
  278. owner = 'hbase',
  279. recursive = True,
  280. )
  281. self.assertResourceCalled('File',
  282. '/etc/hbase/conf/log4j.properties',
  283. mode=0644,
  284. group='hadoop',
  285. owner='hbase',
  286. content='log4jproperties\nline2'
  287. )
  288. def test_start_default_22(self):
  289. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  290. classname = "HbaseRegionServer",
  291. command = "start",
  292. config_file="hbase-rs-2.2.json",
  293. hdp_stack_version = self.STACK_VERSION,
  294. target = RMFTestCase.TARGET_COMMON_SERVICES)
  295. self.assertResourceCalled('Directory', '/etc/hbase',
  296. mode = 0755)
  297. self.assertResourceCalled('Directory', '/usr/hdp/current/hbase-regionserver/conf',
  298. owner = 'hbase',
  299. group = 'hadoop',
  300. recursive = True)
  301. self.assertResourceCalled('Directory', '/hadoop',
  302. recursive = True,
  303. cd_access = 'a',
  304. )
  305. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  306. sudo = True,
  307. )
  308. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  309. owner = 'hbase',
  310. group = 'hadoop',
  311. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  312. configurations = self.getConfig()['configurations']['hbase-site'],
  313. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site'])
  314. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  315. owner = 'hbase',
  316. group = 'hadoop',
  317. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  318. configurations = self.getConfig()['configurations']['core-site'],
  319. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  320. )
  321. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  322. owner = 'hbase',
  323. group = 'hadoop',
  324. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  325. configurations = self.getConfig()['configurations']['hdfs-site'],
  326. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  327. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  328. owner = 'hdfs',
  329. group = 'hadoop',
  330. conf_dir = '/usr/hdp/current/hadoop-client/conf',
  331. configurations = self.getConfig()['configurations']['hdfs-site'],
  332. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  333. self.assertResourceCalled('XmlConfig', 'hbase-policy.xml',
  334. owner = 'hbase',
  335. group = 'hadoop',
  336. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  337. configurations = self.getConfig()['configurations']['hbase-policy'],
  338. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-policy'])
  339. self.assertResourceCalled('File', '/usr/hdp/current/hbase-regionserver/conf/hbase-env.sh',
  340. owner = 'hbase',
  341. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  342. group = 'hadoop'
  343. )
  344. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  345. owner = 'root',
  346. group = 'root',
  347. recursive = True,
  348. )
  349. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  350. content = Template('hbase.conf.j2'),
  351. owner = 'root',
  352. group = 'root',
  353. mode = 0644,
  354. )
  355. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/hadoop-metrics2-hbase.properties',
  356. owner = 'hbase',
  357. template_tag = 'GANGLIA-RS')
  358. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/regionservers',
  359. owner = 'hbase',
  360. template_tag = None)
  361. self.assertResourceCalled('Directory', '/var/run/hbase',
  362. owner = 'hbase',
  363. recursive = True)
  364. self.assertResourceCalled('Directory', '/var/log/hbase',
  365. owner = 'hbase',
  366. recursive = True)
  367. self.assertResourceCalled('File',
  368. '/usr/hdp/current/hbase-regionserver/conf/log4j.properties',
  369. mode=0644,
  370. group='hadoop',
  371. owner='hbase',
  372. content='log4jproperties\nline2')
  373. self.assertResourceCalled('Execute', '/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh --config /usr/hdp/current/hbase-regionserver/conf start regionserver',
  374. 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',
  375. user = 'hbase')
  376. self.assertNoMoreResources()
  377. def test_start_default_22_with_phoenix_enabled(self):
  378. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  379. classname = "HbaseRegionServer",
  380. command = "start",
  381. config_file="hbase-rs-2.2-phoenix.json",
  382. hdp_stack_version = self.STACK_VERSION,
  383. target = RMFTestCase.TARGET_COMMON_SERVICES)
  384. self.assertResourceCalled('Directory', '/etc/hbase',
  385. mode = 0755)
  386. self.assertResourceCalled('Directory', '/usr/hdp/current/hbase-regionserver/conf',
  387. owner = 'hbase',
  388. group = 'hadoop',
  389. recursive = True)
  390. self.assertResourceCalled('Directory', '/hadoop',
  391. recursive = True,
  392. cd_access = 'a',
  393. )
  394. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  395. sudo = True,
  396. )
  397. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  398. owner = 'hbase',
  399. group = 'hadoop',
  400. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  401. configurations = self.getConfig()['configurations']['hbase-site'],
  402. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site'])
  403. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  404. owner = 'hbase',
  405. group = 'hadoop',
  406. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  407. configurations = self.getConfig()['configurations']['core-site'],
  408. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  409. )
  410. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  411. owner = 'hbase',
  412. group = 'hadoop',
  413. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  414. configurations = self.getConfig()['configurations']['hdfs-site'],
  415. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  416. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  417. owner = 'hdfs',
  418. group = 'hadoop',
  419. conf_dir = '/usr/hdp/current/hadoop-client/conf',
  420. configurations = self.getConfig()['configurations']['hdfs-site'],
  421. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site'])
  422. self.assertResourceCalled('XmlConfig', 'hbase-policy.xml',
  423. owner = 'hbase',
  424. group = 'hadoop',
  425. conf_dir = '/usr/hdp/current/hbase-regionserver/conf',
  426. configurations = self.getConfig()['configurations']['hbase-policy'],
  427. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-policy'])
  428. self.assertResourceCalled('File', '/usr/hdp/current/hbase-regionserver/conf/hbase-env.sh',
  429. owner = 'hbase',
  430. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  431. group = 'hadoop'
  432. )
  433. self.assertResourceCalled('Directory', '/etc/security/limits.d',
  434. owner = 'root',
  435. group = 'root',
  436. recursive = True,
  437. )
  438. self.assertResourceCalled('File', '/etc/security/limits.d/hbase.conf',
  439. content = Template('hbase.conf.j2'),
  440. owner = 'root',
  441. group = 'root',
  442. mode = 0644,
  443. )
  444. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/hadoop-metrics2-hbase.properties',
  445. owner = 'hbase',
  446. template_tag = 'GANGLIA-RS')
  447. self.assertResourceCalled('TemplateConfig', '/usr/hdp/current/hbase-regionserver/conf/regionservers',
  448. owner = 'hbase',
  449. template_tag = None)
  450. self.assertResourceCalled('Directory', '/var/run/hbase',
  451. owner = 'hbase',
  452. recursive = True)
  453. self.assertResourceCalled('Directory', '/var/log/hbase',
  454. owner = 'hbase',
  455. recursive = True)
  456. self.assertResourceCalled('File',
  457. '/usr/hdp/current/hbase-regionserver/conf/log4j.properties',
  458. mode=0644,
  459. group='hadoop',
  460. owner='hbase',
  461. content='log4jproperties\nline2')
  462. self.assertResourceCalled('Package', 'phoenix_2_2_*')
  463. self.assertResourceCalled('Execute', '/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh --config /usr/hdp/current/hbase-regionserver/conf start regionserver',
  464. 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',
  465. user = 'hbase')
  466. self.assertNoMoreResources()
  467. @patch("resource_management.libraries.functions.security_commons.build_expectations")
  468. @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")
  469. @patch("resource_management.libraries.functions.security_commons.validate_security_config_properties")
  470. @patch("resource_management.libraries.functions.security_commons.cached_kinit_executor")
  471. @patch("resource_management.libraries.script.Script.put_structured_out")
  472. def test_security_status(self, put_structured_out_mock, cached_kinit_executor_mock, validate_security_config_mock, get_params_mock, build_exp_mock):
  473. # Test that function works when is called with correct parameters
  474. security_params = {
  475. 'hbase-site': {
  476. 'hbase.regionserver.keytab.file': '/path/to/hbase_keytab',
  477. 'hbase.regionserver.kerberos.principal': 'hbase_principal'
  478. }
  479. }
  480. result_issues = []
  481. props_value_check = {"hbase.security.authentication": "kerberos",
  482. "hbase.security.authorization": "true"}
  483. props_empty_check = ["hbase.regionserver.keytab.file",
  484. "hbase.regionserver.kerberos.principal"]
  485. props_read_check = ["hbase.regionserver.keytab.file"]
  486. get_params_mock.return_value = security_params
  487. validate_security_config_mock.return_value = result_issues
  488. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  489. classname = "HbaseRegionServer",
  490. command = "security_status",
  491. config_file="secured.json",
  492. hdp_stack_version = self.STACK_VERSION,
  493. target = RMFTestCase.TARGET_COMMON_SERVICES
  494. )
  495. build_exp_mock.assert_called_with('hbase-site', props_value_check, props_empty_check, props_read_check)
  496. put_structured_out_mock.assert_called_with({"securityState": "SECURED_KERBEROS"})
  497. cached_kinit_executor_mock.called_with('/usr/bin/kinit',
  498. self.config_dict['configurations']['hbase-env']['hbase_user'],
  499. security_params['hbase-site']['hbase.regionserver.keytab.file'],
  500. security_params['hbase-site']['hbase.regionserver.kerberos.principal'],
  501. self.config_dict['hostname'],
  502. '/tmp')
  503. # Testing that the exception throw by cached_executor is caught
  504. cached_kinit_executor_mock.reset_mock()
  505. cached_kinit_executor_mock.side_effect = Exception("Invalid command")
  506. try:
  507. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  508. classname = "HbaseRegionServer",
  509. command = "security_status",
  510. config_file="secured.json",
  511. hdp_stack_version = self.STACK_VERSION,
  512. target = RMFTestCase.TARGET_COMMON_SERVICES
  513. )
  514. except:
  515. self.assertTrue(True)
  516. # Testing with a security_params which doesn't contains hbase-site
  517. empty_security_params = {}
  518. cached_kinit_executor_mock.reset_mock()
  519. get_params_mock.reset_mock()
  520. put_structured_out_mock.reset_mock()
  521. get_params_mock.return_value = empty_security_params
  522. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  523. classname = "HbaseRegionServer",
  524. command = "security_status",
  525. config_file="secured.json",
  526. hdp_stack_version = self.STACK_VERSION,
  527. target = RMFTestCase.TARGET_COMMON_SERVICES
  528. )
  529. put_structured_out_mock.assert_called_with({"securityIssuesFound": "Keytab file or principal are not set property."})
  530. # Testing with not empty result_issues
  531. result_issues_with_params = {
  532. 'hbase-site' : "Something bad happened"
  533. }
  534. validate_security_config_mock.reset_mock()
  535. get_params_mock.reset_mock()
  536. validate_security_config_mock.return_value = result_issues_with_params
  537. get_params_mock.return_value = security_params
  538. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  539. classname = "HbaseRegionServer",
  540. command = "security_status",
  541. config_file="secured.json",
  542. hdp_stack_version = self.STACK_VERSION,
  543. target = RMFTestCase.TARGET_COMMON_SERVICES
  544. )
  545. put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
  546. # Testing with security_enable = false
  547. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  548. classname = "HbaseRegionServer",
  549. command = "security_status",
  550. config_file="default.json",
  551. hdp_stack_version = self.STACK_VERSION,
  552. target = RMFTestCase.TARGET_COMMON_SERVICES
  553. )
  554. put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
  555. def test_pre_upgrade_restart(self):
  556. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  557. with open(config_file, "r") as f:
  558. json_content = json.load(f)
  559. version = '2.2.1.0-3242'
  560. json_content['commandParams']['version'] = version
  561. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  562. classname = "HbaseRegionServer",
  563. command = "pre_upgrade_restart",
  564. config_dict = json_content,
  565. hdp_stack_version = self.STACK_VERSION,
  566. target = RMFTestCase.TARGET_COMMON_SERVICES)
  567. self.assertResourceCalled('Execute',
  568. ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hbase-regionserver', version), sudo=True,)
  569. self.assertNoMoreResources()
  570. def test_post_rolling_restart(self):
  571. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  572. with open(config_file, "r") as f:
  573. json_content = json.load(f)
  574. version = '2.2.1.0-3242'
  575. json_content['commandParams']['version'] = version
  576. mocks_dict = {}
  577. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  578. classname = "HbaseRegionServer",
  579. command = "post_upgrade_restart",
  580. config_dict = json_content,
  581. hdp_stack_version = self.STACK_VERSION,
  582. call_mocks = [(0, "Dummy output c6401.ambari.apache.org:")],
  583. target = RMFTestCase.TARGET_COMMON_SERVICES,
  584. mocks_dict = mocks_dict)
  585. self.assertTrue(mocks_dict['call'].called)
  586. self.assertNoMoreResources()
  587. @patch("resource_management.core.shell.call")
  588. def test_upgrade_23(self, call_mock):
  589. call_mock.side_effects = [(0, None), (0, None)]
  590. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
  591. with open(config_file, "r") as f:
  592. json_content = json.load(f)
  593. version = '2.3.0.0-1234'
  594. json_content['commandParams']['version'] = version
  595. mocks_dict = {}
  596. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
  597. classname = "HbaseRegionServer",
  598. command = "pre_upgrade_restart",
  599. config_dict = json_content,
  600. hdp_stack_version = self.STACK_VERSION,
  601. target = RMFTestCase.TARGET_COMMON_SERVICES,
  602. call_mocks = [(0, None), (0, None), (0, None), (0, None)],
  603. mocks_dict = mocks_dict)
  604. self.assertResourceCalled('Execute', ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'hbase-regionserver', version), sudo=True)
  605. self.assertEquals(1, mocks_dict['call'].call_count)
  606. self.assertEquals(3, mocks_dict['checked_call'].call_count)
  607. self.assertEquals(
  608. ('ambari-python-wrap', '/usr/bin/conf-select', 'set-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  609. mocks_dict['checked_call'].call_args_list[1][0][0])
  610. self.assertEquals(
  611. ('ambari-python-wrap', '/usr/bin/conf-select', 'create-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  612. mocks_dict['call'].call_args_list[0][0][0])