Author: smohanty
Date: Fri Jun 21 22:33:43 2013
New Revision: 1495627
URL: http://svn.apache.org/r1495627
Log:
AMBARI-2462. Enhance processing of ojdbc.jar before starting ambari server
(AMBARI-2349) (Oleksandr Diachenko 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=1495627&r1=1495626&r2=1495627&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 Fri
Jun 21 22:33:43 2013
@@ -1295,13 +1295,9 @@ def get_ambari_properties():
# Load database connection properties from conf file
def parse_properties_file(args):
- conf_file = find_properties_file()
- properties = Properties()
-
- try:
- properties.load(open(conf_file))
- except Exception, e:
- print 'Could not read ambari config file "%s": %s' % (conf_file, e)
+ properties = get_ambari_properties()
+ if properties == -1:
+ print_error_msg ("Error getting ambari properties")
return -1
args.persistence_type = properties[PERSISTENCE_TYPE_PROPERTY]
@@ -1717,33 +1713,44 @@ def copy_files(files, dest_dir):
def check_jdbc_drivers(args):
properties = get_ambari_properties()
+ if properties == -1:
+ print_error_msg ("Error getting ambari properties")
+ return -1
- ## ask user twice
- for i in range(0,2):
- result = find_jdbc_driver(args)
- if result == -1:
- msg = 'WARNING: Before starting Ambari Server, ' \
- 'the {0} JDBC driver JAR file must be copied to {1}. Press enter
to continue.'.format(
+ result = find_jdbc_driver(args)
+
+ msg = 'Before starting Ambari Server, ' \
+ 'you must copy the {0} JDBC driver JAR file to {1}.'.format(
DATABASE_FULL_NAMES[args.database],
- JAVA_SHARE_PATH
- )
- if not SILENT:
- raw_input(msg)
- else:
- print_warning_msg(msg)
+ JAVA_SHARE_PATH)
- # check if user provided drivers
- result = find_jdbc_driver(args)
+
+ if result == -1:
+
+ if SILENT:
+ print_error_msg(msg)
+ raise FatalException(-1, msg)
+ else:
+ print_warning_msg(msg)
+ raw_input(PRESS_ENTER_MSG)
+ result = find_jdbc_driver(args)
+ if result == -1:
+ print_error_msg(msg)
+ raise FatalException(-1, msg)
+
+ # Check if selected RDBMS requires drivers to copy
+ if type(result) is not int:
+ print 'Copying JDBC drivers to server resources...'
+ try:
+ resources_dir = properties[RESOURCES_DIR_PROPERTY]
+ except KeyError:
+ print_error_msg("There is no value for " + RESOURCES_DIR_PROPERTY + "in
" + AMBARI_PROPERTIES_FILE)
+ return -1
- if type(result) is not int:
- print 'Copying JDBC drivers to server resources...'
- try:
- resources_dir = properties[RESOURCES_DIR_PROPERTY]
- except KeyError:
- print_error_msg("There is no value for " + RESOURCES_DIR_PROPERTY +
"in " + AMBARI_PROPERTIES_FILE)
- return -1
- copy_files(result, resources_dir)
- break
+ copy_status = copy_files(result, resources_dir)
+
+ if not copy_status == 0:
+ raise FatalException(-1, "Failed to copy JDBC drivers to server
resources")
return 0
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=1495627&r1=1495626&r2=1495627&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py
(original)
+++ incubator/ambari/trunk/ambari-server/src/test/python/TestAmbaryServer.py
Fri Jun 21 22:33:43 2013
@@ -2316,38 +2316,6 @@ class TestAmbariServer(TestCase):
self.assertTrue("Client wasn't found" in fe.reason)
pass
-
- @patch.object(ambari_server, "get_ambari_properties")
- @patch.object(ambari_server, "find_jdbc_driver")
- @patch.object(ambari_server, "copy_files")
- @patch('__builtin__.raw_input')
- def test_check_jdbc_drivers(self, raw_input_mock, copy_files_mock,
find_jdbc_driver_mock, get_ambari_properties_mock):
- args = MagicMock()
-
- # Check positive scenario
- drivers_list = ['driver_file']
- resources_dir = '/tmp'
-
- get_ambari_properties_mock.return_value =
{ambari_server.RESOURCES_DIR_PROPERTY : resources_dir}
- find_jdbc_driver_mock.return_value = drivers_list
-
- rcode = ambari_server.check_jdbc_drivers(args)
-
- self.assertEqual(0, rcode)
- copy_files_mock.assert_called_with(drivers_list, resources_dir)
-
- #Check negative scenario
- find_jdbc_driver_mock.return_value = -1
-
- args.database = "oracle"
-
- rcode = ambari_server.check_jdbc_drivers(args)
-
- self.assertEqual(0, rcode)
- #Ensure user was asked to provide drivers
- self.assertTrue(raw_input_mock.called)
-
-
@patch.object(ambari_server, "find_properties_file")
def test_get_ambari_properties(self, find_properties_file_mock):
@@ -2465,11 +2433,169 @@ class TestAmbariServer(TestCase):
sys.stdout = sys.__stdout__
- @patch.object(ambari_server, "search_file")
- def test_parse_properties_file(self, search_file_mock):
+ @patch.object(ambari_server, "get_ambari_properties")
+ @patch.object(ambari_server, "find_jdbc_driver")
+ @patch.object(ambari_server, "copy_files")
+ @patch.object(ambari_server, "print_error_msg")
+ @patch.object(ambari_server, "print_warning_msg")
+ @patch('__builtin__.raw_input')
+ def test_check_jdbc_drivers(self, raw_input_mock, print_warning_msg,
print_error_msg_mock, copy_files_mock,
+ find_jdbc_driver_mock,
get_ambari_properties_mock):
+
+ out = StringIO.StringIO()
+ sys.stdout = out
+
+ args = MagicMock()
+
+ # Check positive scenario
+ drivers_list = ['driver_file']
+ resources_dir = '/tmp'
+
+ get_ambari_properties_mock.return_value =
{ambari_server.RESOURCES_DIR_PROPERTY : resources_dir}
+ find_jdbc_driver_mock.return_value = drivers_list
+ copy_files_mock.return_value = 0
+
+ args.database = "oracle"
+
+ rcode = ambari_server.check_jdbc_drivers(args)
+
+ self.assertEqual(0, rcode)
+ copy_files_mock.assert_called_with(drivers_list, resources_dir)
+
+ get_ambari_properties_mock.reset_mock()
+ find_jdbc_driver_mock.reset_mock()
+ copy_files_mock.reset_mock()
+ print_error_msg_mock.reset_mock()
+ print_warning_msg.reset_mock()
+ raw_input_mock.reset_mock()
+
+
+
+ # Check negative scenarios
+ # Silent option, no drivers
+ ambari_server.SILENT = True
+
+ find_jdbc_driver_mock.return_value = -1
+
+ failed = False
+
+ try:
+ rcode = ambari_server.check_jdbc_drivers(args)
+ except FatalException:
+ failed = True
+
+ self.assertTrue(print_error_msg_mock.called)
+ self.assertTrue(failed)
+
+ get_ambari_properties_mock.reset_mock()
+ find_jdbc_driver_mock.reset_mock()
+ copy_files_mock.reset_mock()
+ print_error_msg_mock.reset_mock()
+ print_warning_msg.reset_mock()
+ raw_input_mock.reset_mock()
+
+ # Non-Silent option, no drivers
+ ambari_server.SILENT = False
+
+ find_jdbc_driver_mock.return_value = -1
+
+ failed = False
+
+ try:
+ rcode = ambari_server.check_jdbc_drivers(args)
+ except FatalException:
+ failed = True
+
+ self.assertTrue(failed)
+ self.assertTrue(print_error_msg_mock.called)
+
+ get_ambari_properties_mock.reset_mock()
+ find_jdbc_driver_mock.reset_mock()
+ copy_files_mock.reset_mock()
+ print_error_msg_mock.reset_mock()
+ print_warning_msg.reset_mock()
+ raw_input_mock.reset_mock()
+
+ # Non-Silent option, no drivers at first ask, present drivers after that
+
+ find_jdbc_driver_mock.side_effect = [-1, drivers_list]
+
+ rcode = ambari_server.check_jdbc_drivers(args)
+
+ self.assertEqual(0, rcode)
+ copy_files_mock.assert_called_with(drivers_list, resources_dir)
+
+ get_ambari_properties_mock.reset_mock()
+ find_jdbc_driver_mock.reset_mock()
+ copy_files_mock.reset_mock()
+ print_error_msg_mock.reset_mock()
+ print_warning_msg.reset_mock()
+ raw_input_mock.reset_mock()
+
+ # Non-Silent option, no drivers at first ask, no drivers after that
+ find_jdbc_driver_mock.side_effect = [-1, -1]
+
+ failed = False
+
+ try:
+ rcode = ambari_server.check_jdbc_drivers(args)
+ except FatalException:
+ failed = True
+
+ self.assertTrue(failed)
+ self.assertTrue(print_error_msg_mock.called)
+
+ get_ambari_properties_mock.reset_mock()
+ find_jdbc_driver_mock.reset_mock()
+ copy_files_mock.reset_mock()
+ print_error_msg_mock.reset_mock()
+ print_warning_msg.reset_mock()
+ raw_input_mock.reset_mock()
+
+
+
+
+ # Failed to copy_files
+
+ find_jdbc_driver_mock.side_effect = [drivers_list]
+ try:
+ rcode = ambari_server.check_jdbc_drivers(args)
+ except FatalException:
+ failed = True
+
+ self.assertTrue(failed)
+
+ sys.stdout = sys.__stdout__
+
+
+ @patch.object(ambari_server, "find_properties_file")
+ def test_get_ambari_properties(self, find_properties_file_mock):
+
+ find_properties_file_mock.return_value = None
+ rcode = ambari_server.get_ambari_properties()
+ self.assertEqual(rcode, -1)
+
+ tf1 = tempfile.NamedTemporaryFile()
+ find_properties_file_mock.return_value = tf1.name
+ prop_name='name'
+ prop_value='val'
+
+ with open(tf1.name, 'w') as fout:
+ fout.write(prop_name + '=' + prop_value)
+ fout.close()
+
+ properties = ambari_server.get_ambari_properties()
+
+ self.assertEqual(properties[prop_name], prop_value)
+ self.assertEqual(properties.fileName, os.path.abspath(tf1.name))
+
+ sys.stdout = sys.__stdout__
+
+ @patch.object(ambari_server, "find_properties_file")
+ def test_parse_properties_file(self, find_properties_file_mock):
tf1 = tempfile.NamedTemporaryFile(mode='r')
- search_file_mock.return_value = tf1.name
+ find_properties_file_mock.return_value = tf1.name
args = MagicMock()
ambari_server.parse_properties_file(args)