diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/plugins/symbian/integration-test/unittest_crml_dc.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/plugins/symbian/integration-test/unittest_crml_dc.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,189 @@ +# *-* coding: utf-8 *-* +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +## +# @author Teemu Rytkonen + +import sys, os, shutil, unittest +import __init__ +from testautomation.base_testcase import BaseTestCase + +ROOT_PATH = os.path.abspath(os.path.dirname(__file__)) +TEMP_DIR = os.path.normpath(os.path.join(ROOT_PATH, 'temp/crml_dc')) + +if sys.platform == "win32": + CONE_SCRIPT = "cone.cmd" +else: + CONE_SCRIPT = "cone.sh" + +def get_cmd(action='compare'): + """Return the command used to run the ConE sub-action""" + if 'CONE_PATH' in os.environ: + CONE_CMD = os.path.join(os.environ['CONE_PATH'], CONE_SCRIPT) + if not os.path.exists(CONE_CMD): + raise RuntimeError("'%s' does not exist!" % CONE_CMD) + return '"%s" %s' % (CONE_CMD, action) + else: + SOURCE_ROOT = os.path.normpath(os.path.join(ROOT_PATH, '../../..')) + assert os.path.split(SOURCE_ROOT)[1] == 'source' + cmd = 'python "%s" %s' % (os.path.normpath(os.path.join(SOURCE_ROOT, 'scripts/cone_tool.py')), action) + return cmd + +def get_crml_dc_testdata_dir(): + # If running from the working copy + dir1 = os.path.normpath(os.path.join(ROOT_PATH, '../ConeCRMLPlugin/CRMLPlugin/tests')) + if os.path.isdir(dir1): return dir1 + + # If running from standalone + dir2 = os.path.normpath(os.path.join(ROOT_PATH, 'testdata/compare/crml_dc')) + if os.path.isdir(dir2): return dir2 + + raise RuntimeError("CRML DC test data found neither in '%s' nor '%s'!" % (dir1, dir2)) + + +class TestCompareAction(BaseTestCase): + + def setUp(self): + if not os.path.exists(TEMP_DIR): + os.makedirs(TEMP_DIR) + + def _run_crml_dc_test(self, crml_file_name_without_extension, do_filtering=True): + testdata_dir = get_crml_dc_testdata_dir() + report_file = 'crml_dc_%s.csv' % crml_file_name_without_extension + if do_filtering: + impl_filter = '%s' % crml_file_name_without_extension + else: + impl_filter = '.*' + self._run_comparison_test( + source_project = os.path.join(testdata_dir, 'comp_project_1'), + source_conf = 'root.confml', + target_project = os.path.join(testdata_dir, 'comp_project_2'), + target_conf = 'root.confml', + report_type = 'crml_dc_csv', + report_file = report_file, + impl_filter = impl_filter, + check_against_expected_output = True) + + def test_crml_dc_00000001_simple_keys(self): self._run_crml_dc_test('00000001_simple_keys') + def test_crml_dc_00000002_bitmask_keys(self): self._run_crml_dc_test('00000002_bitmask_keys') + def test_crml_dc_00000003_key_ranges(self): self._run_crml_dc_test('00000003_key_ranges') + def test_crml_dc_00000004_key_type_changed(self): self._run_crml_dc_test('00000004_key_type_changed') + def test_crml_dc_00000005_repo_attrs_changed(self): self._run_crml_dc_test('00000005_repo_attrs_changed') + def test_crml_dc_10000001_removed_repo(self): self._run_crml_dc_test('10000001_removed_repo') + def test_crml_dc_20000001_added_repo(self): self._run_crml_dc_test('20000001_added_repo') + def test_crml_dc_00000006_renamed_repo(self): self._run_crml_dc_test('00000006_renamed_repo') + def test_crml_dc_30000000_duplicate_repo(self): self._run_crml_dc_test('30000000_duplicate_repo') + def test_crml_dc_all(self): self._run_crml_dc_test('all', do_filtering=False) + + def test_crml_dc_html_report(self): + testdata_dir = get_crml_dc_testdata_dir() + + # Ignore the portion of the data where the path to the target is shown + ignore_patterns = [r'\s*Target:\s*.*[\\,/]comp_project_2;root.confml'] + + self._run_comparison_test( + source_project = os.path.join(testdata_dir, 'comp_project_1'), + source_conf = 'root.confml', + target_project = os.path.join(testdata_dir, 'comp_project_2'), + target_conf = 'root.confml', + report_type = 'crml_dc', + report_file = 'crml_dc.html', + check_against_expected_output = True, + data_ignore_patterns = ignore_patterns) + + def _run_comparison_test(self, **kwargs): + """ + Run comparison test. + + @param source_project: The source project, relative to the test data directory or an + absolute path. + @param source_conf: The source configuration. + @param target_project: The target project, relative to the test data directory + If not given or None, the source project will be used also for this. + @param target_conf: The target configuration. + @param template: The template file used for the report, relative to the test data directory. + @param report_type: The report type. Should not be used with the 'template' parameter. + @param report_file: The location where the report is written. This will also be used as + the name of the expected report file against which the actual report is checked. + @param impl_filter: Implementation filter to use. + @param check_against_expected_output: If True, the actual report is checked against an + expected file with the same name. Otherwise it is just checked that the output + file has been created and it contains something. + @param data_ignore_patterns: List of regular expression patterns for ignoring some portions + of the data when checking against expected output. The patterns are used to remove + data portions before doing the actual comparison. + """ + # Get parameters + # --------------- + def get_project_absdir(project_dir): + if os.path.isabs(project_dir): + return project_dir + else: + return os.path.normpath(os.path.join(TESTDATA_DIR, project_dir)) + + source_conf = kwargs['source_conf'] + target_conf = kwargs['target_conf'] + source_project = get_project_absdir(kwargs['source_project']) + target_project = kwargs.get('target_project', None) + + if target_project != None: + target_project = get_project_absdir(target_project) + target_conf = target_project + ';' + target_conf + + template = kwargs.get('template', None) + report_type = kwargs.get('report_type', None) + if template and report_type: + raise ValueError("Both 'template' and 'report_type' parameters given") + elif not template and not report_type: + raise ValueError("Neither 'template' not 'report_type' parameter given") + elif template: + template = os.path.normpath(os.path.join(TESTDATA_DIR, template)) + + report_file = kwargs['report_file'] + check_against_expected_output = kwargs['check_against_expected_output'] + actual_report = os.path.normpath(os.path.join(TEMP_DIR, report_file)) + + impl_filter = kwargs.get('impl_filter', None) + + + # Generate output + # ---------------- + if report_type: + command = '%s -p "%s" -s "%s" -t "%s" --report-type "%s" --report "%s"' \ + % (get_cmd(), source_project, source_conf, target_conf, report_type, actual_report) + else: + command = '%s -p "%s" -s "%s" -t "%s" --template "%s" --report "%s"' \ + % (get_cmd(), source_project, source_conf, target_conf, template, actual_report) + + if impl_filter: + command += ' --impl-filter "%s"' % impl_filter + + self.remove_if_exists(actual_report) + self.run_command(command) + + + # Check output + # ------------- + if check_against_expected_output: + expected_report = os.path.normpath(os.path.join(ROOT_PATH, 'testdata/crml_dc_expected', report_file)) + ignore_patterns = kwargs.get('data_ignore_patterns', []) + self.assert_file_contents_equal(expected_report, actual_report, ignore_patterns) + else: + self.assert_exists_and_contains_something(actual_report) + + +if __name__ == '__main__': + unittest.main()