configurationengine/source/scripts/tests/unittest_generate.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
# *-* coding: utf-8 *-*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
## 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
# @author Teemu Rytkonen
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    20
import os, unittest
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    21
import tempfile
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    22
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
from testautomation.base_testcase import BaseTestCase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
from testautomation import zip_dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
from scripttest_common import get_cmd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
testproject = os.path.join(ROOT_PATH,'test_project.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
rootconf = 'root3.confml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
class TestGenerate(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    def test_get_help(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        cmd = '%s -h' % get_cmd('generate')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
        out = self.run_command(cmd)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    36
        lines = out.split(os.linesep)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
        self.assertTrue('Options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        self.assertTrue('  Generate options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
    def test_generate(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self.set_modification_reference_time(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        OUTPUT_DIR = os.path.join(ROOT_PATH, 'temp/gen1/output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        self.remove_if_exists(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        cmd = '%s -p "%s" -c "%s" -o "%s"' % (get_cmd('generate'),testproject,rootconf,OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        self.assert_exists_and_contains_something(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        self.assert_not_modified(testproject)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    49
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    50
    def test_generate_output_file_from_script(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    51
        testproject = os.path.join(ROOT_PATH, 'testdata/generate/impl_container/project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    52
        self.set_modification_reference_time(testproject)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    53
        OUTPUT_DIR = os.path.join(ROOT_PATH, 'temp/output')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    54
        self.remove_if_exists(OUTPUT_DIR)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    55
        LOGFILE = os.path.join(OUTPUT_DIR, 'cone_temp.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    56
        cmd = '%s -p "%s" -c "%s" -o "%s" --log-file "%s"' % (get_cmd('generate'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    57
                                                                          testproject,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    58
                                                                          'base_root.confml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    59
                                                                          OUTPUT_DIR,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    60
                                                                          LOGFILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    61
        out = self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    62
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    63
        self.assertEquals(True, os.path.isfile(os.path.join(OUTPUT_DIR, 'output_test.txt')))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
        self.assert_not_modified(testproject)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    65
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    66
    def test_generate_with_absolute_path(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    67
        self.set_modification_reference_time(testproject)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    68
        tempdir = os.path.join(tempfile.gettempdir(), 'cone_output')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    69
        (drive,OUTPUT_DIR) = os.path.splitdrive(os.path.abspath(tempdir))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    70
        LOGFILE = os.path.join(OUTPUT_DIR, 'cone_temp.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    71
        self.remove_if_exists(OUTPUT_DIR)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    72
        cmd = '%s -p "%s" -c "%s" -o "%s" --log-file "%s"' % (get_cmd('generate'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    73
                                                            testproject,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    74
                                                            rootconf,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    75
                                                            OUTPUT_DIR,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    76
                                                            LOGFILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    77
        out = self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    78
        self.assert_exists_and_contains_something(OUTPUT_DIR)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    79
        self.assertTrue(os.path.exists(LOGFILE))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    80
        self.assert_not_modified(testproject)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    81
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    def test_generate_with_report(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        self.set_modification_reference_time(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        OUTPUT_DIR  = os.path.join(ROOT_PATH, 'temp/gen2/output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        REPORT_FILE = os.path.join(ROOT_PATH, 'temp/gen2/report.html')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        self.remove_if_exists([OUTPUT_DIR, REPORT_FILE])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        cmd = '%s -p "%s" -c "%s" -o "%s" -r "%s"' % (get_cmd('generate'),testproject,rootconf, OUTPUT_DIR, REPORT_FILE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        self.assert_exists_and_contains_something(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        self.assert_exists_and_contains_something(REPORT_FILE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        self.assert_not_modified(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
       
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
    def test_generate_with_report_using_custom_template(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
            output_dir    = 'temp/gen3/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
            report_file   = 'temp/gen3/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
            template_path = 'template.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
    def test_generate_with_report_using_custom_template_in_relative_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
            output_dir    = 'temp/gen4/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
            report_file   = 'temp/gen4/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
            template_path = 'test_template/template2.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
    def test_generate_with_report_using_custom_template_in_relative_dir2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
            output_dir    = 'temp/gen5/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
            report_file   = 'temp/gen5/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
            template_path = '../tests/test_template/template2.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    def test_generate_with_report_using_custom_template_in_absolute_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
            output_dir    = 'temp/gen6/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
            report_file   = 'temp/gen6/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
            template_path = os.path.join(ROOT_PATH,'test_template/template2.csv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
    def _run_test_generate_with_report_using_custom_template(self,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        output_dir, report_file, template_path, project=testproject):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        # Since we are testing also relative paths here, we need
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        # to run the test in the same directory as the script
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        os.chdir(ROOT_PATH)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
            self.set_modification_reference_time(project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
            self.remove_if_exists([output_dir, report_file])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
            cmd = '%s -p "%s" -c "%s" -o "%s" -r "%s" -t "%s"' % (get_cmd('generate'),project,rootconf, output_dir, report_file, template_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
            out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
            self.assert_exists_and_contains_something(output_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
            self.assert_exists_and_contains_something(report_file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
            self.assert_not_modified(project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
    def test_generate_with_report_and_invalid_refs_in_data(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
            project       = os.path.join(ROOT_PATH, 'testdata/generate/test_project_invalid_data_refs.zip'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
            output_dir    = 'temp/gen7/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
            report_file   = 'temp/gen7/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
            template_path = os.path.join(ROOT_PATH,'test_template/template2.csv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   143
    def test_generate_with_errors_in_project(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   144
        project = os.path.join(ROOT_PATH, 'testdata/generate/error_test_project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   145
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   146
        OUTPUT_DIR  = os.path.join(ROOT_PATH, 'temp/gen_err/output')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   147
        REPORT_FILE = os.path.join(ROOT_PATH, 'temp/gen_err/report.html')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   148
        LOG_FILE = os.path.join(ROOT_PATH, 'temp/gen_err/cone.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   149
        self.remove_if_exists([OUTPUT_DIR, REPORT_FILE, LOG_FILE])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   150
        cmd = '%s -p "%s" -c root.confml -o "%s" -r "%s" --log-file "%s"' % (get_cmd('generate'),project, OUTPUT_DIR, REPORT_FILE, LOG_FILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   151
        out = self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   152
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   153
        # Check that output and report are generated even though
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   154
        # there are errors in the project
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   155
        self.assert_exists_and_contains_something(OUTPUT_DIR)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   156
        self.assert_exists_and_contains_something(REPORT_FILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   157
        self.assert_exists_and_contains_something(LOG_FILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   158
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   159
        # Check that the errors are shown in the log correctly
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   160
        self.assert_file_contains(LOG_FILE,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   161
            ['''ERROR   : cone.rules Exception in get_refs() of relation ConfigureRelation(ref='layer1/implml/rules_with_errors.implml', lineno=11): Expression is None''',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   162
             '''ERROR   : cone Error executing rule ConfigureRelation(ref='layer1/implml/rules_with_errors.implml', lineno=11): ParseException: Syntax error: " configures ${TempFeature.Int} = 6000"''',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   163
             '''ERROR   : cone Error executing rule ConfigureRelation(ref='layer1/implml/rules_with_errors.implml', lineno=12): ParseException: Syntax error: "True configures "'''])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   164
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   165
        # Check that the errors are shown in the report correctly
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   166
        self.assert_file_contains(REPORT_FILE, data=[],
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   167
            regexes=[r'Exception:\s*layer1/implml/rules_with_errors.implml:11',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   168
                     r'Exception:\s*layer1/implml/rules_with_errors.implml:12'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   169
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   170
        # Check from the output that the other rules were successfully
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   171
        # executed
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   172
        self.assert_file_contains(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   173
            os.path.join(OUTPUT_DIR, 'content/rules_with_errors_test.txt'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   174
            ['TempFeature.String:  testing and more testing',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   175
            'TempFeature.Int:     501',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   176
            'TempFeature.Real:    1.75',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   177
            'TempFeature.Boolean: True'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   178
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
class TestGenerateAllImplsOnLastLayer(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
    def _prepare_workdir(self, workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        workdir = os.path.join(ROOT_PATH, workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        self.recreate_dir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        # Any needed extra preparation can be done here
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        return workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
    def test_generate_all_impls_on_last_layer_on_file_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
        self._run_test_generate_all_impls_on_last_layer('temp/gen_ll1', project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
    def test_generate_all_impls_on_last_layer_on_zip_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        project_zip = os.path.join(ROOT_PATH, "temp/generation_test_project.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        self.remove_if_exists(project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
        zip_dir.zip_dir(project_dir, project_zip, [zip_dir.SVN_IGNORE_PATTERN])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
        self.assert_exists_and_contains_something(project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        self._run_test_generate_all_impls_on_last_layer('temp/gen_ll2', project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    def test_generate_all_impls_on_last_layer_on_file_storage_with_report(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
        # Create a temp workdir and go there to run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        workdir = self._prepare_workdir('temp/gen_ll3')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        os.chdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
            cmd = '%s -p "%s" --output output --layer -1 --add-setting-file imaker_variantdir.cfg --report report.html' % (get_cmd('generate'), project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
            self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        ACTUAL_REPORT = os.path.join(ROOT_PATH, 'temp/gen_ll3/report.html')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        EXPECTED_REPORT = os.path.join(ROOT_PATH, "testdata/generate/expected_report.html")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
        ignores = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
            r'<tr>\s*<td>Report generated</td>\s*<td>.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            r'<tr>\s*<td>Generation duration</td>\s*<td>.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
            r'<a href=".*">',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            r'<tr>\s*<td align="left">Project</td>\s*<td align="left">.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
            r'<tr>\s*<td align="left">Working directory</td>\s*<td align="left">.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        self.assert_file_contents_equal(ACTUAL_REPORT, EXPECTED_REPORT, ignores)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
    def _run_test_generate_all_impls_on_last_layer(self, workdir, project):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        # Create a temp workdir and go there to run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        workdir = self._prepare_workdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
        os.chdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
            cmd = '%s -p "%s" --output output --layer -1 --add-setting-file imaker_variantdir.cfg' % (get_cmd('generate'), project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
            print self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
            EXPECTED_DIR = os.path.join(ROOT_PATH, "testdata/generate/expected")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            self.assert_dir_contents_equal('output', EXPECTED_DIR, ['.svn'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            # Check that output has also been generated to the overridden output root directory
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   246
            #self.assert_exists_and_contains_something('overridden_output/output_rootdir_test.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   247
            #self.assert_exists_and_contains_something('overridden_output/test_subdir/output_rootdir_test.txt')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
class TestGenerationImplFilteringByTags(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
    def test_no_tag_filtering(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
            name     = 'no_filter',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
            filter   = '',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
            expected = ['none', 't1', 't2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
    def test_filter_by_t1(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
            name     = 't1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
            filter   = '--impl-tag target:t1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
            expected = ['t1', 't1_t2', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
    def test_filter_by_t2(self):    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
            name     = 't2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
            filter   = '--impl-tag target:t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
            expected = ['t2', 't1_t2', 't2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    def test_filter_by_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
            name     = 't3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
            filter   = '--impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
            expected = ['t3', 't1_t3', 't2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
    def test_filter_by_t1_or_t2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
            name     = 't1_or_t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
            filter   = '--impl-tag target:t1 --impl-tag target:t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
            expected = ['t1', 't2', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
    def test_filter_by_t2_or_t3(self):        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
            name     = 't2_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
            filter   = '--impl-tag target:t2 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
            expected = ['t2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
    def test_filter_by_t1_or_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
            name     = 't1_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
            filter   = '--impl-tag target:t1 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
            expected = ['t1', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
    def test_filter_by_t1_or_t2_or_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
            name     = 't1_or_t2_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
            expected = ['t1', 't2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
    def test_filter_by_t1_and_t2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
            name     = 't1_and_t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
            expected = ['t1_t2', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
    def test_filter_by_t2_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
            name     = 't2_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
            filter   = '--impl-tag target:t2 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
            expected = ['t2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
    def test_filter_by_t1_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
            name     = 't1_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
            filter   = '--impl-tag target:t1 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
            expected = ['t1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
    def test_filter_by_t1_and_t2_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
            name     = 't1_and_t2_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
            expected = ['t1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
    def _run_tag_filtering_test(self, name, filter, expected):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
        PROJECT = os.path.join(ROOT_PATH, 'tag_filtering_test_project')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
        OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_tf/', name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        self.remove_if_exists(OUTPUT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
        cmd = '%s -p "%s" --output "%s" --log-file="%s" %s' % (get_cmd('generate'), PROJECT, OUTPUT, LOG, filter)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   333
        #print cmd
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        self.assert_exists_and_contains_something(OUTPUT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        expected_files = sorted([x + '.txt' for x in expected])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
        actual_files = sorted(os.listdir(OUTPUT))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
        self.assertEquals(expected_files, actual_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   343
class TestGenerationImplFilteringByLayers(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   344
    def test_filter_by_last_layer(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   345
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   346
            name     = 'll1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   347
            filter   = '--layer -1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   348
            expected = ['layer3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   349
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   350
    def test_filter_by_two_last_layers(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   351
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   352
            name     = 'll2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   353
            filter   = '--layer -1 --layer 2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   354
            expected = ['layer2', 'layer3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   355
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   356
    def test_filter_by_regex_1(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   357
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   358
            name     = 'r1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   359
            filter   = '--layer-regex layer[13]',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   360
            expected = ['layer1', 'layer3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   361
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   362
    def test_filter_by_regex_2(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   363
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   364
            name     = 'r2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   365
            filter   = '--layer-regex [12]/root.confml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   366
            expected = ['layer1', 'layer2'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   367
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   368
    def test_filter_by_regex_3(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   369
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   370
            name     = 'r3',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   371
            filter   = '--layer-regex layer1 --layer-regex layer3',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   372
            expected = ['layer1', 'layer3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   373
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   374
    def test_filter_by_wildcard(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   375
        self._run_layer_filtering_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   376
            name     = 'w',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   377
            filter   = '--layer-wildcard *layer*',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   378
            expected = ['layer1', 'layer2', 'layer3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   379
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   380
    def _run_layer_filtering_test(self, name, filter, expected):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   381
        PROJECT = os.path.join(ROOT_PATH, 'testdata/generate/layer_filtering_project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   382
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   383
        OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_lf/', name)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   384
        OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   385
        LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   386
        self.remove_if_exists(OUTPUT)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   387
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   388
        cmd = '%s -p "%s" --output "%s" --log-file="%s" %s' % (get_cmd('generate'), PROJECT, OUTPUT, LOG, filter)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   389
        #print cmd
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   390
        self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   391
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   392
        self.assert_exists_and_contains_something(OUTPUT)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   393
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   394
        expected_files = sorted([x + '.txt' for x in expected])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   395
        actual_files = sorted(os.listdir(OUTPUT))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   396
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   397
        # Ignore the rule output txt files
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   398
        for f in ('rule_test_v2.txt', 'rule_test_v3.txt'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   399
            if f in actual_files: del actual_files[actual_files.index(f)]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   400
        self.assertEquals(expected_files, actual_files)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   401
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   402
        # Check that the correct rules have been executed
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   403
        expected_str = ' ' + ' '.join(sorted(expected)) + ' x'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   404
        self.assert_file_content_equals(os.path.join(OUTPUT, 'rule_test_v2.txt'), expected_str)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   405
        self.assert_file_content_equals(os.path.join(OUTPUT, 'rule_test_v3.txt'), expected_str)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   406
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   407
class TestGenerateInvalidParameters(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   408
    PROJECT = os.path.join(ROOT_PATH, 'testdata/generate/layer_filtering_project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   409
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   410
    def _run_test(self, args, expected_msg):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   411
        if not isinstance(args, basestring):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   412
            args = ' '.join(args)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   413
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   414
        cmd = get_cmd('generate') + ' ' + args
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   415
        # Note: The following run_command() should really expect the
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   416
        #       return code 2, but for some reason when running from the
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   417
        #       standalone test set, the return value is 0 for some cases
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   418
        #       (specifically, the ones that don't use parser.error() to
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   419
        #       exit the program)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   420
        out = self.run_command(cmd, expected_return_code = None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   421
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   422
        self.assertTrue(expected_msg in out,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   423
                        "Expected message '%s' not in output ('%s')" % (expected_msg, out))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   424
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   425
    def test_invalid_layer_index_1(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   426
        self._run_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   427
            '-p "%s" --layer -1 --layer foobar' % self.PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   428
            "option --layer: invalid integer value: 'foobar'")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   429
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   430
    def test_invalid_layer_index_2(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   431
        self._run_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   432
            '-p "%s" --layer -1 --layer 7' % self.PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   433
            'Invalid layer index: 7')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   434
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   435
    def test_no_matching_layer_for_regex(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   436
        self._run_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   437
            '-p "%s" --layer-regex foo' % self.PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   438
            'No layers matched by layer patterns')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   439
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   440
    def test_no_matching_layer_for_wildcard(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   441
        self._run_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   442
            '-p "%s" --layer-wildcard foo' % self.PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   443
            'No layers matched by layer patterns')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   444
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   445
class TestGenerateImplContainer(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   446
    def _run_test(self, root, args):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   447
        PROJECT = os.path.join(ROOT_PATH, 'testdata/generate/impl_container/project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   448
        EXPECTED = os.path.join(ROOT_PATH, 'testdata/generate/impl_container/expected', root)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   449
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   450
        OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_ic/', root)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   451
        OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   452
        LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   453
        self.remove_if_exists(OUTPUT)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   454
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   455
        cmd = '%s -p "%s" -c %s --output "%s" --log-file="%s" %s' % (get_cmd('generate'), PROJECT, root, OUTPUT, LOG, args)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   456
        #print cmd
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   457
        self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   458
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   459
        self.assert_dir_contents_equal(EXPECTED, OUTPUT, ['.svn'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   460
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   461
    def test_implcontainer_with_triggering_rule_and_templateml(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   462
        self._run_test(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   463
            root = 'data_root.confml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   464
            args = '--layer -1')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   465
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   466
class TestGenerateSetTempvarValue(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   467
    def test_set_tempvar_value_from_cmdline(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   468
        PROJECT = os.path.join(ROOT_PATH, 'generation_test_project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   469
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   470
        OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_tvs/')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   471
        OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   472
        LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   473
        self.remove_if_exists(OUTPUT)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   474
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   475
        cmd = ['%(cone_cmd)s',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   476
               '-p "%(project)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   477
               '-c root.confml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   478
               '--output "%(output)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   479
               '--log-file="%(log_file)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   480
               '--impl simple_tempvar',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   481
               '--set "TempFeature.String=testing from cmdline"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   482
               '--set "TempFeature.Int=8090"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   483
               '--set "TempFeature.Real=-5.75"',]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   484
        cmd = ' '.join(cmd) % {'cone_cmd':  get_cmd('generate'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   485
                               'project':   PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   486
                               'output':    OUTPUT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   487
                               'log_file':  LOG}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   488
        #print cmd
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   489
        self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   490
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   491
        self.assert_file_contains(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   492
            os.path.join(OUTPUT, 'content', 'simple_tempvars_test.txt'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   493
            ['TempFeature.String:  testing from cmdline and more testing',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   494
             'TempFeature.Int:     8091',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   495
             'TempFeature.Real:    -5.5'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   496
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   497
class TestGenerateWhatOutput(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   498
    PROJECT = os.path.join(ROOT_PATH, 'generation_test_project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   499
    OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_wop')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   500
    OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   501
    LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   502
    WHAT_FILE   = os.path.join(OUTPUT_ROOT, 'what_output.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   503
    CMP_FILE    = os.path.join(PROJECT, 'what_output.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   504
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   505
    def test_write_what_out(self):        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   506
        self.remove_if_exists(self.OUTPUT)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   507
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   508
        cmd = ['%(cone_cmd)s',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   509
               '-p "%(project)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   510
               '-c root.confml',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   511
               '--what="%(what_file)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   512
               '--output "%(output)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   513
               '--log-file="%(log_file)s"',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   514
               '--all-layers',]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   515
        cmd = ' '.join(cmd) % {'cone_cmd':      get_cmd('generate'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   516
                               'project':       self.PROJECT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   517
                               'what_file':     self.WHAT_FILE,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   518
                               'output':        self.OUTPUT,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   519
                               'log_file':      self.LOG}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   520
        self.run_command(cmd)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   521
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   522
        cmp_what_out_fh = open(self.CMP_FILE, 'r')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   523
        cmp_files = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   524
        try: cmp_files = cmp_what_out_fh.readlines()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   525
        finally: cmp_what_out_fh.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   526
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   527
        self.assert_exists_and_contains_something(self.WHAT_FILE)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   528
        self.assert_file_contains(self.WHAT_FILE, [self._flip(c.strip()) for c in cmp_files])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   529
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   530
    def _flip(self, path):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   531
        newpath= path.replace('\\', os.sep)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   532
        newpath = newpath.replace('/', os.sep)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   533
        return newpath
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   534
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   535
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
if __name__ == '__main__':
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   537
    unittest.main()