diff --git a/hbase-shell/src/main/ruby/shell/commands/clone_snapshot.rb b/hbase-shell/src/main/ruby/shell/commands/clone_snapshot.rb index 6d9c5ded2e4..8f0b35b39e7 100644 --- a/hbase-shell/src/main/ruby/shell/commands/clone_snapshot.rb +++ b/hbase-shell/src/main/ruby/shell/commands/clone_snapshot.rb @@ -47,6 +47,10 @@ EOF tableName = args[1] raise "Table already exists: #{tableName}!" end + if cause.is_a?(org.apache.hadoop.hbase.NamespaceNotFoundException) + namespace_name = args[1].split(':')[0] + raise "Unknown namespace: #{namespace_name}!" + end end end end diff --git a/hbase-shell/src/test/ruby/shell/commands_test.rb b/hbase-shell/src/test/ruby/shell/commands_test.rb index 9fa291ae1e9..5daf9fa7cd5 100644 --- a/hbase-shell/src/test/ruby/shell/commands_test.rb +++ b/hbase-shell/src/test/ruby/shell/commands_test.rb @@ -21,6 +21,9 @@ require 'hbase_constants' require 'hbase/table' require 'shell' +## +# Tests whether all registered commands have a help and command method + class ShellCommandsTest < Test::Unit::TestCase Shell.commands.each do |name, klass| define_test "#{name} command class #{klass} should respond to help" do @@ -32,3 +35,48 @@ class ShellCommandsTest < Test::Unit::TestCase end end end + +## +# Tests commands from the point of view of the shell to validate +# that the error messages returned to the user are correct + +class ShellCloneSnapshotTest < Test::Unit::TestCase + include Hbase::TestHelpers + + def setup + setup_hbase + @shell.interactive = false + # Create test table + @test_name = 'hbase_shell_tests_table' + drop_test_table(@test_name) + create_test_table(@test_name) + # Test snapshot name + @create_test_snapshot = 'hbase_shell_tests_snapshot' + drop_test_snapshot + end + + def teardown + drop_test_table(@test_name) + drop_test_snapshot + shutdown + end + + define_test 'Clone snapshot with table that already exists' do + existing_table = 'existing_table' + create_test_table(existing_table) + admin.snapshot(@test_name, @create_test_snapshot) + error = assert_raise(RuntimeError) do + @shell.command(:clone_snapshot, @create_test_snapshot, existing_table) + end + assert_match(/Table already exists: existing_table!/, error.message) + end + + define_test 'Clone snapshot with unknown namespace' do + clone_table = 'does_not_exist:test_clone_snapshot_table' + admin.snapshot(@test_name, @create_test_snapshot) + error = assert_raise(RuntimeError) do + @shell.command(:clone_snapshot, @create_test_snapshot, clone_table) + end + assert_match(/Unknown namespace: does_not_exist!/, error.message) + end +end