configurationengine/source/plugins/common/ConeContentPlugin/contentplugin/tests/unittest_content_copy_empty_dirs.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     1
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     3
# All rights reserved.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     4
# This component and the accompanying materials are made available
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     6
# which accompanies this distribution, and is available
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     8
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     9
# Initial Contributors:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    11
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    12
# Contributors:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    13
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    14
# Description: 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    15
#
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    16
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    17
import os, shutil
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    18
import unittest
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    19
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    20
from cone.public import plugin, api
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    21
from testautomation.base_testcase import BaseTestCase
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    22
from testautomation.unzip_file import unzip_file
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    23
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    24
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    25
TESTDATA_DIR  = os.path.join(ROOT_PATH, 'testdata')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    26
TEMP_DIR = os.path.join(ROOT_PATH, 'temp/emptydircopy')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    27
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    28
class TestContentCopyEmptyDirs(BaseTestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    29
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    30
    def _get_project_and_config(self, workdir, storage_type):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    31
        # Create the working directory for the test
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    32
        self.remove_if_exists(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    33
        os.makedirs(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    34
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    35
        # Unpack or copy the project into the working directory
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    36
        project_source_zip = os.path.join(TESTDATA_DIR, 'emptydircopy/project.zip')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    37
        if storage_type == 'fs':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    38
            project_location = os.path.join(workdir, 'project')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    39
            unzip_file(project_source_zip, project_location)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    40
        elif storage_type == 'zs':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    41
            project_location = os.path.join(workdir, 'project.zip')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    42
            shutil.copy(project_source_zip, project_location)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    43
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    44
            raise ValueError('Invalid storage type %r' % storage_type)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    45
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    46
        # Copy the external content directory
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    47
        unzip_file(os.path.join(TESTDATA_DIR, 'emptydircopy/external_content.zip'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    48
                   os.path.join(workdir, 'external_content'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    49
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    50
        project = api.Project(api.Storage.open(project_location, 'r'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    51
        config = project.get_configuration('root.confml')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    52
        return project, config
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    53
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    54
    def test_get_copy_list(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    55
        workdir = os.path.join(TEMP_DIR, 'get_copy_list')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    56
        proj, conf = self._get_project_and_config(workdir, 'fs')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    57
        proj.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    58
        impls = plugin.get_impl_set(conf)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    59
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    60
        orig_dir = os.getcwd()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    61
        os.chdir(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    62
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    63
            self.assertEquals(1, len(impls))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    64
            impl = iter(impls).next()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    65
            self.assertEquals(8, len(impl.impls))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    66
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    67
            # Normal inputs
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    68
            # -------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    69
            def check(impl_index, expected):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    70
                self.assertEquals(sorted(impl.impls[impl_index].get_full_copy_list()),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    71
                                  sorted(expected))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    72
            check(0, [
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    73
                ('layer2/content/foobar/layer2_emptydir',       'foobar_out/layer2_emptydir', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    74
                ('layer1/content/foobar/layer1_emptydir',       'foobar_out/layer1_emptydir', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    75
                ('layer1/content/foobar/layer1_emptydir2/foo',  'foobar_out/layer1_emptydir2/foo', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    76
                ('layer2/content/foobar/layer2.txt',            'foobar_out/layer2.txt', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    77
                ('layer1/content/foobar/layer1.txt',            'foobar_out/layer1.txt', False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    78
            ])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    79
            check(1, [
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    80
                #('layer2/content/foobar_filtered/layer2_filtered_emptydir', 'foobar_out/layer2_filtered_emptydir', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    81
                #('layer1/content/foobar_filtered/layer1_filtered_emptydir', 'foobar_out/layer1_filtered_emptydir', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    82
                ('layer1/content/foobar_filtered/bar.txt', 'foobar_out_filtered/bar.txt', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    83
            ])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    84
            check(2, [('layer1/content/empty', 'empty_out', False)])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    85
            check(3, [])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    86
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    87
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    88
            # External inputs
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    89
            # ---------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    90
            def check(impl_index, expected):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    91
                expected = [(os.path.abspath(src).replace('\\', '/'), tgt, ext) for src, tgt, ext in expected]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    92
                self.assertEquals(sorted(impl.impls[impl_index].get_full_copy_list()),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    93
                                  sorted(expected))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    94
            check(4, [
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    95
                ('external_content/foobar/emptydir',       'ext_out/foobar_out/emptydir', True),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    96
                ('external_content/foobar/emptydir2/foo',  'ext_out/foobar_out/emptydir2/foo', True),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    97
                ('external_content/foobar/x.txt',          'ext_out/foobar_out/x.txt', True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    98
            ])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    99
            check(5, [
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   100
                #('external_content/foobar_filtered/layer1_filtered_emptydir', 'ext_out/foobar_out/layer1_filtered_emptydir', False),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   101
                ('external_content/foobar_filtered/bar.txt', 'ext_out/foobar_out_filtered/bar.txt', True),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   102
            ])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   103
            check(6, [('external_content/empty', 'ext_out/empty_out', True)])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   104
            check(7, [])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   105
        finally:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   106
            os.chdir(orig_dir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   107
            self.remove_if_exists(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   108
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   109
    def test_copy_empty_dirs_filestorage(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   110
        workdir = os.path.join(TEMP_DIR, 'filestorage')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   111
        proj, conf = self._get_project_and_config(workdir, 'fs')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   112
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   113
        orig_dir = os.getcwd()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   114
        os.chdir(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   115
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   116
            self._run_test_copy_empty_dirs(workdir, conf)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   117
        finally:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   118
            os.chdir(orig_dir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   119
            proj.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   120
            self.remove_if_exists(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   121
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   122
    def test_copy_empty_dirs_zipstorage(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   123
        workdir = os.path.join(TEMP_DIR, 'zipstorage')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   124
        proj, conf = self._get_project_and_config(workdir, 'zs')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   125
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   126
        orig_dir = os.getcwd()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   127
        os.chdir(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   128
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   129
            self._run_test_copy_empty_dirs(workdir, conf)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   130
        finally:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   131
            os.chdir(orig_dir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   132
            proj.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   133
            self.remove_if_exists(workdir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   134
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   135
    def _run_test_copy_empty_dirs(self, workdir, config):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   136
        output_dir = os.path.join(workdir, 'output')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   137
        context = plugin.GenerationContext(configuration=config, output=output_dir)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   138
        impl_set = plugin.get_impl_set(config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   139
        impl_set.generate(context)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   140
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   141
        created_dirs = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   142
        created_files = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   143
        def strip(path):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   144
            return path[len(output_dir):].replace('\\', '/').strip('/')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   145
        for root, dirs, files in os.walk(output_dir):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   146
            for d in dirs:  created_dirs.append(strip(os.path.join(root, d)))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   147
            for f in files: created_files.append(strip(os.path.join(root, f)))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   148
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   149
        self.assertEquals(sorted(created_dirs), sorted(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   150
            ['empty_out',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   151
             'ext_out',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   152
             'ext_out/empty_out',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   153
             'ext_out/foobar_out',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   154
             'ext_out/foobar_out/emptydir',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   155
             'ext_out/foobar_out/emptydir2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   156
             'ext_out/foobar_out/emptydir2/foo',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   157
             'ext_out/foobar_out_filtered',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   158
             'foobar_out',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   159
             'foobar_out/layer1_emptydir',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   160
             'foobar_out/layer1_emptydir2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   161
             'foobar_out/layer1_emptydir2/foo',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   162
             'foobar_out/layer2_emptydir',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   163
             'foobar_out_filtered'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   164
             #'foobar_out_filtered/layer1_emptydir',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   165
             #'foobar_out_filtered/layer2_emptydir',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   166
             ]))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   167
        self.assertEquals(sorted(created_files), sorted(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   168
            ['ext_out/foobar_out/x.txt',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   169
             'ext_out/foobar_out_filtered/bar.txt',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   170
             'foobar_out/layer1.txt',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   171
             'foobar_out/layer2.txt',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   172
             'foobar_out_filtered/bar.txt']))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   173
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   174
if __name__ == '__main__':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   175
    unittest.main()