PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/src/test/ruby/hbase/admin_test.rb

https://github.com/jy4618272/hindex
Ruby | 303 lines | 204 code | 60 blank | 39 comment | 3 complexity | 11a4e16ba671d6ac034afed6651aa085 MD5 | raw file
Possible License(s): Apache-2.0
  1. #
  2. # Copyright 2010 The Apache Software Foundation
  3. #
  4. # Licensed to the Apache Software Foundation (ASF) under one
  5. # or more contributor license agreements. See the NOTICE file
  6. # distributed with this work for additional information
  7. # regarding copyright ownership. The ASF licenses this file
  8. # to you under the Apache License, Version 2.0 (the
  9. # "License"); you may not use this file except in compliance
  10. # with the License. You may obtain a copy of the License at
  11. #
  12. # http://www.apache.org/licenses/LICENSE-2.0
  13. #
  14. # Unless required by applicable law or agreed to in writing, software
  15. # distributed under the License is distributed on an "AS IS" BASIS,
  16. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. # See the License for the specific language governing permissions and
  18. # limitations under the License.
  19. #
  20. require 'hbase'
  21. include HBaseConstants
  22. module Hbase
  23. class AdminHelpersTest < Test::Unit::TestCase
  24. include TestHelpers
  25. def setup
  26. setup_hbase
  27. # Create test table if it does not exist
  28. @test_name = "hbase_shell_tests_table"
  29. create_test_table(@test_name)
  30. end
  31. define_test "exists? should return true when a table exists" do
  32. assert(admin.exists?('.META.'))
  33. end
  34. define_test "exists? should return false when a table exists" do
  35. assert(!admin.exists?('.NOT.EXISTS.'))
  36. end
  37. define_test "enabled? should return true for enabled tables" do
  38. admin.enable(@test_name)
  39. assert(admin.enabled?(@test_name))
  40. end
  41. define_test "enabled? should return false for disabled tables" do
  42. admin.disable(@test_name)
  43. assert(!admin.enabled?(@test_name))
  44. end
  45. end
  46. # Simple administration methods tests
  47. class AdminMethodsTest < Test::Unit::TestCase
  48. include TestHelpers
  49. def setup
  50. setup_hbase
  51. # Create test table if it does not exist
  52. @test_name = "hbase_shell_tests_table"
  53. create_test_table(@test_name)
  54. # Create table test table name
  55. @create_test_name = 'hbase_create_table_test_table'
  56. end
  57. define_test "list should return a list of tables" do
  58. assert(admin.list.member?(@test_name))
  59. end
  60. define_test "list should not return meta tables" do
  61. assert(!admin.list.member?('.META.'))
  62. assert(!admin.list.member?('-ROOT-'))
  63. end
  64. #-------------------------------------------------------------------------------
  65. define_test "flush should work" do
  66. admin.flush('.META.')
  67. end
  68. #-------------------------------------------------------------------------------
  69. define_test "compact should work" do
  70. admin.compact('.META.')
  71. end
  72. #-------------------------------------------------------------------------------
  73. define_test "major_compact should work" do
  74. admin.major_compact('.META.')
  75. end
  76. #-------------------------------------------------------------------------------
  77. define_test "split should work" do
  78. admin.split('.META.', nil)
  79. end
  80. #-------------------------------------------------------------------------------
  81. define_test "drop should fail on non-existent tables" do
  82. assert_raise(ArgumentError) do
  83. admin.drop('.NOT.EXISTS.')
  84. end
  85. end
  86. define_test "drop should fail on enabled tables" do
  87. assert_raise(ArgumentError) do
  88. admin.drop(@test_name)
  89. end
  90. end
  91. define_test "drop should drop tables" do
  92. admin.disable(@test_name)
  93. admin.drop(@test_name)
  94. assert(!admin.exists?(@test_name))
  95. end
  96. #-------------------------------------------------------------------------------
  97. define_test "zk_dump should work" do
  98. assert_not_nil(admin.zk_dump)
  99. end
  100. #-------------------------------------------------------------------------------
  101. define_test "create should fail with non-string table names" do
  102. assert_raise(ArgumentError) do
  103. admin.create(123, 'xxx')
  104. end
  105. end
  106. define_test "create should fail with non-string/non-hash column args" do
  107. assert_raise(ArgumentError) do
  108. admin.create(@create_test_name, 123)
  109. end
  110. end
  111. define_test "create should fail without columns" do
  112. drop_test_table(@create_test_name)
  113. assert_raise(ArgumentError) do
  114. admin.create(@create_test_name)
  115. end
  116. end
  117. define_test "create should work with string column args" do
  118. drop_test_table(@create_test_name)
  119. admin.create(@create_test_name, 'a', 'b')
  120. assert_equal(['a:', 'b:'], table(@create_test_name).get_all_columns.sort)
  121. end
  122. define_test "create should work with hash column args" do
  123. drop_test_table(@create_test_name)
  124. admin.create(@create_test_name, { NAME => 'a'}, { NAME => 'b'})
  125. assert_equal(['a:', 'b:'], table(@create_test_name).get_all_columns.sort)
  126. end
  127. #-------------------------------------------------------------------------------
  128. define_test "describe should fail for non-existent tables" do
  129. assert_raise(ArgumentError) do
  130. admin.describe('.NOT.EXISTS.')
  131. end
  132. end
  133. define_test "describe should return a description" do
  134. assert_not_nil admin.describe(@test_name)
  135. end
  136. #-------------------------------------------------------------------------------
  137. define_test "truncate should empty a table" do
  138. table(@test_name).put(1, "x:a", 1)
  139. table(@test_name).put(2, "x:a", 2)
  140. assert_equal(2, table(@test_name).count)
  141. # This is hacky. Need to get the configuration into admin instance
  142. admin.truncate(@test_name, $TEST_CLUSTER.getConfiguration)
  143. assert_equal(0, table(@test_name).count)
  144. end
  145. define_test "truncate should yield log records" do
  146. logs = []
  147. admin.truncate(@test_name, $TEST_CLUSTER.getConfiguration) do |log|
  148. assert_kind_of(String, log)
  149. logs << log
  150. end
  151. assert(!logs.empty?)
  152. end
  153. end
  154. # Simple administration methods tests
  155. class AdminAlterTableTest < Test::Unit::TestCase
  156. include TestHelpers
  157. def setup
  158. setup_hbase
  159. # Create test table if it does not exist
  160. @test_name = "hbase_shell_tests_table"
  161. drop_test_table(@test_name)
  162. create_test_table(@test_name)
  163. end
  164. #-------------------------------------------------------------------------------
  165. define_test "alter should fail with non-string table names" do
  166. assert_raise(ArgumentError) do
  167. admin.alter(123, true, METHOD => 'delete', NAME => 'y')
  168. end
  169. end
  170. define_test "alter should fail with non-existing tables" do
  171. assert_raise(ArgumentError) do
  172. admin.alter('.NOT.EXISTS.', true, METHOD => 'delete', NAME => 'y')
  173. end
  174. end
  175. define_test "alter should not fail with enabled tables" do
  176. admin.enable(@test_name)
  177. admin.alter(@test_name, true, METHOD => 'delete', NAME => 'y')
  178. end
  179. define_test "alter should be able to delete column families" do
  180. assert_equal(['x:', 'y:'], table(@test_name).get_all_columns.sort)
  181. admin.alter(@test_name, true, METHOD => 'delete', NAME => 'y')
  182. admin.enable(@test_name)
  183. assert_equal(['x:'], table(@test_name).get_all_columns.sort)
  184. end
  185. define_test "alter should be able to add column families" do
  186. assert_equal(['x:', 'y:'], table(@test_name).get_all_columns.sort)
  187. admin.alter(@test_name, true, NAME => 'z')
  188. admin.enable(@test_name)
  189. assert_equal(['x:', 'y:', 'z:'], table(@test_name).get_all_columns.sort)
  190. end
  191. define_test "alter should be able to add column families (name-only alter spec)" do
  192. assert_equal(['x:', 'y:'], table(@test_name).get_all_columns.sort)
  193. admin.alter(@test_name, true, 'z')
  194. admin.enable(@test_name)
  195. assert_equal(['x:', 'y:', 'z:'], table(@test_name).get_all_columns.sort)
  196. end
  197. define_test "alter should support more than one alteration in one call" do
  198. assert_equal(['x:', 'y:'], table(@test_name).get_all_columns.sort)
  199. admin.alter(@test_name, true, { NAME => 'z' }, { METHOD => 'delete', NAME => 'y' })
  200. admin.enable(@test_name)
  201. assert_equal(['x:', 'z:'], table(@test_name).get_all_columns.sort)
  202. end
  203. define_test 'alter should support shortcut DELETE alter specs' do
  204. assert_equal(['x:', 'y:'], table(@test_name).get_all_columns.sort)
  205. admin.alter(@test_name, true, 'delete' => 'y')
  206. assert_equal(['x:'], table(@test_name).get_all_columns.sort)
  207. end
  208. define_test "alter should be able to change table options" do
  209. admin.alter(@test_name, true, METHOD => 'table_att', 'MAX_FILESIZE' => 12345678)
  210. assert_match(/12345678/, admin.describe(@test_name))
  211. end
  212. define_test "alter should be able to change coprocessor attributes" do
  213. drop_test_table(@test_name)
  214. create_test_table(@test_name)
  215. cp_key = "coprocessor"
  216. class_name = "SimpleRegionObserver"
  217. cp_value = "hdfs:///foo.jar|" + class_name + "|12|arg1=1,arg2=2"
  218. # eval() is used to convert a string to regex
  219. assert_no_match(eval("/" + class_name + "/"), admin.describe(@test_name))
  220. assert_no_match(eval("/" + cp_key + "/"), admin.describe(@test_name))
  221. admin.alter(@test_name, true, 'METHOD' => 'table_att', cp_key => cp_value)
  222. assert_match(eval("/" + class_name + "/"), admin.describe(@test_name))
  223. assert_match(eval("/" + cp_key + "\\$(\\d+)/"), admin.describe(@test_name))
  224. end
  225. define_test "alter should be able to remove a table attribute" do
  226. drop_test_table(@test_name)
  227. create_test_table(@test_name)
  228. key1 = "coprocessor"
  229. key2 = "MAX_FILESIZE"
  230. admin.alter(@test_name, true, 'METHOD' => 'table_att', key1 => "|TestCP||")
  231. admin.alter(@test_name, true, 'METHOD' => 'table_att', key2 => 12345678)
  232. # eval() is used to convert a string to regex
  233. assert_match(eval("/" + key1 + "\\$(\\d+)/"), admin.describe(@test_name))
  234. assert_match(eval("/" + key2 + "/"), admin.describe(@test_name))
  235. # get the cp key
  236. cp_keys = admin.describe(@test_name).scan(/(coprocessor\$\d+)/i)
  237. admin.alter(@test_name, true, 'METHOD' => 'table_att_unset', 'NAME' => cp_keys[0][0])
  238. admin.alter(@test_name, true, 'METHOD' => 'table_att_unset', 'NAME' => key2)
  239. assert_no_match(eval("/" + key1 + "\\$(\\d+)/"), admin.describe(@test_name))
  240. assert_no_match(eval("/" + key2 + "/"), admin.describe(@test_name))
  241. end
  242. end
  243. end