configurationengine/source/scripts/tests/unittest_export.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
import __init__
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)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        lines = out.split('\r\n')
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)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
        cmd = '%s -p "%s" -c "root4.confml" -r "%s' % (get_cmd('export'), TEST_PROJECT_CPF, remote)
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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        lines = out.split('\r\n')
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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        lines = out.split('\r\n')
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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        lines = out.split('\r\n')
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()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
    def _run_test_export_project_to_project(self,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        source_project, source_storage_type,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        target_project, target_storage_type,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        empty_folders):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        # Set up the source project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        # -------------------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        source_path = os.path.join(TEMP_DIR, source_project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        self.remove_if_exists(source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        if source_storage_type == 'file':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
            unzip_file(EXPORT_TEST_PROJECT, source_path, delete_if_exists=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        elif source_storage_type == 'zip':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            self.create_dir_for_file_path(source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
            shutil.copy2(EXPORT_TEST_PROJECT, source_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
            raise RuntimeError('Invalid storage type %r' % source_storage_type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        # Set up the target project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        # -------------------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        target_path = os.path.join(TEMP_DIR, target_project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        self.remove_if_exists(target_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        if target_storage_type not in ('file', 'zip'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
            raise RuntimeError('Invalid storage type %r' % target_storage_type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        # Run the command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        # ---------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        if empty_folders:   empty_folder_switch = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        else:               empty_folder_switch = '--exclude-folders'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        cmd = '%s -p "%s" -c "root5.confml" -r "%s" %s' % \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
            (get_cmd('export'), source_path, target_path, empty_folder_switch)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        # Check the output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        # ----------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        if target_storage_type == 'file':   storage_class = FileStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        elif target_storage_type == 'zip':  storage_class = ZipStorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        storage = storage_class(target_path, 'r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        res_list = storage.list_resources("/", recurse=True, empty_folders=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
        expected = ['.metadata',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
                    'root5.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
                    'Layer1/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
                    'Layer2/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
                    'Layer3/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
                    'Layer4/root.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
                    'Layer5/root.confml',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        for res in expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
            self.assertTrue(res in res_list, "%r not in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
            self.assertFalse(storage.is_folder(res), "%r is a folder")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        not_expected = ['Layer1/foo/foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
                        'Layer2/foo/layer2_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
                        'Layer3/foo/layer3_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
                        'Layer4/foo/layer4_foo.txt',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
                        'Layer5/foo/layer5_foo.txt',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        for res in not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
            self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        # Check empty folders
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        expected = ['Layer1/doc/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
                    'Layer1/content/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
                    'Layer1/implml/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
                    'Layer3/doc/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
                    'Layer3/content/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
                    'Layer3/implml/empty',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        not_expected = ['Layer1/foo/empty',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
                        'Layer3/foo/empty']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        if empty_folders:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
            for res in expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
                self.assertTrue(res in res_list, "%r not in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
                self.assertTrue(storage.is_folder(res), "%r is not a folder")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
            for res in not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
                self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
            for res in expected + not_expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
                self.assertFalse(res in res_list, "%r in %r" % (res, res_list))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
    def test_export_file_to_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            source_project      = 'f2f/source',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            target_project      = 'f2f/target',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
            source_project      = 'f2f/source_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
            target_project      = 'f2f/target_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
    def test_export_zip_to_zip(self):
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      = 'z2z/source.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
            target_project      = 'z2z/target.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
            source_project      = 'z2z/source_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            target_project      = 'z2z/target_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
    def test_export_file_to_zip(self):
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      = 'f2z/source',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
            target_project      = 'f2z/target.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       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
            source_project      = 'f2z/source_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
            source_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
            target_project      = 'f2z/target_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
            target_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    def test_export_zip_to_file(self):
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      = 'z2f/source.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
            target_project      = 'z2f/target',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
            empty_folders       = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        self._run_test_export_project_to_project(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
            source_project      = 'z2f/source_ef.zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
            source_storage_type = 'zip',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
            target_project      = 'z2f/target_ef',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
            target_storage_type = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
            empty_folders       = True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
    def _run_test_multi_export(self, export_dir, export_format, config_args,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
                               expected_cpfs=None, expected_dirs=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        self.assertFalse(expected_cpfs is None and expected_dirs is None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
                         "Only one of expected_cpfs or expected_dirs can be specified!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        self.assertFalse(expected_cpfs is None and expected_dirs is None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
                         "Either expected_cpfs or expected_dirs must be specified!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
        EXPORT_DIR = os.path.join(TEMP_DIR, export_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        self.remove_if_exists(EXPORT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        self.set_modification_reference_time(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
        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
   290
            % {'cmd'            : get_cmd('export'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
               'project'        : TEST_PROJECT_CPF,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
               'args'           : config_args,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
               'export_dir'     : EXPORT_DIR,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
               'export_format'  : export_format}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
        self.assert_not_modified(TEST_PROJECT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
        if expected_cpfs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
            for cpf_name, config_root in expected_cpfs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
                path = os.path.join(EXPORT_DIR, cpf_name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
                self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
                self.assert_zip_entry_exists(path, config_root)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
            for dir_name, config_root in expected_dirs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
                path = os.path.join(EXPORT_DIR, dir_name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
                self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
                self.assert_exists_and_contains_something(os.path.join(path, config_root))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
    def test_export_multiple_cpfs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
            export_dir    = 'multiexport/cpfs',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
                            '--configuration root3.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
                             ('root3.cpf', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
    def test_export_multiple_dirs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
            export_dir    = 'multiexport/dirs',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
            export_format = 'dir',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
                            '--configuration root3.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
            expected_dirs = [('root1/', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
                             ('root3/', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
    def test_export_multiple_dirs_with_added_layers(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
            export_dir    = 'multiexport/dirs_with_added_layers',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
            export_format = 'dir',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
            config_args   = '--configuration root1.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
                            '--configuration root3.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
                            '--add new/layer1/root.confml '\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
                            '--add new/layer2/root.confml ',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
            expected_dirs = [('root1/', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
                             ('root3/', 'root3.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        # Check that the added layers have really been added to the exported
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        # projects
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
        def check(path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
            path = os.path.join(TEMP_DIR, 'multiexport/dirs_with_added_layers', path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
            self.assert_exists_and_contains_something(path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
        check('root1/new/layer1/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
        check('root1/new/layer2/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
        check('root3/new/layer1/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
        check('root3/new/layer2/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
        # Check that the configuration root contains the added layers
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        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
   349
        data = self.read_data_from_file(file_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
        self.assertTrue('href="Layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        self.assertTrue('href="new/layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
        self.assertTrue('href="new/layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        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
   355
        data = self.read_data_from_file(file_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        self.assertTrue('href="Layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        self.assertTrue('href="Layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
        self.assertTrue('href="Layer3/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
        self.assertTrue('href="new/layer1/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
        self.assertTrue('href="new/layer2/root.confml"' in data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
    def test_export_multiple_cpfs_with_wildcard(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
            export_dir    = 'multiexport/cpfs_wildcard',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
            config_args   = '--config-wildcard root*.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
                             ('root2.cpf', 'root2.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
                             ('root3.cpf', 'root3.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
                             ('root4.cpf', 'root4.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
                             ('root5.cpf', 'root5.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
    def test_export_multiple_cpfs_with_regex(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
        self._run_test_multi_export(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
            export_dir    = 'multiexport/cpfs_regex',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
            export_format = 'cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
            config_args   = '--config-regex root[14].confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
            expected_cpfs = [('root1.cpf', 'root1.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
                             ('root4.cpf', 'root4.confml')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
class TestExportInvalidArgs(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
    def _run_test_invalid_args(self, args, expected_msg):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
        cmd = '%s -p "%s" %s' \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
            % (get_cmd('export'), TEST_PROJECT_CPF, args)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
        # Note: The following run_command() should really expect the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
        #       return code 2, but for some reason when running from the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
        #       standalone test set, the return value is 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        out = self.run_command(cmd, expected_return_code = None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
        self.assertTrue(expected_msg in out,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
                        "Expected message '%s' not in output.\nOutput:\n%s" % (expected_msg, out))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
    def test_export_format_without_export_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
            '-c root1.confml --export-format cpf',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
            "error: --export-format can only be used in conjunction with --export-dir")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
    def test_remote_storage_and_export_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
            '-c root1.confml --remote jojo.cpf --export-dir test/',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
            "error: --export-dir and --remote cannot be used at the same time")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
    def test_unknown_export_format(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
            '-c root1.confml --export-dir test/ --export-format foo',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
            "error: Invalid export format 'foo'")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
    def test_export_dir_but_no_configurations(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
        self._run_test_invalid_args(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
            '--export-dir test/',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
            "error: Use of --export-dir requires at least one configuration to be specified")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   415
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
      unittest.main()