configurationengine/source/scripts/tests/unittest_export.py
author m2lahtel
Thu, 21 Oct 2010 16:36:53 +0300
changeset 5 d2c80f5cab53
parent 3 e7e0ae78773e
permissions -rw-r--r--
Updated to version 1.2.14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
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
Test the configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import string
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import sys
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import os
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import subprocess
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
import zipfile
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
import shutil
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    27
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
from testautomation.base_testcase import BaseTestCase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
from testautomation.unzip_file import unzip_file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
from cone.storage.filestorage import FileStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
from cone.storage.zipstorage import ZipStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
from scripttest_common import get_cmd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
ROOT_PATH   = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
def abspath(p):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    return os.path.normpath(os.path.join(ROOT_PATH, p))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
TEST_PROJECT_CPF    = abspath("test_project.cpf")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
TEMP_DIR            = abspath("temp/export")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
EXPORT_TEST_PROJECT = abspath("export_test_project.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
class TestExport(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        self.orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        os.chdir(ROOT_PATH)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        os.chdir(self.orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    def test_get_help(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        cmd = '%s -h' % get_cmd('export')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        out = self.run_command(cmd)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    55
        lines = out.split(os.linesep)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        self.assertTrue('Options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
        self.assertTrue('  Export options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
    def test_export_project(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        remote = os.path.join(TEMP_DIR, 'test1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        self.remove_if_exists(remote)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
        self.set_modification_reference_time(TEST_PROJECT_CPF)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
        cmd = '%s -p "%s" -c "root4.confml" -r "%s"' % (get_cmd('export'), TEST_PROJECT_CPF, remote)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        #print out
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    67
        lines = out.split(os.linesep)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        self.assertTrue('Export root4.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        self.assertEquals(set(os.listdir(remote)),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            set(["Layer1", "Layer2", "Layer3", "Layer4", ".metadata", "root4.confml"]))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
        def fp(p): # fp = full_path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
            return os.path.join(remote, p)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        self.assert_exists_and_contains_something(fp("Layer1"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        self.assert_exists_and_contains_something(fp("Layer2"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        self.assert_exists_and_contains_something(fp("Layer3"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        self.assert_exists_and_contains_something(fp("Layer4"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        self.assert_exists_and_contains_something(fp("root4.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        self.assert_not_modified(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    def test_export_multiple_configurations(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        remote = os.path.join(TEMP_DIR, 'test2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        self.remove_if_exists(remote)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        self.set_modification_reference_time(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        cmd = '%s -p "%s" -c "root2.confml" -c "root3.confml" -c "root5.confml" -r "%s"' % (get_cmd('export'), TEST_PROJECT_CPF, remote)
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
        #print out
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    90
        lines = out.split(os.linesep)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        self.assertTrue('Export root2.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        self.assertTrue('Export root3.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        self.assertTrue('Export root5.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self.assertEquals(set(os.listdir(remote)),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
            set(["Layer1", "Layer2", "Layer3", "Layer4", "Layer5",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
                 ".metadata", "root2.confml", "root3.confml", "root5.confml"]))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        def fp(p): # fp = full_path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
            return os.path.join(remote, p)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        self.assert_exists_and_contains_something(fp("Layer1"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        self.assert_exists_and_contains_something(fp("Layer2"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        self.assert_exists_and_contains_something(fp("Layer3"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        self.assert_exists_and_contains_something(fp("Layer4"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        self.assert_exists_and_contains_something(fp("Layer5"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        self.assert_exists_and_contains_something(fp("root2.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        self.assert_exists_and_contains_something(fp("root3.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        self.assert_exists_and_contains_something(fp("root5.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self.assert_not_modified(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    def test_export_multiple_configurations_into_cpf(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        remote = os.path.join(TEMP_DIR, 'test3.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        self.remove_if_exists(remote)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        self.set_modification_reference_time(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        cmd = '%s -p "%s" -c "root2.confml" -c "root3.confml" -c "root5.confml" -r "%s"' % (get_cmd('export'), TEST_PROJECT_CPF, remote)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        #print out
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   119
        lines = out.split(os.linesep)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        self.assertTrue('Export root2.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        self.assertTrue('Export root3.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        self.assertTrue('Export root5.confml to %s done!' % remote in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        self.assert_zip_entry_exists(remote, "root2.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        self.assert_zip_entry_exists(remote, "root3.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        self.assert_zip_entry_exists(remote, "root5.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        self.assert_not_modified(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
    def assert_zip_entry_exists(self, zip_file, path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        zf = zipfile.ZipFile(zip_file, "r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
            if path not in zf.namelist():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
                self.fail("Entry '%s' not in zip file '%s'." % (path, zipfile))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
            zf.close()
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   137
            
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   138
    def assert_zip_entry_exists_not(self, zip_file, path):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   139
        zf = zipfile.ZipFile(zip_file, "r")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   140
        try:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   141
            if path in zf.namelist():
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   142
                self.fail("Entry '%s' in zip file '%s'." % (path, zipfile))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   143
        finally:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   144
            zf.close()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
    def _run_test_export_project_to_project(self,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        source_project, source_storage_type,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        target_project, target_storage_type,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
        empty_folders):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        # Set up the source project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        # -------------------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        source_path = os.path.join(TEMP_DIR, source_project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        self.remove_if_exists(source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        if source_storage_type == 'file':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
            unzip_file(EXPORT_TEST_PROJECT, source_path, delete_if_exists=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        elif source_storage_type == 'zip':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
            self.create_dir_for_file_path(source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            shutil.copy2(EXPORT_TEST_PROJECT, source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
            raise RuntimeError('Invalid storage type %r' % source_storage_type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        # Set up the target project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        # -------------------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        target_path = os.path.join(TEMP_DIR, target_project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        self.remove_if_exists(target_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        if target_storage_type not in ('file', 'zip'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
            raise RuntimeError('Invalid storage type %r' % target_storage_type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        # Run the command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        # ---------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        if empty_folders:   empty_folder_switch = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        else:               empty_folder_switch = '--exclude-folders'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        cmd = '%s -p "%s" -c "root5.confml" -r "%s" %s' % \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
            (get_cmd('export'), source_path, target_path, empty_folder_switch)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
        # Check the output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
        # ----------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        if target_storage_type == 'file':   storage_class = FileStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        elif target_storage_type == 'zip':  storage_class = ZipStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        storage = storage_class(target_path, 'r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        res_list = storage.list_resources("/", recurse=True, empty_folders=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        expected = ['.metadata',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
                    'root5.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
                    'Layer1/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
                    'Layer2/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
                    'Layer3/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
                    'Layer4/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
                    'Layer5/root.confml',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        for res in expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
            self.assertTrue(res in res_list, "%r not in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
            self.assertFalse(storage.is_folder(res), "%r is a folder")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        not_expected = ['Layer1/foo/foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
                        'Layer2/foo/layer2_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
                        'Layer3/foo/layer3_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
                        'Layer4/foo/layer4_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
                        'Layer5/foo/layer5_foo.txt',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        for res in not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
            self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        # Check empty folders
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        expected = ['Layer1/doc/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
                    'Layer1/content/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
                    'Layer1/implml/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
                    'Layer3/doc/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
                    'Layer3/content/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
                    'Layer3/implml/empty',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        not_expected = ['Layer1/foo/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
                        'Layer3/foo/empty']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        if empty_folders:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
            for res in expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
                self.assertTrue(res in res_list, "%r not in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
                self.assertTrue(storage.is_folder(res), "%r is not a folder")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
            for res in not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
                self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            for res in expected + not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
                self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
    def test_export_file_to_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
            source_project      = 'f2f/source',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
            target_project      = 'f2f/target',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
            source_project      = 'f2f/source_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
            target_project      = 'f2f/target_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
    def test_export_zip_to_zip(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            source_project      = 'z2z/source.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            target_project      = 'z2z/target.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
            source_project      = 'z2z/source_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
            target_project      = 'z2z/target_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
    def test_export_file_to_zip(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
            source_project      = 'f2z/source',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
            target_project      = 'f2z/target.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
            source_project      = 'f2z/source_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
            target_project      = 'f2z/target_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
    def test_export_zip_to_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
            source_project      = 'z2f/source.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
            target_project      = 'z2f/target',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
            source_project      = 'z2f/source_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
            target_project      = 'z2f/target_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   286
    def test_export_to_target_with_nonexistent_path(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   287
        # Remove the target root directory to make sure that it
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   288
        # does not exist before the export
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   289
        self.remove_if_exists(os.path.join(TEMP_DIR, 'nep'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   290
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   291
        self._run_test_export_project_to_project(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   292
            source_project      = 'f2z/source',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   293
            source_storage_type = 'file',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   294
            target_project      = 'nep/f2z/x/y/z/target.zip',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   295
            target_storage_type = 'zip',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   296
            empty_folders       = False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   297
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   298
        self._run_test_export_project_to_project(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   299
            source_project      = 'f2z/source',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   300
            source_storage_type = 'file',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   301
            target_project      = 'nep/f2f/x/y/z/target',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   302
            target_storage_type = 'file',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   303
            empty_folders       = False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   304
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
    def _run_test_multi_export(self, export_dir, export_format, config_args,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
                               expected_cpfs=None, expected_dirs=None):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   307
        self.assertFalse(expected_cpfs is not None and expected_dirs is not None,
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
                         "Only one of expected_cpfs or expected_dirs can be specified!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
        self.assertFalse(expected_cpfs is None and expected_dirs is None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
                         "Either expected_cpfs or expected_dirs must be specified!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
        EXPORT_DIR = os.path.join(TEMP_DIR, export_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        self.remove_if_exists(EXPORT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        self.set_modification_reference_time(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
        cmd = '%(cmd)s -p "%(project)s" %(args)s --export-dir "%(export_dir)s" --export-format %(export_format)s' \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
            % {'cmd'            : get_cmd('export'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
               'project'        : TEST_PROJECT_CPF,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
               'args'           : config_args,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
               'export_dir'     : EXPORT_DIR,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
               'export_format'  : export_format}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
        self.assert_not_modified(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
        if expected_cpfs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
            for cpf_name, config_root in expected_cpfs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
                path = os.path.join(EXPORT_DIR, cpf_name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
                self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
                self.assert_zip_entry_exists(path, config_root)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
            for dir_name, config_root in expected_dirs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
                path = os.path.join(EXPORT_DIR, dir_name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
                self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
                self.assert_exists_and_contains_something(os.path.join(path, config_root))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
    def test_export_multiple_cpfs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
            export_dir    = 'multiexport/cpfs',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
                            '--configuration root3.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
                             ('root3.cpf', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
    def test_export_multiple_dirs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
            export_dir    = 'multiexport/dirs',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
            export_format = 'dir',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
                            '--configuration root3.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
            expected_dirs = [('root1/', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
                             ('root3/', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
    def test_export_multiple_dirs_with_added_layers(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
            export_dir    = 'multiexport/dirs_with_added_layers',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
            export_format = 'dir',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
                            '--configuration root3.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
                            '--add new/layer1/root.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
                            '--add new/layer2/root.confml ',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
            expected_dirs = [('root1/', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
                             ('root3/', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        # Check that the added layers have really been added to the exported
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
        # projects
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
        def check(path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
            path = os.path.join(TEMP_DIR, 'multiexport/dirs_with_added_layers', path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
            self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
        check('root1/new/layer1/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
        check('root1/new/layer2/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        check('root3/new/layer1/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
        check('root3/new/layer2/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
        # Check that the configuration root contains the added layers
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
        file_path = os.path.join(TEMP_DIR, 'multiexport/dirs_with_added_layers/root1/root1.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
        data = self.read_data_from_file(file_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
        self.assertTrue('href="Layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        self.assertTrue('href="new/layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
        self.assertTrue('href="new/layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
        file_path = os.path.join(TEMP_DIR, 'multiexport/dirs_with_added_layers/root3/root3.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
        data = self.read_data_from_file(file_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
        self.assertTrue('href="Layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        self.assertTrue('href="Layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
        self.assertTrue('href="Layer3/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
        self.assertTrue('href="new/layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
        self.assertTrue('href="new/layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
    def test_export_multiple_cpfs_with_wildcard(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
            export_dir    = 'multiexport/cpfs_wildcard',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
            config_args   = '--config-wildcard root*.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
                             ('root2.cpf', 'root2.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
                             ('root3.cpf', 'root3.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
                             ('root4.cpf', 'root4.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
                             ('root5.cpf', 'root5.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
    def test_export_multiple_cpfs_with_regex(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
            export_dir    = 'multiexport/cpfs_regex',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
            config_args   = '--config-regex root[14].confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
                             ('root4.cpf', 'root4.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
    
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   408
    def test_export_with_include_content_filter_help(self):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   409
        # test help update
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   410
        cmd = '%s -h' % get_cmd('export')
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   411
        out = self.run_command(cmd)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   412
        lines = out.split(os.linesep)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   413
        self.assertTrue('    --include-content-filter=INCLUDE_CONTENT_FILTER' in lines)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   414
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   415
    def test_export_with_include_content_filter_project_to_cpf(self):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   416
        # test cpf export
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   417
        source = os.path.join(TEMP_DIR, "layers")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   418
        remote = os.path.join(TEMP_DIR, 'layers.cpf')
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   419
        self.remove_if_exists(remote)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   420
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   421
        unzip_file(EXPORT_TEST_PROJECT, source, delete_if_exists=True)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   423
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   424
        cmd = '%s -p "%s" -c "root4.confml" -r "%s" --include-content-filter="%s"' % (get_cmd('export'), TEST_PROJECT_CPF, remote,".*layer1.*")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   425
        out = self.run_command(cmd)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   426
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   427
        # layer1 content 
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   428
        self.assert_zip_entry_exists(remote, "root4.confml")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   429
        self.assert_zip_entry_exists(remote, "Layer1/content/default_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   430
        self.assert_zip_entry_exists(remote, "Layer1/content/seq/def1_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   431
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   432
        # filtered content
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   433
        self.assert_zip_entry_exists_not(remote, "Layer2/content/layer2_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   434
        self.assert_zip_entry_exists_not(remote, "Layer3/content/seq/layer3_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   435
        self.assert_zip_entry_exists_not(remote, "Layer4/content/seq/layer4_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   436
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   437
    def test_export_with_include_content_filter_cpf_to_cpf(self):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   438
        # test cpf export
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   439
        remote = os.path.join(TEMP_DIR, 'layers2.cpf')
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   440
        self.remove_if_exists(remote)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   441
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   442
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   443
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   444
        cmd = '%s -p "%s" -c "root4.confml" -r "%s" --include-content-filter="%s"' % (get_cmd('export'), TEST_PROJECT_CPF, remote,".*layer2.*")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   445
        out = self.run_command(cmd)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   446
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   447
        # layer1 content 
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   448
        self.assert_zip_entry_exists(remote, "root4.confml")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   449
        self.assert_zip_entry_exists(remote, "Layer2/content/layer2_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   450
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   451
        # filtered content
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   452
        self.assert_zip_entry_exists_not(remote, "Layer1/content/default_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   453
        self.assert_zip_entry_exists_not(remote, "Layer3/content/seq/layer3_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   454
        self.assert_zip_entry_exists_not(remote, "Layer4/content/seq/layer4_file.txt")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   455
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   456
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
class TestExportInvalidArgs(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
    def _run_test_invalid_args(self, args, expected_msg):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
        cmd = '%s -p "%s" %s' \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   461
            % (get_cmd('export'), TEST_PROJECT_CPF, args)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   462
        # Note: The following run_command() should really expect the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   463
        #       return code 2, but for some reason when running from the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   464
        #       standalone test set, the return value is 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   465
        out = self.run_command(cmd, expected_return_code = None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
        self.assertTrue(expected_msg in out,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   467
                        "Expected message '%s' not in output.\nOutput:\n%s" % (expected_msg, out))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   468
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
    def test_export_format_without_export_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
            '-c root1.confml --export-format cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
            "error: --export-format can only be used in conjunction with --export-dir")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
    def test_remote_storage_and_export_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
            '-c root1.confml --remote jojo.cpf --export-dir test/',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
            "error: --export-dir and --remote cannot be used at the same time")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
    def test_unknown_export_format(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
            '-c root1.confml --export-dir test/ --export-format foo',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
            "error: Invalid export format 'foo'")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
    def test_export_dir_but_no_configurations(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
            '--export-dir test/',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
            "error: Use of --export-dir requires at least one configuration to be specified")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
if __name__ == '__main__':
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   491
    unittest.main()