You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2013/06/20 22:59:09 UTC
svn commit: r1495183 - in /incubator/ambari/trunk/ambari-server/src:
main/python/ambari-server.py test/python/TestAmbaryServer.py
Author: smohanty
Date: Thu Jun 20 20:59:09 2013
New Revision: 1495183
URL: http://svn.apache.org/r1495183
Log:
AMBARI-2448. Add unit tests for ambari setup options (increase coverage for negative testing on setup options). (Myroslav Papirkovskyy via smohanty)
Modified:
incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py
incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py
Modified: incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py?rev=1495183&r1=1495182&r2=1495183&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py (original)
+++ incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py Thu Jun 20 20:59:09 2013
@@ -2720,7 +2720,7 @@ def main():
#correct database
if options.database is not None and options.database not in DATABASE_NAMES:
parser.print_help()
- print "Unsupported Database " + options.database
+ parser.error("Unsupported Database " + options.database)
elif options.database is not None:
options.database = options.database.lower()
DATABASE_INDEX = DATABASE_NAMES.index(options.database)
Modified: incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py?rev=1495183&r1=1495182&r2=1495183&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py (original)
+++ incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py Thu Jun 20 20:59:09 2013
@@ -588,14 +588,14 @@ class TestAmbariServer(TestCase):
@patch.object(ambari_server, "run_os_command")
@patch.object(ambari_server, "get_ambari_properties")
@patch.object(ambari_server, "get_value_from_properties")
- @patch.object(ambari_server, "os.mkdir")
+ @patch("os.mkdir")
def test_adjust_directory_permissions(self, mkdir_mock, get_value_from_properties_mock, get_ambari_properties_mock,
run_os_command_mock, set_file_permissions_mock):
# Testing boostrap dir wipe
properties_mock = MagicMock()
get_value_from_properties_mock.return_value = "dummy_bootstrap_dir"
ambari_server.adjust_directory_permissions("user")
- self.assertEquals(run_os_command_mock.call_args_list[0][0][0], "rm -rf dummy_bootstrap_dir/*")
+ self.assertEquals(run_os_command_mock.call_args_list[0][0][0], "rm -rf dummy_bootstrap_dir")
self.assertTrue(mkdir_mock.called)
set_file_permissions_mock.reset_mock()
@@ -1244,12 +1244,33 @@ class TestAmbariServer(TestCase):
@patch.object(ambari_server, "check_selinux")
@patch.object(ambari_server, "setup_remote_db")
@patch.object(ambari_server, "store_remote_properties")
+ @patch.object(ambari_server, "is_local_database")
+ @patch.object(ambari_server, "store_local_properties")
@patch.object(ambari_server, "is_root")
- def test_setup(self, is_root_mock, store_remote_properties_mock, setup_remote_db_mock, check_selinux_mock,
- check_jdbc_drivers_mock, check_ambari_user_mock, check_iptables_mock,
- check_postgre_up_mock, setup_db_mock, configure_postgres_mock,
+ def test_setup(self, is_root_mock, store_local_properties_mock, is_local_database_mock, store_remote_properties_mock,
+ setup_remote_db_mock, check_selinux_mock, check_jdbc_drivers_mock, check_ambari_user_mock,
+ check_iptables_mock, check_postgre_up_mock, setup_db_mock, configure_postgres_mock,
download_jdk_mock, configure_os_settings_mock, ):
args = MagicMock()
+ failed = False
+
+ def reset_mocks():
+ is_root_mock.reset_mock()
+ store_local_properties_mock.reset_mock()
+ store_remote_properties_mock.reset_mock()
+ is_local_database_mock.reset_mock()
+ setup_remote_db_mock.reset_mock()
+ check_selinux_mock.reset_mock()
+ check_jdbc_drivers_mock.reset_mock()
+ check_ambari_user_mock.reset_mock()
+ check_iptables_mock.reset_mock()
+ check_postgre_up_mock.reset_mock()
+ setup_db_mock.reset_mock()
+ configure_postgres_mock.reset_mock()
+ download_jdk_mock.reset_mock()
+ configure_os_settings_mock.reset_mock()
+ pass
+
# Testing call under non-root
is_root_mock.return_value = False
@@ -1262,6 +1283,7 @@ class TestAmbariServer(TestCase):
pass
# Testing calls under root
+ # remote case
is_root_mock.return_value = True
check_selinux_mock.return_value = 0
check_ambari_user_mock.return_value = 0
@@ -1270,14 +1292,47 @@ class TestAmbariServer(TestCase):
check_postgre_up_mock.return_value = 0
setup_db_mock.return_value = 0
setup_remote_db_mock.return_value = 0
+ is_local_database_mock.return_value = False
configure_postgres_mock.return_value = 0
download_jdk_mock.return_value = 0
configure_os_settings_mock.return_value = 0
store_remote_properties_mock.return_value = 0
+ store_local_properties_mock.return_value = 0
+
result = ambari_server.setup(args)
self.assertEqual(None, result)
self.assertTrue(check_ambari_user_mock.called)
+ self.assertEquals(True, store_remote_properties_mock.called)
+ self.assertEquals(False, store_local_properties_mock.called)
+
+
+ #Local case
+ reset_mocks()
+ is_local_database_mock.return_value = True
+
+ try:
+ result = ambari_server.setup(args)
+ except FatalException:
+ self.fail("Setup should be successful")
+
+
+ self.assertEqual(None, result)
+ self.assertEquals(True, store_local_properties_mock.called)
+ self.assertEquals(False, store_remote_properties_mock.called)
+
+ #negative case
+ reset_mocks()
+ is_local_database_mock.return_value = False
+ setup_remote_db_mock.return_value = -1
+
+ try:
+ result = ambari_server.setup(args)
+ self.fail("Should throw exception")
+ except FatalException as fe:
+ self.assertEquals(-1, fe.code)
+
+
@patch.object(ambari_server, "get_YN_input")
@@ -1286,8 +1341,9 @@ class TestAmbariServer(TestCase):
@patch.object(ambari_server, "run_os_command")
@patch.object(ambari_server, "configure_database_username_password")
@patch.object(ambari_server, "parse_properties_file")
+ @patch.object(ambari_server, "execute_remote_script")
@patch.object(ambari_server, "is_root")
- def test_reset(self, is_root_mock, parse_properties_file_mock, configure_database_username_password_mock,
+ def test_reset(self, is_root_mock, execute_remote_script_mock, parse_properties_file_mock, configure_database_username_password_mock,
run_os_command_mock, print_info_msg_mock,
setup_db_mock, get_YN_inputMock):
@@ -1328,6 +1384,13 @@ class TestAmbariServer(TestCase):
run_os_command_mock.return_value = (0, None, None)
ambari_server.reset(args)
self.assertTrue(setup_db_mock.called)
+
+ #remote db case
+ args.persistence_type = "remote"
+ execute_remote_script_mock.return_value=(0, None, None)
+ rcode = ambari_server.reset(args)
+ self.assertEqual(None, rcode)
+ self.assertTrue(execute_remote_script_mock.called)
@patch.object(ambari_server, "setup_db")
@@ -1351,7 +1414,7 @@ class TestAmbariServer(TestCase):
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(5)
rcode = ambari_server.reset(args)
-
+
self.assertEqual(None, rcode)
self.assertTrue(setup_db_mock.called)
@@ -1713,6 +1776,238 @@ class TestAmbariServer(TestCase):
self.assertEqual(4, len(get_choice_string_input_mock.call_args_list[0][0]))
+
+ def test_load_default_db_properties(self):
+ args = MagicMock()
+
+ ambari_server.load_default_db_properties(args)
+
+ self.assertEquals(args.database, "postgres")
+ self.assertEquals(args.database_host, "localhost")
+ self.assertEquals(args.database_port, "5432")
+ self.assertEquals(args.database_name, "ambari")
+ self.assertEquals(args.database_username, "ambari")
+ self.assertEquals(args.database_password, "bigdata")
+
+ args = MagicMock()
+ ambari_server.DATABASE_INDEX=1
+ ambari_server.load_default_db_properties(args)
+ self.assertEquals(args.database, "oracle")
+ self.assertEquals(args.database_port, "1521")
+
+ failed = False
+ args = MagicMock()
+ ambari_server.DATABASE_INDEX=2
+ try:
+ ambari_server.load_default_db_properties(args)
+ except:
+ failed = True
+ self.assertTrue(failed)
+
+ pass
+
+ @patch.object(ambari_server, 'setup')
+ def test_main_db_options(self, setup_mock):
+ base_args = ["ambari-server.py", "setup"]
+ db_args = ["--database", "postgres", "--databasehost", "somehost.net", "--databaseport", "12345",
+ "--databasename", "ambari", "--databaseusername", "ambari", "--databasepassword", "bigdata"]
+
+ #test no args
+ failed = False
+ sys.argv = list(base_args)
+
+
+ try:
+ ambari_server.main()
+ except SystemExit:
+ failed = True
+ pass
+
+
+ self.assertFalse(failed)
+ self.assertTrue(setup_mock.called)
+
+ setup_mock.reset_mock()
+
+ #test full args
+ sys.argv = list(base_args)
+ sys.argv.extend(db_args)
+
+ try:
+ ambari_server.main()
+ except SystemExit:
+ failed = True
+ pass
+
+ self.assertTrue(ambari_server.PROMPT_DATABASE_OPTIONS)
+ self.assertFalse(failed)
+ self.assertTrue(setup_mock.called)
+
+ setup_mock.reset_mock()
+
+ #test not full args
+ sys.argv = list(base_args)
+ sys.argv.extend(["--database", "postgres"])
+
+ try:
+ ambari_server.main()
+ except SystemExit:
+ failed = True
+ pass
+
+ self.assertFalse(setup_mock.called)
+ self.assertTrue(failed)
+
+ setup_mock.reset_mock()
+
+ #test wrong database
+ failed = False
+ sys.argv = list(base_args)
+ sys.argv.extend(["--database", "unknown"])
+ sys.argv.extend(db_args[2:])
+
+ try:
+ ambari_server.main()
+ except SystemExit:
+ failed = True
+ pass
+
+ self.assertTrue(failed)
+ self.assertFalse(setup_mock.called)
+
+ setup_mock.reset_mock()
+
+ #test wrong port check
+ failed = False
+ sys.argv = list(base_args)
+ sys.argv.extend(["--databaseport", "unknown"])
+ sys.argv.extend(db_args[:4])
+ sys.argv.extend(db_args[6:])
+
+ try:
+ ambari_server.main()
+ except SystemExit:
+ failed = True
+ pass
+
+ self.assertTrue(failed)
+ self.assertFalse(setup_mock.called)
+
+ setup_mock.reset_mock()
+ pass
+
+
+
+ @patch.object(ambari_server, "load_default_db_properties")
+ @patch.object(ambari_server, "get_YN_input")
+ @patch.object(ambari_server, "get_validated_string_input")
+ @patch.object(ambari_server, "setup_master_key")
+ @patch.object(ambari_server, "configure_database_password")
+ def test_prompt_db_properties(self, configure_database_password_mock, setup_master_key_mock,
+ get_validated_string_input_mock, get_YN_input_mock, load_default_db_properties_mock):
+ args = MagicMock()
+
+ #test not prompt
+ ambari_server.PROMPT_DATABASE_OPTIONS = False
+ ambari_server.prompt_db_properties(args)
+
+
+ self.assertFalse(load_default_db_properties_mock.called)
+ self.assertFalse(get_validated_string_input_mock.called)
+ self.assertFalse(get_YN_input_mock.called)
+
+ load_default_db_properties_mock.reset_mock()
+ get_validated_string_input_mock.reset_mock()
+ get_YN_input_mock.reset_mock()
+
+ #test prompt
+ get_YN_input_mock.return_value = False
+
+ ambari_server.PROMPT_DATABASE_OPTIONS = True
+ ambari_server.prompt_db_properties(args)
+ self.assertTrue(get_YN_input_mock.called)
+ self.assertFalse(get_validated_string_input_mock.called)
+ self.assertTrue(load_default_db_properties_mock.called)
+
+ load_default_db_properties_mock.reset_mock()
+ get_validated_string_input_mock.reset_mock()
+ get_YN_input_mock.reset_mock()
+
+ #test prompt advanced
+ get_YN_input_mock.return_value = True
+
+ ambari_server.PROMPT_DATABASE_OPTIONS = True
+ setup_master_key_mock.return_value = (None, False, True)
+ configure_database_password_mock.return_value = ("test", None)
+
+ ambari_server.prompt_db_properties(args)
+ self.assertTrue(get_YN_input_mock.called)
+ self.assertTrue(get_validated_string_input_mock.called)
+ self.assertTrue(load_default_db_properties_mock.called)
+
+ self.assertEquals(args.database, "postgres")
+
+ load_default_db_properties_mock.reset_mock()
+ get_validated_string_input_mock.reset_mock()
+ get_YN_input_mock.reset_mock()
+
+
+
+ pass
+
+ @patch.object(ambari_server, "get_db_cli_tool")
+ @patch.object(ambari_server, "run_in_shell")
+ def test_execute_remote_script(self, run_in_shell_mock, get_db_cli_tool_mock):
+ args = MagicMock()
+ script = "script"
+
+
+ #success
+ run_in_shell_mock.return_value=(0, None, None)
+ get_db_cli_tool_mock.return_value="tool"
+ args.database = "postgres"
+ args.database_password = "some_password"
+
+ retcode, out, err = ambari_server.execute_remote_script(args, script)
+ self.assertEquals(retcode, 0)
+ self.assertTrue(get_db_cli_tool_mock.called)
+ self.assertTrue(run_in_shell_mock.called)
+
+ #fail no cli tool
+ get_db_cli_tool_mock.return_value = None
+ get_db_cli_tool_mock.called = False
+ run_in_shell_mock.called = False
+
+ retcode, out, err = ambari_server.execute_remote_script(args, script)
+ self.assertEquals(retcode, -1)
+ self.assertTrue(get_db_cli_tool_mock.called)
+ self.assertFalse(run_in_shell_mock.called)
+
+ #fail execute
+ errcode = 1
+ get_db_cli_tool_mock.return_value = "tool"
+ run_in_shell_mock.return_value=(errcode, None, None)
+ get_db_cli_tool_mock.called = False
+ run_in_shell_mock.called = False
+
+ retcode, out, err = ambari_server.execute_remote_script(args, script)
+ self.assertEquals(retcode, errcode)
+ self.assertTrue(get_db_cli_tool_mock.called)
+ self.assertTrue(run_in_shell_mock.called)
+
+ #fail wrong database - case should be completely impossible
+ get_db_cli_tool_mock.return_value = "tool"
+ run_in_shell_mock.return_value=(0, None, None)
+ get_db_cli_tool_mock.called = False
+ run_in_shell_mock.called = False
+ args.database = "unknown"
+
+ retcode, out, err = ambari_server.execute_remote_script(args, script)
+ self.assertEquals(retcode, -2)
+ self.assertTrue(get_db_cli_tool_mock.called)
+ self.assertFalse(run_in_shell_mock.called)
+ pass
+
@patch.object(ambari_server, "get_conf_dir")
def test_update_ambari_properties(self, get_conf_dir_mock):
@@ -1880,7 +2175,7 @@ class TestAmbariServer(TestCase):
fout.close()
properties = ambari_server.get_ambari_properties()
-
+
self.assertEqual(properties[prop_name], prop_value)