test_hbase_master.py 30 KB

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