summaryrefslogtreecommitdiff
path: root/tests/tools.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tools.py')
-rw-r--r--tests/tools.py133
1 files changed, 96 insertions, 37 deletions
diff --git a/tests/tools.py b/tests/tools.py
index 392f395..672c60b 100644
--- a/tests/tools.py
+++ b/tests/tools.py
@@ -18,48 +18,107 @@
# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
+"""
+Define util functions for unit test
+"""
+import re
import os
import sys
+import unittest
+import shutil
+import json
+import tempfile
from functools import wraps
-from azurelinuxagent.utils.osutil import OSUTIL
-
-parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-sys.path.append(parent)
-
-def simple_file_grep(file_path, search_str):
- for line in open(file_path):
- if search_str in line:
- return line
-
-def mock(target, name, mock):
- def decorator(func):
- @wraps(func)
- def wrapper(*args, **kwargs):
- origin = getattr(target, name)
- setattr(target, name, mock)
- try:
- result = func(*args, **kwargs)
- except:
- raise
- finally:
- setattr(target, name, origin)
- return result
- return wrapper
- return decorator
+import azurelinuxagent.conf as conf
+import azurelinuxagent.logger as logger
+import azurelinuxagent.event as event
+
+#Import mock module for Python2 and Python3
+try:
+ from unittest.mock import Mock, patch, MagicMock
+except ImportError:
+ from mock import Mock, patch, MagicMock
+
+test_dir = os.path.dirname(os.path.abspath(__file__))
+data_dir = os.path.join(test_dir, "data")
+
+debug = False
+if os.environ.get('DEBUG') == '1':
+ debug = True
+
+#Enable verbose logger to stdout
+if debug:
+ logger.add_logger_appender(logger.AppenderType.STDOUT,
+ logger.LogLevel.VERBOSE)
+
+class AgentTestCase(unittest.TestCase):
+ def setUp(self):
+ prefix = "{0}_".format(self.__class__.__name__)
+ self.tmp_dir = tempfile.mkdtemp(prefix=prefix)
+ conf.get_lib_dir = Mock(return_value=self.tmp_dir)
+ ext_log_dir = os.path.join(self.tmp_dir, "azure")
+ conf.get_ext_log_dir = Mock(return_value=ext_log_dir)
+
+ def tearDown(self):
+ if not debug and self.tmp_dir is not None:
+ shutil.rmtree(self.tmp_dir)
+
+def load_data(name):
+ """Load test data"""
+ path = os.path.join(data_dir, name)
+ with open(path, "r") as data_file:
+ return data_file.read()
-class MockFunc(object):
- def __init__(self, name='', retval=None):
- self.name = name
- self.retval = retval
+def load_bin_data(name):
+ """Load test bin data"""
+ path = os.path.join(data_dir, name)
+ with open(path, "rb") as data_file:
+ return data_file.read()
- def __call__(*args, **kwargs):
- self = args[0]
- self.args = args[1:]
- self.kwargs = kwargs
- return self.retval
+
+supported_distro = [
+ ["ubuntu", "12.04", ""],
+ ["ubuntu", "14.04", ""],
+ ["ubuntu", "14.10", ""],
+ ["ubuntu", "15.10", ""],
+ ["ubuntu", "15.10", "Snappy Ubuntu Core"],
+
+ ["coreos", "", ""],
+
+ ["suse", "12", "SUSE Linux Enterprise Server"],
+ ["suse", "13.2", "openSUSE"],
+ ["suse", "11", "SUSE Linux Enterprise Server"],
+ ["suse", "13.1", "openSUSE"],
+
+ ["debian", "6.0", ""],
+
+ ["redhat", "6.5", ""],
+ ["redhat", "7.0", ""],
+
+]
+
+def distros(distro_name=".*", distro_version=".*", distro_full_name=".*"):
+ """Run test on multiple distros"""
+ def decorator(test_method):
+ @wraps(test_method)
+ def wrapper(self, *args, **kwargs):
+ for distro in supported_distro:
+ if re.match(distro_name, distro[0]) and \
+ re.match(distro_version, distro[1]) and \
+ re.match(distro_full_name, distro[2]):
+ if debug:
+ logger.info("Run {0} on {1}", test_method.__name__,
+ distro)
+ new_args = []
+ new_args.extend(args)
+ new_args.extend(distro)
+ test_method(self, *new_args, **kwargs)
+ #Call tearDown and setUp to create seprated environment for
+ #distro testing
+ self.tearDown()
+ self.setUp()
+ return wrapper
+ return decorator
-#Mock osutil so that the test of other part will be os unrelated
-OSUTIL.get_lib_dir = MockFunc(retval='/tmp')
-OSUTIL.get_ext_log_dir = MockFunc(retval='/tmp/log')