You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2014/12/23 08:59:55 UTC
ambari git commit: AMBARI-8609: Enable ambari agent unit tests on
Windows (Jayush Luniya)
Repository: ambari
Updated Branches:
refs/heads/trunk 511f64d76 -> 4e6597059
AMBARI-8609: Enable ambari agent unit tests on Windows (Jayush Luniya)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4e659705
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4e659705
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4e659705
Branch: refs/heads/trunk
Commit: 4e6597059a337f130580b4d804c590e8b050b9e9
Parents: 511f64d
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Mon Dec 22 23:59:39 2014 -0800
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Mon Dec 22 23:59:39 2014 -0800
----------------------------------------------------------------------
.../test/python/ambari_agent/TestActionQueue.py | 17 ++++--
.../test/python/ambari_agent/TestController.py | 13 ++++-
.../TestCustomServiceOrchestrator.py | 28 ++++++----
.../test/python/ambari_agent/TestDataCleaner.py | 25 +++++----
.../test/python/ambari_agent/TestFileCache.py | 41 +++++++-------
.../src/test/python/ambari_agent/TestGrep.py | 6 +--
.../test/python/ambari_agent/TestHardware.py | 2 +
.../test/python/ambari_agent/TestHeartbeat.py | 2 +
.../test/python/ambari_agent/TestHostCleanup.py | 3 ++
.../test/python/ambari_agent/TestHostInfo.py | 56 +++++++++++++++-----
.../test/python/ambari_agent/TestHostname.py | 3 ++
.../src/test/python/ambari_agent/TestMain.py | 37 ++++++++-----
.../src/test/python/ambari_agent/TestNetUtil.py | 4 +-
.../python/ambari_agent/TestProcessHelper.py | 3 +-
.../python/ambari_agent/TestPythonExecutor.py | 7 ++-
.../python/ambari_agent/TestRegistration.py | 3 ++
.../test/python/ambari_agent/TestSecurity.py | 14 ++---
.../src/test/python/ambari_agent/TestShell.py | 2 +
ambari-agent/src/test/python/unitTests.py | 17 ++++--
.../src/test/python/only_for_platform.py | 35 ++++++++++++
20 files changed, 221 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestActionQueue.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestActionQueue.py b/ambari-agent/src/test/python/ambari_agent/TestActionQueue.py
index c8d90ab..91ddf81 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestActionQueue.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestActionQueue.py
@@ -37,6 +37,12 @@ from ambari_agent.CommandStatusDict import CommandStatusDict
from ambari_agent.ActualConfigHandler import ActualConfigHandler
from FileCache import FileCache
from ambari_commons import OSCheck
+from only_for_platform import only_for_platform, get_platform, PLATFORM_LINUX, PLATFORM_WINDOWS
+
+if get_platform() != PLATFORM_WINDOWS:
+ os_distro_value = ('Suse','11','Final')
+else:
+ os_distro_value = ('win2012serverr2','6.3','WindowsServer')
class TestActionQueue(TestCase):
def setUp(self):
@@ -275,7 +281,7 @@ class TestActionQueue(TestCase):
actionQueue.process_command(execution_command)
self.assertTrue(print_exc_mock.called)
- @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('Suse','11','Final')))
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch("__builtin__.open")
@patch.object(ActionQueue, "status_update_callback")
def test_execute_command(self, status_update_callback_mock, open_mock):
@@ -326,9 +332,9 @@ class TestActionQueue(TestCase):
if len(report['reports']) != 0:
break
expected = {'status': 'IN_PROGRESS',
- 'stderr': 'Read from {0}/errors-3.txt'.format(tempdir),
- 'stdout': 'Read from {0}/output-3.txt'.format(tempdir),
- 'structuredOut' : 'Read from {0}/structured-out-3.json'.format(tempdir),
+ 'stderr': 'Read from {0}'.format(os.path.join(tempdir, "errors-3.txt")),
+ 'stdout': 'Read from {0}'.format(os.path.join(tempdir, "output-3.txt")),
+ 'structuredOut' : 'Read from {0}'.format(os.path.join(tempdir, "structured-out-3.json")),
'clusterName': u'cc',
'roleCommand': u'INSTALL',
'serviceName': u'HDFS',
@@ -648,7 +654,8 @@ class TestActionQueue(TestCase):
report = actionQueue.result()
self.assertEqual(len(report['reports']),1)
-
+
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(CustomServiceOrchestrator, "resolve_script_path")
@patch.object(StackVersionsFileHandler, "read_stack_version")
def test_execute_python_executor(self, read_stack_version_mock, resolve_script_path_mock):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestController.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestController.py b/ambari-agent/src/test/python/ambari_agent/TestController.py
index 240d808..24d416a 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestController.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestController.py
@@ -28,14 +28,23 @@ import logging
import platform
from threading import Event
import json
+from ambari_commons import OSCheck
+from only_for_platform import only_for_platform, get_platform, PLATFORM_LINUX, PLATFORM_WINDOWS
-with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
+if get_platform() != PLATFORM_WINDOWS:
+ os_distro_value = ('Suse','11','Final')
+else:
+ os_distro_value = ('win2012serverr2','6.3','WindowsServer')
+
+with patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value)):
from ambari_agent import Controller, ActionQueue, Register
from ambari_agent import hostname
from ambari_agent.Controller import AGENT_AUTO_RESTART_EXIT_CODE
from ambari_commons import OSCheck
+ import ambari_commons
-@patch.object(platform, "linux_distribution", new = ('Suse','11','Final'))
+@only_for_platform(PLATFORM_LINUX)
+@patch.object(OSCheck, "os_distribution", new = os_distro_value)
class TestController(unittest.TestCase):
logger = logging.getLogger()
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
index 46c0166..51bf45f 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
@@ -41,6 +41,7 @@ from FileCache import FileCache
from LiveStatus import LiveStatus
from BackgroundCommandExecutionHandle import BackgroundCommandExecutionHandle
from ambari_agent.ActionQueue import ActionQueue
+from only_for_platform import get_platform, PLATFORM_WINDOWS
class TestCustomServiceOrchestrator(TestCase):
@@ -114,7 +115,8 @@ class TestCustomServiceOrchestrator(TestCase):
json_file = orchestrator.dump_command_to_json(command)
self.assertTrue(os.path.exists(json_file))
self.assertTrue(os.path.getsize(json_file) > 0)
- self.assertEqual(oct(os.stat(json_file).st_mode & 0777), '0600')
+ if get_platform() != PLATFORM_WINDOWS:
+ self.assertEqual(oct(os.stat(json_file).st_mode & 0777), '0600')
self.assertTrue(json_file.endswith("command-3.json"))
self.assertTrue(decompress_cluster_host_info_mock.called)
os.unlink(json_file)
@@ -124,7 +126,8 @@ class TestCustomServiceOrchestrator(TestCase):
json_file = orchestrator.dump_command_to_json(command)
self.assertTrue(os.path.exists(json_file))
self.assertTrue(os.path.getsize(json_file) > 0)
- self.assertEqual(oct(os.stat(json_file).st_mode & 0777), '0600')
+ if get_platform() != PLATFORM_WINDOWS:
+ self.assertEqual(oct(os.stat(json_file).st_mode & 0777), '0600')
self.assertTrue(json_file.endswith("status_command.json"))
self.assertFalse(decompress_cluster_host_info_mock.called)
os.unlink(json_file)
@@ -143,13 +146,13 @@ class TestCustomServiceOrchestrator(TestCase):
# Testing existing path
exists_mock.return_value = True
path = orchestrator.\
- resolve_script_path("/HBASE/package", "scripts/hbase_master.py", "PYTHON")
- self.assertEqual("/HBASE/package/scripts/hbase_master.py", path)
+ resolve_script_path(os.path.join("HBASE", "package"), os.path.join("scripts", "hbase_master.py"), "PYTHON")
+ self.assertEqual(os.path.join("HBASE", "package", "scripts", "hbase_master.py"), path)
# Testing not existing path
exists_mock.return_value = False
try:
orchestrator.resolve_script_path("/HBASE",
- "scripts/hbase_master.py", "PYTHON")
+ os.path.join("scripts", "hbase_master.py"), "PYTHON")
self.fail('ExpectedException not thrown')
except AgentException:
pass # Expected
@@ -314,8 +317,11 @@ class TestCustomServiceOrchestrator(TestCase):
self.assertFalse(command['taskId'] in orchestrator.commands_in_progress.keys())
self.assertTrue(os.path.exists(out))
self.assertTrue(os.path.exists(err))
- os.remove(out)
- os.remove(err)
+ try:
+ os.remove(out)
+ os.remove(err)
+ except:
+ pass
from ambari_agent.StackVersionsFileHandler import StackVersionsFileHandler
@@ -437,13 +443,13 @@ class TestCustomServiceOrchestrator(TestCase):
self.assertEqual(res1, None)
# Testing existing hook script
isfile_mock.return_value = True
- res2 = orchestrator.resolve_hook_script_path("/hooks_dir/", "prefix", "command",
+ res2 = orchestrator.resolve_hook_script_path("hooks_dir", "prefix", "command",
"script_type")
- self.assertEqual(res2, ('/hooks_dir/prefix-command/scripts/hook.py',
- '/hooks_dir/prefix-command'))
+ self.assertEqual(res2, (os.path.join('hooks_dir', 'prefix-command', 'scripts', 'hook.py'),
+ os.path.join('hooks_dir', 'prefix-command')))
# Testing not existing hook script
isfile_mock.return_value = False
- res3 = orchestrator.resolve_hook_script_path("/hooks_dir/", "prefix", "command",
+ res3 = orchestrator.resolve_hook_script_path("hooks_dir", "prefix", "command",
"script_type")
self.assertEqual(res3, None)
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py b/ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py
index fc79d27..0ec6b69 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py
@@ -23,21 +23,21 @@ import unittest
from mock.mock import patch, MagicMock, call, Mock
from ambari_agent import DataCleaner
import AmbariConfig
-
+import os
class TestDataCleaner(unittest.TestCase):
def setUp(self):
- self.test_dir = [('/test_path', [],
+ self.test_dir = [('test_path', [],
['errors-12.txt', 'output-12.txt', 'site-12.pp', 'site-13.pp', 'site-15.pp',
'structured-out-13.json', 'command-13.json', 'version'])]
self.config = MagicMock()
- self.config.get.side_effect = [2592000, (3600 + 1), 10000, "/test_path"]
+ self.config.get.side_effect = [2592000, (3600 + 1), 10000, "test_path"]
DataCleaner.logger = MagicMock()
def test_init_success(self):
config = MagicMock()
- config.get.side_effect = [2592000, (3600 + 1), 10000, "/test_path"]
+ config.get.side_effect = [2592000, (3600 + 1), 10000, "test_path"]
DataCleaner.logger.reset_mock()
cleaner = DataCleaner.DataCleaner(config)
self.assertFalse(DataCleaner.logger.warn.called)
@@ -59,7 +59,7 @@ class TestDataCleaner(unittest.TestCase):
def test_init_warn(self):
config = MagicMock()
- config.get.side_effect = [1, (3600 - 1), (10000 + 1), "/test_path"]
+ config.get.side_effect = [1, (3600 - 1), (10000 + 1), "test_path"]
DataCleaner.logger.reset_mock()
cleaner = DataCleaner.DataCleaner(config)
self.assertTrue(DataCleaner.logger.warn.called)
@@ -85,12 +85,12 @@ class TestDataCleaner(unittest.TestCase):
cleaner.cleanup()
self.assertTrue(len(remMock.call_args_list) == 6)
- remMock.assert_any_call('/test_path/errors-12.txt')
- remMock.assert_any_call('/test_path/output-12.txt')
- remMock.assert_any_call('/test_path/site-12.pp')
- remMock.assert_any_call('/test_path/site-15.pp')
- remMock.assert_any_call('/test_path/structured-out-13.json')
- remMock.assert_any_call('/test_path/command-13.json')
+ remMock.assert_any_call(os.path.join('test_path', 'errors-12.txt'))
+ remMock.assert_any_call(os.path.join('test_path', 'output-12.txt'))
+ remMock.assert_any_call(os.path.join('test_path', 'site-12.pp'))
+ remMock.assert_any_call(os.path.join('test_path', 'site-15.pp'))
+ remMock.assert_any_call(os.path.join('test_path', 'structured-out-13.json'))
+ remMock.assert_any_call(os.path.join('test_path', 'command-13.json'))
pass
@patch('os.walk')
@@ -108,11 +108,10 @@ class TestDataCleaner(unittest.TestCase):
sizeMock.return_value = 100
def side_effect(arg):
- if arg == '/test_path/site-15.pp':
+ if arg == os.path.join('test_path', 'site-15.pp'):
raise Exception("Can't remove file")
remMock.side_effect = side_effect
-
cleaner = DataCleaner.DataCleaner(self.config)
cleaner.cleanup()
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestFileCache.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestFileCache.py b/ambari-agent/src/test/python/ambari_agent/TestFileCache.py
index b09207b..da08782 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestFileCache.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestFileCache.py
@@ -64,15 +64,15 @@ class TestFileCache(TestCase):
fileCache = FileCache(self.config)
command = {
'commandParams' : {
- 'service_package_folder' : 'stacks/HDP/2.1.1/services/ZOOKEEPER/package'
+ 'service_package_folder' : os.path.join('stacks', 'HDP', '2.1.1', 'services', 'ZOOKEEPER', 'package')
}
}
res = fileCache.get_service_base_dir(command, "server_url_pref")
self.assertEquals(
pprint.pformat(provide_directory_mock.call_args_list[0][0]),
"('/var/lib/ambari-agent/cache',\n "
- "'stacks/HDP/2.1.1/services/ZOOKEEPER/package',\n"
- " 'server_url_pref')")
+ "{0},\n"
+ " 'server_url_pref')".format(pprint.pformat(os.path.join('stacks', 'HDP', '2.1.1', 'services', 'ZOOKEEPER', 'package'))))
self.assertEquals(res, "dummy value")
@@ -91,7 +91,7 @@ class TestFileCache(TestCase):
# Check existing dir case
command = {
'commandParams' : {
- 'hooks_folder' : 'HDP/2.1.1/hooks'
+ 'hooks_folder' : os.path.join('HDP', '2.1.1', 'hooks')
}
}
provide_directory_mock.return_value = "dummy value"
@@ -100,8 +100,8 @@ class TestFileCache(TestCase):
self.assertEquals(
pprint.pformat(provide_directory_mock.call_args_list[0][0]),
"('/var/lib/ambari-agent/cache', "
- "'stacks/HDP/2.1.1/hooks', "
- "'server_url_pref')")
+ "{0}, "
+ "'server_url_pref')".format(pprint.pformat(os.path.join('stacks','HDP', '2.1.1', 'hooks'))))
self.assertEquals(res, "dummy value")
@@ -134,7 +134,7 @@ class TestFileCache(TestCase):
# Test uptodate dirs after start
self.assertFalse(fileCache.uptodate_paths)
-
+ path = os.path.join("cache_path", "subdirectory")
# Test initial downloading (when dir does not exist)
fetch_url_mock.return_value = membuffer
read_hash_sum_mock.return_value = "hash2"
@@ -144,8 +144,8 @@ class TestFileCache(TestCase):
self.assertTrue(write_hash_sum_mock.called)
self.assertEquals(fetch_url_mock.call_count, 2)
self.assertEquals(pprint.pformat(fileCache.uptodate_paths),
- "['cache_path/subdirectory']")
- self.assertEquals(res, 'cache_path/subdirectory')
+ pprint.pformat([path]))
+ self.assertEquals(res, path)
fetch_url_mock.reset_mock()
write_hash_sum_mock.reset_mock()
@@ -162,9 +162,10 @@ class TestFileCache(TestCase):
self.assertFalse(invalidate_directory_mock.called)
self.assertFalse(write_hash_sum_mock.called)
self.assertEquals(fetch_url_mock.call_count, 1)
+
self.assertEquals(pprint.pformat(fileCache.uptodate_paths),
- "['cache_path/subdirectory']")
- self.assertEquals(res, 'cache_path/subdirectory')
+ pprint.pformat([path]))
+ self.assertEquals(res, path)
fetch_url_mock.reset_mock()
write_hash_sum_mock.reset_mock()
@@ -178,8 +179,8 @@ class TestFileCache(TestCase):
self.assertFalse(write_hash_sum_mock.called)
self.assertEquals(fetch_url_mock.call_count, 0)
self.assertEquals(pprint.pformat(fileCache.uptodate_paths),
- "['cache_path/subdirectory']")
- self.assertEquals(res, 'cache_path/subdirectory')
+ pprint.pformat([path]))
+ self.assertEquals(res, path)
# Check exception handling when tolerance is disabled
self.config.set('agent', 'tolerate_download_failures', "false")
@@ -213,7 +214,7 @@ class TestFileCache(TestCase):
fileCache = FileCache(self.config)
res = fileCache.provide_directory("cache_path", "subdirectory",
"server_url_prefix")
- self.assertEquals(res, 'cache_path/subdirectory')
+ self.assertEquals(res, path)
def test_build_download_url(self):
@@ -322,15 +323,11 @@ class TestFileCache(TestCase):
def test_unpack_archive(self):
tmpdir = tempfile.mkdtemp()
- dummy_archive = os.path.join("ambari_agent", "dummy_files",
+ dummy_archive_name = os.path.join("ambari_agent", "dummy_files",
"dummy_archive.zip")
- # Test normal flow
- with open(dummy_archive, "r") as f:
- data = f.read(os.path.getsize(dummy_archive))
- membuf = StringIO.StringIO(data)
-
+ archive_file = open(dummy_archive_name, "rb")
fileCache = FileCache(self.config)
- fileCache.unpack_archive(membuf, tmpdir)
+ fileCache.unpack_archive(archive_file, tmpdir)
# Count summary size of unpacked files:
total_size = 0
total_files = 0
@@ -350,7 +347,7 @@ class TestFileCache(TestCase):
with patch("os.path.isdir") as isdir_mock:
isdir_mock.side_effect = self.exc_side_effect
try:
- fileCache.unpack_archive(membuf, tmpdir)
+ fileCache.unpack_archive(archive_file, tmpdir)
self.fail('CachingException not thrown')
except CachingException:
pass # Expected
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestGrep.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestGrep.py b/ambari-agent/src/test/python/ambari_agent/TestGrep.py
index 206e6e8..4f681ca 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestGrep.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestGrep.py
@@ -52,7 +52,7 @@ err: /Stage[main]//Exec[command_good]/returns: change from notrun to 0 failed: w
debug: /Schedule[weekly]: Skipping device resources because running on a host
debug: /Schedule[puppet]: Skipping device resources because running on a host
debug: Finishing transaction 70171639726240
-""".strip()
+""".replace("\n", os.linesep).strip()
self.assertEquals(fragment, desired, "Grep grep function should return only last 3 lines of file")
def test_grep_no_result(self):
@@ -82,7 +82,7 @@ debug: Finishing transaction 70171639726240
debug: Finishing transaction 70060456663980
debug: Received report to process from ambari-dmi
debug: Processing report from ambari-dmi with processor Puppet::Reports::Store
-""".strip()
+""".replace("\n", os.linesep).strip()
self.assertEquals(fragment, desired, "Grep tail function should return only last 3 lines of file")
def test_tail_no_lines(self):
@@ -104,7 +104,7 @@ debug: Processing report from ambari-dmi with processor Puppet::Reports::Store
info: Applying configuration version '1352127563'
err: /Stage[main]//Exec[command_good]/returns: change from notrun to 0 failed: wget e432423423xample.com/badurl444111 returned 4 instead of one of [0] at /root/puppet-learn/2-bad.pp:5
notice: Finished catalog run in 0.23 seconds
-""".strip()
+""".replace("\n", os.linesep).strip()
self.assertEquals(fragment, desired, 'Grep cleanByTemplate function should return string without debug lines.')
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestHardware.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHardware.py b/ambari-agent/src/test/python/ambari_agent/TestHardware.py
index 48ab29b..2a24d40 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHardware.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHardware.py
@@ -22,6 +22,7 @@ from unittest import TestCase
from mock.mock import patch
import unittest
import platform
+from only_for_platform import only_for_platform, PLATFORM_LINUX
with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
from ambari_agent import hostname
@@ -29,6 +30,7 @@ with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
from ambari_agent.Facter import Facter, FacterLinux
from ambari_commons import OSCheck
+@only_for_platform(PLATFORM_LINUX)
@patch.object(platform,"linux_distribution", new = ('Suse','11','Final'))
class TestHardware(TestCase):
@patch.object(OSCheck, "get_os_type")
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py b/ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py
index cc61184..1145cd8 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py
@@ -36,7 +36,9 @@ with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
from ambari_agent.StackVersionsFileHandler import StackVersionsFileHandler
from ambari_agent.HostInfo import HostInfoLinux
+from only_for_platform import only_for_platform, PLATFORM_LINUX
+@only_for_platform(PLATFORM_LINUX)
class TestHeartbeat(TestCase):
def setUp(self):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestHostCleanup.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostCleanup.py b/ambari-agent/src/test/python/ambari_agent/TestHostCleanup.py
index 5e6f7c4..84b96cc 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostCleanup.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostCleanup.py
@@ -67,6 +67,9 @@ pkg_list = sqoop.noarch,hadoop-libhdfs.x86_64,rrdtool.x86_64,ganglia-gmond.x86_6
[metadata]
created = 2013-07-02 20:39:22.162757"""
+from only_for_platform import only_for_platform, PLATFORM_LINUX
+
+@only_for_platform(PLATFORM_LINUX)
class TestHostCleanup(TestCase):
def setUp(self):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
index a7f3435..d79c5ec 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
@@ -24,12 +24,21 @@ import logging
import unittest
import subprocess
import socket
+import platform
from mock.mock import patch
from mock.mock import MagicMock
from mock.mock import create_autospec
import ambari_commons
+from ambari_commons import OSCheck
+import os
+from only_for_platform import only_for_platform, get_platform, PLATFORM_WINDOWS, PLATFORM_LINUX
-with patch("platform.linux_distribution", return_value = ('redhat','11','Final')):
+if get_platform() != PLATFORM_WINDOWS:
+ os_distro_value = ('Suse','11','Final')
+else:
+ os_distro_value = ('win2012serverr2','6.3','WindowsServer')
+
+with patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value)):
from ambari_agent.HostCheckReportFileHandler import HostCheckReportFileHandler
from ambari_agent.PackagesAnalyzer import PackagesAnalyzer
from ambari_agent.HostInfo import HostInfo, HostInfoLinux
@@ -39,10 +48,13 @@ with patch("platform.linux_distribution", return_value = ('redhat','11','Final')
from ambari_commons import OSCheck, Firewall, FirewallChecks ,OSConst
import ambari_commons
-@patch.object(System, "os_family", new = 'redhat')
-@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('redhat','11','Final')))
+
+
+
+@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
class TestHostInfo(TestCase):
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, 'get_os_family')
@patch.object(PackagesAnalyzer, 'subprocessWithTimeout')
def test_analyze_zypper_out(self, spwt_mock, get_os_family_mock):
@@ -74,6 +86,7 @@ class TestHostInfo(TestCase):
self.assertTrue(installedPackages[3][2], "HDP")
self.assertTrue(installedPackages[6][1], "11-38.13.9")
+ @only_for_platform(PLATFORM_LINUX)
def test_getReposToRemove(self):
l1 = ["Hortonworks Data Platform Utils Version - HDP-UTILS-1.1.0.15", "Ambari 1.x", "HDP"]
l2 = ["Ambari", "HDP-UTIL"]
@@ -87,6 +100,7 @@ class TestHostInfo(TestCase):
self.assertTrue(1, len(l3))
self.assertEqual(l3[0], "HDP-1.3.0")
+ @only_for_platform(PLATFORM_LINUX)
def test_perform_package_analysis(self):
packageAnalyzer = PackagesAnalyzer()
installedPackages = [
@@ -134,6 +148,7 @@ class TestHostInfo(TestCase):
for package in expected:
self.assertTrue(package in allPackages)
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, 'get_os_family')
@patch.object(PackagesAnalyzer, 'subprocessWithTimeout')
def test_analyze_yum_output(self, subprocessWithTimeout_mock, get_os_family_mock):
@@ -190,11 +205,12 @@ class TestHostInfo(TestCase):
"koji-override-0/$releasever"])
self.assertFalse(package['repoName'] in ["AMBARI.dev-1.x"])
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, 'get_os_family')
@patch.object(PackagesAnalyzer, 'subprocessWithTimeout')
def test_analyze_yum_output_err(self, subprocessWithTimeout_mock, get_os_family_mock):
get_os_family_mock.return_value = OSConst.REDHAT_FAMILY
-
+
packageAnalyzer = PackagesAnalyzer()
result = {}
@@ -211,15 +227,19 @@ class TestHostInfo(TestCase):
@patch('os.path.exists')
def test_checkFolders(self, path_mock):
path_mock.return_value = True
- hostInfo = HostInfoLinux()
+ hostInfo = HostInfo()
results = []
- existingUsers = [{'name':'a1', 'homeDir':'/home/a1'}, {'name':'b1', 'homeDir':'/home/b1'}]
- hostInfo.checkFolders(["/etc/conf", "/var/lib", "/home/"], ["a1", "b1"], existingUsers, results)
+ existingUsers = [{'name':'a1', 'homeDir':os.path.join('home', 'a1')}, {'name':'b1', 'homeDir':os.path.join('home', 'b1')}]
+ hostInfo.checkFolders([os.path.join("etc", "conf"), os.path.join("var", "lib"), "home"], ["a1", "b1"], existingUsers, results)
+ print results
self.assertEqual(4, len(results))
names = [i['name'] for i in results]
- for item in ['/etc/conf/a1', '/var/lib/a1', '/etc/conf/b1', '/var/lib/b1']:
+ for item in [os.path.join('etc','conf','a1'), os.path.join('var','lib','a1'), os.path.join('etc','conf','b1'), os.path.join('var','lib','b1')]:
+
self.assertTrue(item in names)
+ @only_for_platform(PLATFORM_LINUX)
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch('os.path.exists')
@patch('__builtin__.open')
def test_checkUsers(self, builtins_open_mock, path_mock):
@@ -241,6 +261,7 @@ class TestHostInfo(TestCase):
self.assertTrue(newlist[1]['status'], "Invalid home directory")
print(path_mock.mock_calls)
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, "get_os_type")
@patch('os.umask')
@patch.object(HostCheckReportFileHandler, 'writeHostCheckFile')
@@ -283,7 +304,7 @@ class TestHostInfo(TestCase):
self.assertTrue(0 < len(dict['installedPackages']))
self.assertTrue('agentTimeStampAtReporting' in dict['hostHealth'])
-
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, "get_os_type")
@patch('os.umask')
@patch.object(HostCheckReportFileHandler, 'writeHostCheckFile')
@@ -386,7 +407,7 @@ class TestHostInfo(TestCase):
result = host.dirType("/home")
self.assertEquals(result, 'unknown')
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("os.path.exists")
@patch("glob.glob")
def test_hadoopVarRunCount(self, glob_glob_mock, os_path_exists_mock):
@@ -401,7 +422,7 @@ class TestHostInfo(TestCase):
result = hostInfo.hadoopVarRunCount()
self.assertEquals(result, 0)
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("os.path.exists")
@patch("glob.glob")
def test_hadoopVarLogCount(self, glob_glob_mock, os_path_exists_mock):
@@ -416,6 +437,8 @@ class TestHostInfo(TestCase):
result = hostInfo.hadoopVarLogCount()
self.assertEquals(result, 0)
+ @only_for_platform(PLATFORM_LINUX)
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('redhat','11','Final')))
@patch("os.listdir", create=True, autospec=True)
@patch("__builtin__.open", create=True, autospec=True)
@patch("pwd.getpwuid", create=True, autospec=True)
@@ -436,7 +459,7 @@ class TestHostInfo(TestCase):
self.assertTrue(list[0]['hadoop'])
self.assertEquals(list[0]['user'], 'user')
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("subprocess.Popen")
@patch.object(Hardware, 'extractMountInfo')
def test_osdiskAvailableSpace(self, extract_mount_info_mock, subproc_popen_mock):
@@ -454,7 +477,7 @@ class TestHostInfo(TestCase):
self.assertEquals(result, {})
-
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, "get_os_type")
@patch("subprocess.Popen")
def test_checkLiveServices(self, subproc_popen, get_os_type_method):
@@ -498,6 +521,8 @@ class TestHostInfo(TestCase):
self.assertEquals(result[0]['name'], 'service1')
self.assertTrue(len(result[0]['desc']) > 0)
+ @only_for_platform(PLATFORM_LINUX)
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('redhat','11','Final')))
@patch("os.path.exists")
@patch("os.listdir", create=True, autospec=True)
@patch("os.path.islink")
@@ -519,6 +544,7 @@ class TestHostInfo(TestCase):
self.assertEquals(result[0]['name'], 'config1')
self.assertEquals(result[0]['target'], 'real_path_to_conf')
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, "get_os_family")
@patch.object(OSCheck, "get_os_type")
@patch.object(OSCheck, "get_os_major_version")
@@ -554,7 +580,7 @@ class TestHostInfo(TestCase):
self.assertFalse(hostInfo.checkReverseLookup())
-
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(OSCheck, "get_os_family")
@patch.object(OSCheck, "get_os_type")
@patch.object(OSCheck, "get_os_major_version")
@@ -565,6 +591,8 @@ class TestHostInfo(TestCase):
run_os_command_mock.return_value = 3, "", ""
self.assertFalse(Firewall().getFirewallObject().check_iptables())
+ @only_for_platform(PLATFORM_LINUX)
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('redhat','11','Final')))
@patch("os.path.isfile")
@patch('__builtin__.open')
def test_transparent_huge_page(self, open_mock, os_path_isfile_mock):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestHostname.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostname.py b/ambari-agent/src/test/python/ambari_agent/TestHostname.py
index 993a9d1..5dbd095 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostname.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostname.py
@@ -27,6 +27,7 @@ import tempfile
import shutil
import os, pprint, json,stat
from mock.mock import patch
+from only_for_platform import only_for_platform, PLATFORM_LINUX
class TestHostname(TestCase):
@@ -38,6 +39,7 @@ class TestHostname(TestCase):
"hostname should equal the socket-based hostname")
pass
+ @only_for_platform(PLATFORM_LINUX)
def test_hostname_override(self):
hostname.cached_hostname = None
hostname.cached_public_hostname = None
@@ -60,6 +62,7 @@ class TestHostname(TestCase):
config.remove_option('agent', 'hostname_script')
pass
+ @only_for_platform(PLATFORM_LINUX)
def test_public_hostname_override(self):
hostname.cached_hostname = None
hostname.cached_public_hostname = None
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestMain.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestMain.py b/ambari-agent/src/test/python/ambari_agent/TestMain.py
index dce94df..18a7151 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestMain.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestMain.py
@@ -25,19 +25,27 @@ import signal
import os
import socket
import tempfile
+import platform
import ConfigParser
-
+from ambari_commons import OSCheck
+from only_for_platform import only_for_platform, get_platform, PLATFORM_WINDOWS, PLATFORM_LINUX
from mock.mock import MagicMock, patch, ANY, Mock
-with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
+if get_platform() != PLATFORM_WINDOWS:
+ os_distro_value = ('Suse','11','Final')
+else:
+ os_distro_value = ('win2012serverr2','6.3','WindowsServer')
+
+with patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value)):
from ambari_agent import NetUtil, security
from ambari_agent import ProcessHelper, main
- from ambari_agent import ProcessHelper, main
from ambari_agent.AmbariConfig import AmbariConfig
from ambari_agent.PingPortListener import PingPortListener
from ambari_agent.Controller import Controller
from ambari_agent.DataCleaner import DataCleaner
import ambari_agent.HeartbeatHandlers as HeartbeatHandlers
+ from ambari_commons.os_check import OSConst, OSCheck
+
from ambari_agent.shell import shellRunner
class TestMain(unittest.TestCase):
@@ -52,7 +60,7 @@ class TestMain(unittest.TestCase):
# enable stdout
sys.stdout = sys.__stdout__
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("ambari_agent.HeartbeatHandlers.HeartbeatStopHandlersLinux")
@patch("os._exit")
@patch("os.getpid")
@@ -119,7 +127,7 @@ class TestMain(unittest.TestCase):
main.update_log_level(config)
setLevel_mock.assert_called_with(logging.INFO)
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("signal.signal")
def test_bind_signal_handlers(self, signal_mock):
main.bind_signal_handlers(os.getpid())
@@ -162,11 +170,12 @@ class TestMain(unittest.TestCase):
exit_mock.reset_mock()
- # Trying case if there is another instance running
- isfile_mock.return_value = True
- isdir_mock.return_value = True
- main.perform_prestart_checks(None)
- self.assertTrue(exit_mock.called)
+ if OSCheck.get_os_family() != OSConst.WINSRV_FAMILY:
+ # Trying case if there is another instance running, only valid for linux
+ isfile_mock.return_value = True
+ isdir_mock.return_value = True
+ main.perform_prestart_checks(None)
+ self.assertTrue(exit_mock.called)
isfile_mock.reset_mock()
isdir_mock.reset_mock()
@@ -188,7 +197,7 @@ class TestMain(unittest.TestCase):
main.perform_prestart_checks(None)
self.assertFalse(exit_mock.called)
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("time.sleep")
@patch.object(shellRunner,"run")
@patch("os._exit")
@@ -303,10 +312,12 @@ class TestMain(unittest.TestCase):
self.assertTrue(setup_logging_mock.called)
self.assertTrue(bind_signal_handlers_mock.called)
- self.assertTrue(stop_mock.called)
+ if OSCheck.get_os_family() != OSConst.WINSRV_FAMILY:
+ self.assertTrue(stop_mock.called)
#self.assertTrue(resolve_ambari_config_mock.called)
self.assertTrue(perform_prestart_checks_mock.called)
- self.assertTrue(daemonize_mock.called)
+ if OSCheck.get_os_family() != OSConst.WINSRV_FAMILY:
+ self.assertTrue(daemonize_mock.called)
self.assertTrue(update_log_level_mock.called)
try_to_connect_mock.assert_called_once_with(ANY, -1, ANY)
self.assertTrue(start_mock.called)
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestNetUtil.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestNetUtil.py b/ambari-agent/src/test/python/ambari_agent/TestNetUtil.py
index 255da88..287ea3c 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestNetUtil.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestNetUtil.py
@@ -22,7 +22,7 @@ from ambari_agent import NetUtil
from mock.mock import MagicMock, patch
import unittest
import threading
-
+from only_for_platform import only_for_platform, PLATFORM_LINUX
class TestNetUtil(unittest.TestCase):
@patch("urlparse.urlparse")
@@ -50,7 +50,7 @@ class TestNetUtil(unittest.TestCase):
httpsConMock.side_effect = Exception("test")
self.assertFalse(netutil.checkURL("url")[0])
-
+ @only_for_platform(PLATFORM_LINUX)
@patch("time.sleep")
@patch.object(threading._Event, "wait")
def test_try_to_connect(self, event_mock,
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py b/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
index 3b14ba3..35af423 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
@@ -25,7 +25,8 @@ import unittest
from mock.mock import patch, MagicMock
from ambari_agent import ProcessHelper
-
+from only_for_platform import only_for_platform, PLATFORM_LINUX
+@only_for_platform(PLATFORM_LINUX)
class TestProcessHelper(unittest.TestCase):
@patch.object(ProcessHelper, "getTempFiles")
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestPythonExecutor.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestPythonExecutor.py b/ambari-agent/src/test/python/ambari_agent/TestPythonExecutor.py
index d1bec5d..c0fe39a 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestPythonExecutor.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestPythonExecutor.py
@@ -104,7 +104,12 @@ class TestPythonExecutor(TestCase):
executor = PythonExecutor("/tmp", AmbariConfig().getConfig())
_, tmpoutfile = tempfile.mkstemp()
_, tmperrfile = tempfile.mkstemp()
- _, tmpstroutfile = tempfile.mkstemp()
+ # PythonExecutor need only filename and will try to delete this file before execution, this will fail on windows
+ # so we will use NamedTemporaryFile only to generate temp file and close it immediately after creation
+ tmp_file = tempfile.NamedTemporaryFile(delete=False)
+ tmpstroutfile = tmp_file.name
+ tmp_file.close()
+
PYTHON_TIMEOUT_SECONDS = 5
def launch_python_subprocess_method(command, tmpout, tmperr):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
index 103c6dd..676266f 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
@@ -23,6 +23,7 @@ import os
import tempfile
from mock.mock import patch
from mock.mock import MagicMock
+from only_for_platform import only_for_platform, PLATFORM_LINUX
with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
from ambari_agent.Register import Register
@@ -30,6 +31,8 @@ with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
from ambari_commons import OSCheck, Firewall, FirewallChecks
class TestRegistration(TestCase):
+
+ @only_for_platform(PLATFORM_LINUX)
@patch.object(FirewallChecks, "run_os_command")
@patch.object(OSCheck, "get_os_type")
@patch.object(OSCheck, "get_os_version")
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestSecurity.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestSecurity.py b/ambari-agent/src/test/python/ambari_agent/TestSecurity.py
index 37a61c8..d745864 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestSecurity.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestSecurity.py
@@ -175,7 +175,7 @@ class TestSecurity(unittest.TestCase):
self.config.set('security', 'keysdir', '/dummy-keysdir')
man = CertificateManager(self.config)
res = man.getAgentKeyName()
- self.assertEquals(res, "/dummy-keysdir/dummy.hostname.key")
+ self.assertEquals(res, os.path.abspath("/dummy-keysdir/dummy.hostname.key"))
@patch("ambari_agent.hostname.hostname")
@@ -184,7 +184,7 @@ class TestSecurity(unittest.TestCase):
self.config.set('security', 'keysdir', '/dummy-keysdir')
man = CertificateManager(self.config)
res = man.getAgentCrtName()
- self.assertEquals(res, "/dummy-keysdir/dummy.hostname.crt")
+ self.assertEquals(res, os.path.abspath("/dummy-keysdir/dummy.hostname.crt"))
@patch("ambari_agent.hostname.hostname")
@@ -193,14 +193,14 @@ class TestSecurity(unittest.TestCase):
self.config.set('security', 'keysdir', '/dummy-keysdir')
man = CertificateManager(self.config)
res = man.getAgentCrtReqName()
- self.assertEquals(res, "/dummy-keysdir/dummy.hostname.csr")
+ self.assertEquals(res, os.path.abspath("/dummy-keysdir/dummy.hostname.csr"))
def test_getSrvrCrtName(self):
self.config.set('security', 'keysdir', '/dummy-keysdir')
man = CertificateManager(self.config)
res = man.getSrvrCrtName()
- self.assertEquals(res, "/dummy-keysdir/ca.crt")
+ self.assertEquals(res, os.path.abspath("/dummy-keysdir/ca.crt"))
@patch("os.path.exists")
@@ -265,8 +265,10 @@ class TestSecurity(unittest.TestCase):
# Checking file contents
saved = open(tmpoutfile, 'r').read()
self.assertEqual(saved, read_mock.read.return_value)
-
- os.unlink(tmpoutfile)
+ try:
+ os.unlink(tmpoutfile)
+ except:
+ pass
@patch("ambari_agent.hostname.hostname")
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/ambari_agent/TestShell.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestShell.py b/ambari-agent/src/test/python/ambari_agent/TestShell.py
index a839932..ce5fe89 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestShell.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestShell.py
@@ -27,8 +27,10 @@ from ambari_agent.AmbariConfig import AmbariConfig
from ambari_agent import shell
from shell import shellRunner
from sys import platform as _platform
+from only_for_platform import only_for_platform, PLATFORM_LINUX
import subprocess, time
+@only_for_platform(PLATFORM_LINUX)
class TestShell(unittest.TestCase):
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-agent/src/test/python/unitTests.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/unitTests.py b/ambari-agent/src/test/python/unitTests.py
index 83b6bdf..0fd6b49 100644
--- a/ambari-agent/src/test/python/unitTests.py
+++ b/ambari-agent/src/test/python/unitTests.py
@@ -23,6 +23,8 @@ import doctest
from os.path import dirname, split, isdir
import logging.handlers
import logging
+import platform
+from only_for_platform import get_platform, PLATFORM_WINDOWS
#TODO Add an option to randomize the tests' execution
#from random import shuffle
@@ -30,6 +32,11 @@ LOG_FILE_NAME='tests.log'
SELECTED_PREFIX = "_"
PY_EXT='.py'
+if get_platform() == PLATFORM_WINDOWS:
+ IGNORE_FOLDERS = ["resource_management"]
+else:
+ IGNORE_FOLDERS = ["resource_management_windows"]
+
class TestAgent(unittest.TestSuite):
def run(self, result):
run = unittest.TestSuite.run
@@ -54,7 +61,7 @@ def all_tests_suite():
src_dir = os.getcwd()
files_list = []
for directory in os.listdir(src_dir):
- if os.path.isdir(directory):
+ if os.path.isdir(directory) and not (directory in IGNORE_FOLDERS):
files_list += os.listdir(src_dir + os.sep + directory)
#TODO Add an option to randomize the tests' execution
#shuffle(files_list)
@@ -77,7 +84,7 @@ def all_tests_suite():
logger.info('------------------------------------------------------------------------')
suite = unittest.TestLoader().loadTestsFromNames(tests_list)
- return TestAgent([suite])
+ return unittest.TestSuite([suite])
def main():
@@ -93,7 +100,10 @@ def main():
logger.error('Python unit tests failed')
logger.error('Find detailed logs in ' + path)
logger.error('-----------------------------------------------------------------------')
- exit(1)
+ if get_platform() == PLATFORM_WINDOWS:
+ os._exit(1)
+ else:
+ exit(1)
else:
logger.info('------------------------------------------------------------------------')
logger.info('Python unit tests finished succesfully')
@@ -102,7 +112,6 @@ def main():
if __name__ == '__main__':
import os
import sys
- import io
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + os.sep + 'main' + os.sep + 'python')
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + os.sep + 'main' + os.sep + 'python' + os.sep + 'ambari_agent')
http://git-wip-us.apache.org/repos/asf/ambari/blob/4e659705/ambari-common/src/test/python/only_for_platform.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/test/python/only_for_platform.py b/ambari-common/src/test/python/only_for_platform.py
new file mode 100644
index 0000000..a0b5442
--- /dev/null
+++ b/ambari-common/src/test/python/only_for_platform.py
@@ -0,0 +1,35 @@
+"""
+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.
+
+Ambari Agent
+
+"""
+
+
+import platform
+
+PLATFORM_WINDOWS = "Windows"
+PLATFORM_LINUX = "Linux"
+
+def get_platform():
+ return platform.system()
+
+def only_for_platform(system):
+ def decorator(obj):
+ if platform.system() == system:
+ return obj
+ return decorator