test_hbase_client.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. #!/usr/bin/env python
  2. '''
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing, software
  12. distributed under the License is distributed on an "AS IS" BASIS,
  13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. See the License for the specific language governing permissions and
  15. limitations under the License.
  16. '''
  17. import json
  18. from mock.mock import MagicMock, call, patch
  19. from 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 TestHBaseClient(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_secured(self):
  27. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
  28. classname = "HbaseClient",
  29. command = "configure",
  30. config_file="secured.json",
  31. hdp_stack_version = self.STACK_VERSION,
  32. target = RMFTestCase.TARGET_COMMON_SERVICES
  33. )
  34. self.assertResourceCalled('Directory', '/etc/hbase',
  35. mode = 0755
  36. )
  37. self.assertResourceCalled('Directory', '/etc/hbase/conf',
  38. owner = 'hbase',
  39. group = 'hadoop',
  40. recursive = True,
  41. )
  42. self.assertResourceCalled('Directory', '/hadoop',
  43. recursive = True,
  44. cd_access = 'a',
  45. )
  46. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  47. sudo = True,
  48. )
  49. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  50. owner = 'hbase',
  51. group = 'hadoop',
  52. conf_dir = '/etc/hbase/conf',
  53. configurations = self.getConfig()['configurations']['hbase-site'],
  54. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  55. )
  56. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  57. owner = 'hbase',
  58. group = 'hadoop',
  59. conf_dir = '/etc/hbase/conf',
  60. configurations = self.getConfig()['configurations']['core-site'],
  61. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  62. )
  63. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  64. owner = 'hbase',
  65. group = 'hadoop',
  66. conf_dir = '/etc/hbase/conf',
  67. configurations = self.getConfig()['configurations']['hdfs-site'],
  68. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  69. )
  70. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  71. owner = 'hdfs',
  72. group = 'hadoop',
  73. conf_dir = '/etc/hadoop/conf',
  74. configurations = self.getConfig()['configurations']['hdfs-site'],
  75. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  76. )
  77. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  78. owner = 'hbase',
  79. group = 'hadoop',
  80. )
  81. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  82. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  83. owner = 'hbase',
  84. group = 'hadoop'
  85. )
  86. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  87. owner = 'hbase',
  88. template_tag = 'GANGLIA-RS',
  89. )
  90. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  91. owner = 'hbase',
  92. template_tag = None,
  93. )
  94. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hbase_client_jaas.conf',
  95. owner = 'hbase',
  96. template_tag = None,
  97. )
  98. self.assertResourceCalled('File',
  99. '/etc/hbase/conf/log4j.properties',
  100. mode=0644,
  101. group='hadoop',
  102. owner='hbase',
  103. content='log4jproperties\nline2'
  104. )
  105. self.assertNoMoreResources()
  106. def test_configure_default(self):
  107. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
  108. classname = "HbaseClient",
  109. command = "configure",
  110. config_file="default.json",
  111. hdp_stack_version = self.STACK_VERSION,
  112. target = RMFTestCase.TARGET_COMMON_SERVICES
  113. )
  114. self.assertResourceCalled('Directory', '/etc/hbase',
  115. mode = 0755
  116. )
  117. self.assertResourceCalled('Directory', '/etc/hbase/conf',
  118. owner = 'hbase',
  119. group = 'hadoop',
  120. recursive = True,
  121. )
  122. self.assertResourceCalled('Directory', '/hadoop',
  123. recursive = True,
  124. cd_access = 'a',
  125. )
  126. self.assertResourceCalled('Execute', ('chmod', '1777', u'/hadoop'),
  127. sudo = True,
  128. )
  129. self.assertResourceCalled('XmlConfig', 'hbase-site.xml',
  130. owner = 'hbase',
  131. group = 'hadoop',
  132. conf_dir = '/etc/hbase/conf',
  133. configurations = self.getConfig()['configurations']['hbase-site'],
  134. configuration_attributes = self.getConfig()['configuration_attributes']['hbase-site']
  135. )
  136. self.assertResourceCalled('XmlConfig', 'core-site.xml',
  137. owner = 'hbase',
  138. group = 'hadoop',
  139. conf_dir = '/etc/hbase/conf',
  140. configurations = self.getConfig()['configurations']['core-site'],
  141. configuration_attributes = self.getConfig()['configuration_attributes']['core-site']
  142. )
  143. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  144. owner = 'hbase',
  145. group = 'hadoop',
  146. conf_dir = '/etc/hbase/conf',
  147. configurations = self.getConfig()['configurations']['hdfs-site'],
  148. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  149. )
  150. self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
  151. owner = 'hdfs',
  152. group = 'hadoop',
  153. conf_dir = '/etc/hadoop/conf',
  154. configurations = self.getConfig()['configurations']['hdfs-site'],
  155. configuration_attributes = self.getConfig()['configuration_attributes']['hdfs-site']
  156. )
  157. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-policy.xml',
  158. owner = 'hbase',
  159. group = 'hadoop',
  160. )
  161. self.assertResourceCalled('File', '/etc/hbase/conf/hbase-env.sh',
  162. content = InlineTemplate(self.getConfig()['configurations']['hbase-env']['content']),
  163. owner = 'hbase',
  164. group = 'hadoop',
  165. )
  166. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/hadoop-metrics2-hbase.properties',
  167. owner = 'hbase',
  168. template_tag = 'GANGLIA-RS',
  169. )
  170. self.assertResourceCalled('TemplateConfig', '/etc/hbase/conf/regionservers',
  171. owner = 'hbase',
  172. template_tag = None,
  173. )
  174. self.assertResourceCalled('File',
  175. '/etc/hbase/conf/log4j.properties',
  176. mode=0644,
  177. group='hadoop',
  178. owner='hbase',
  179. content='log4jproperties\nline2'
  180. )
  181. self.assertNoMoreResources()
  182. @patch("resource_management.core.shell.call")
  183. def test_upgrade(self, call_mock):
  184. call_mock.side_effects = []
  185. mocks_dict = {}
  186. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
  187. classname = "HbaseClient",
  188. command = "restart",
  189. config_file="client-upgrade.json",
  190. hdp_stack_version = self.STACK_VERSION,
  191. target = RMFTestCase.TARGET_COMMON_SERVICES,
  192. mocks_dict = mocks_dict)
  193. self.assertResourceCalled("Execute", ('hdp-select', 'set', 'hbase-client', '2.2.1.0-2067'), sudo=True)
  194. self.assertResourceCalled('Execute', ('hdp-select', 'set', 'phoenix-client', '2.2.1.0-2067'), sudo=True)
  195. self.assertResourceCalled("Execute", ('hdp-select', 'set', 'hadoop-client', '2.2.1.0-2067'), sudo=True)
  196. self.assertEquals(1, mocks_dict['call'].call_count)
  197. @patch("resource_management.core.shell.call")
  198. def test_upgrade_23(self, call_mock):
  199. call_mock.side_effects = [(0, None), (0, None)]
  200. config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/client-upgrade.json"
  201. with open(config_file, "r") as f:
  202. json_content = json.load(f)
  203. version = '2.3.0.0-1234'
  204. json_content['commandParams']['version'] = version
  205. mocks_dict = {}
  206. self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
  207. classname = "HbaseClient",
  208. command = "restart",
  209. config_dict = json_content,
  210. hdp_stack_version = self.STACK_VERSION,
  211. target = RMFTestCase.TARGET_COMMON_SERVICES,
  212. call_mocks = [(0, None), (0, None), (0, None), (0, None)],
  213. mocks_dict = mocks_dict)
  214. self.assertResourceCalled('Execute', ('hdp-select', 'set', 'hbase-client', version), sudo=True)
  215. self.assertResourceCalled('Execute', ('hdp-select', 'set', 'phoenix-client', version), sudo=True)
  216. self.assertResourceCalled('Execute', ('hdp-select', 'set', 'hadoop-client', version), sudo=True)
  217. self.assertEquals(3, mocks_dict['call'].call_count)
  218. self.assertEquals(6, mocks_dict['checked_call'].call_count)
  219. self.assertEquals(
  220. ('conf-select', 'set-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  221. mocks_dict['checked_call'].call_args_list[1][0][0])
  222. self.assertEquals(
  223. ('conf-select', 'create-conf-dir', '--package', 'hbase', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  224. mocks_dict['call'].call_args_list[0][0][0])
  225. self.assertEquals(
  226. ('conf-select', 'set-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  227. mocks_dict['checked_call'].call_args_list[4][0][0])
  228. self.assertEquals(
  229. ('conf-select', 'create-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
  230. mocks_dict['call'].call_args_list[1][0][0])