Updated Branches: refs/heads/trunk c0925b995 -> 72311b797
AMBARI-2887. JN smoke test problem on multinode cluster. (odiachenko) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/72311b79 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/72311b79 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/72311b79 Branch: refs/heads/trunk Commit: 72311b797289ca591537650dcea40ac40f513b20 Parents: c0925b9 Author: Oleksandr Diachenko <[email protected]> Authored: Tue Aug 13 22:44:14 2013 +0300 Committer: Oleksandr Diachenko <[email protected]> Committed: Tue Aug 13 22:44:40 2013 +0300 ---------------------------------------------------------------------- ambari-agent/pom.xml | 2 +- .../modules/hdp-hadoop/files/checkWebUI.py | 28 ++++---- .../hdp-hadoop/manifests/hdfs/service_check.pp | 9 ++- .../functions/hdp_comma_list_from_array.rb | 25 ++++++++ ambari-agent/src/test/python/TestCheckWebUI.py | 67 ++++++++++++++++++++ 5 files changed, 115 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/72311b79/ambari-agent/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-agent/pom.xml b/ambari-agent/pom.xml index e98f7d2..eb9b0fd 100644 --- a/ambari-agent/pom.xml +++ b/ambari-agent/pom.xml @@ -122,7 +122,7 @@ <argument>unitTests.py</argument> </arguments> <environmentVariables> - <PYTHONPATH>${project.basedir}/../ambari-common/src/test/python:${project.basedir}/src/main/python/ambari_agent:$PYTHONPATH</PYTHONPATH> + <PYTHONPATH>${project.basedir}/../ambari-common/src/test/python:${project.basedir}/src/main/python/ambari_agent:${project.basedir}/src/main/puppet/modules/hdp-hadoop/files:$PYTHONPATH</PYTHONPATH> </environmentVariables> <skip>${skipTests}</skip> </configuration> http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/72311b79/ambari-agent/src/main/puppet/modules/hdp-hadoop/files/checkWebUI.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/puppet/modules/hdp-hadoop/files/checkWebUI.py b/ambari-agent/src/main/puppet/modules/hdp-hadoop/files/checkWebUI.py index 2679e94..defa05e 100644 --- a/ambari-agent/src/main/puppet/modules/hdp-hadoop/files/checkWebUI.py +++ b/ambari-agent/src/main/puppet/modules/hdp-hadoop/files/checkWebUI.py @@ -26,21 +26,25 @@ import urllib # def main(): parser = optparse.OptionParser(usage="usage: %prog [options] component ") - parser.add_option("-u", "--url", dest="url", help="Host:Port for WEB UI to check it availability") + parser.add_option("-m", "--hosts", dest="hosts", help="Comma separated hosts list for WEB UI to check it availability") + parser.add_option("-p", "--port", dest="port", help="Port of WEB UI to check it availability") (options, args) = parser.parse_args() - url = options.url - - try: - httpCode = urllib.urlopen('http://' + url).getcode() - except Exception: - httpCode = 404 - - if httpCode != 200: - exit(1) - else: - exit(0) + hosts = options.hosts.split(',') + port = options.port + + for host in hosts: + try: + url = 'http://' + host + ':' + port + httpCode = urllib.urlopen(url).getcode() + except Exception: + httpCode = 404 + + if httpCode != 200: + print "Cannot access WEB UI on: " + url + exit(1) + if __name__ == "__main__": main() http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/72311b79/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/hdfs/service_check.pp ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/hdfs/service_check.pp b/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/hdfs/service_check.pp index f50aa29..7b49ed5 100644 --- a/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/hdfs/service_check.pp +++ b/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/hdfs/service_check.pp @@ -91,8 +91,11 @@ class hdp-hadoop::hdfs::service_check() require => Hdp-hadoop::Exec-hadoop['hdfs::service_check::create_file'], before => Class['hdp-hadoop::journalnode::service_check'] } + + $journalnode_hosts_comma_sep = hdp_comma_list_from_array($hdp::params::journalnode_hosts) + class { 'hdp-hadoop::journalnode::service_check': - journalnode_host => $hdp::params::journalnode_hosts, + journalnode_hosts => $journalnode_hosts_comma_sep, require => Hdp-hadoop::Exec-hadoop['hdfs::service_check::test'], before => Anchor['hdp-hadoop::hdfs::service_check::end'] } @@ -103,7 +106,7 @@ class hdp-hadoop::hdfs::service_check() } -class hdp-hadoop::journalnode::service_check($journalnode_host) +class hdp-hadoop::journalnode::service_check($journalnode_hosts) { $journalnode_port = $hdp::params::journalnode_port @@ -112,7 +115,7 @@ class hdp-hadoop::journalnode::service_check($journalnode_host) $checkWebUIFileName = "checkWebUI.py" $checkWebUIFilePath = "/tmp/$checkWebUIFileName" - $checkWebUICmd = "su - ${smoke_test_user} -c 'python $checkWebUIFilePath -u $journalnode_host:$journalnode_port'" + $checkWebUICmd = "su - ${smoke_test_user} -c 'python $checkWebUIFilePath -m $journalnode_hosts -p $journalnode_port'" file { $checkWebUIFilePath: ensure => present, http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/72311b79/ambari-agent/src/main/puppet/modules/hdp/lib/puppet/parser/functions/hdp_comma_list_from_array.rb ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/puppet/modules/hdp/lib/puppet/parser/functions/hdp_comma_list_from_array.rb b/ambari-agent/src/main/puppet/modules/hdp/lib/puppet/parser/functions/hdp_comma_list_from_array.rb new file mode 100644 index 0000000..41007a4 --- /dev/null +++ b/ambari-agent/src/main/puppet/modules/hdp/lib/puppet/parser/functions/hdp_comma_list_from_array.rb @@ -0,0 +1,25 @@ +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# +module Puppet::Parser::Functions + newfunction(:hdp_comma_list_from_array, :type => :rvalue) do |args| + args[0].join(",") + end +end http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/72311b79/ambari-agent/src/test/python/TestCheckWebUI.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/TestCheckWebUI.py b/ambari-agent/src/test/python/TestCheckWebUI.py new file mode 100644 index 0000000..c8d6b18 --- /dev/null +++ b/ambari-agent/src/test/python/TestCheckWebUI.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python2.6 + +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +''' + +import unittest +import StringIO +import sys + +from mock.mock import MagicMock, patch + +import checkWebUI + +class TestMain(unittest.TestCase): + + def setUp(self): + # disable stdout + out = StringIO.StringIO() + sys.stdout = out + + + def tearDown(self): + # enable stdout + sys.stdout = sys.__stdout__ + + @patch("optparse.OptionParser.parse_args") + @patch('urllib.urlopen') + def test_check_web_ui(self, urlopen_mock, parse_args_mock): + + #Positive scenario + options = MagicMock() + options.hosts = 'host1,host2' + options.port = '10000' + get_code_mock = MagicMock() + get_code_mock.getcode.return_value = 200 + urlopen_mock.return_value = get_code_mock + + parse_args_mock.return_value = (options, MagicMock) + checkWebUI.main() + + #Negative scenario + options = MagicMock() + options.hosts = 'host1,host2' + options.port = '10000' + get_code_mock = MagicMock() + get_code_mock.getcode.return_value = 404 + urlopen_mock.return_value = get_code_mock + + parse_args_mock.return_value = (options, MagicMock) + with self.assertRaises(SystemExit) as e: + checkWebUI.main() + self.assertEqual(e.exception.code, 1)
