configurationengine/source/scripts/tests/export_standalone/export_standalone.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
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
import sys, os, shutil, imp
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
from optparse import OptionParser
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
ROOT_PATH = os.path.abspath(os.path.dirname(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
SOURCE_ROOT = os.path.normpath(os.path.join(ROOT_PATH, '../../..'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
PLUGIN_SOURCE_ROOT = os.path.normpath(os.path.join(SOURCE_ROOT, 'plugins'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
assert os.path.split(SOURCE_ROOT)[1] == 'source'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
assert os.path.split(PLUGIN_SOURCE_ROOT)[1] == 'plugins'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
sys.path.append(os.path.normpath(os.path.join(SOURCE_ROOT, 'testautomation')))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
import testautomation
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
from testautomation.copy_dir import copy_dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
def build_egg(dir, target_dir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
    orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
    os.chdir(dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        os.system('python setup.py bdist_egg --dist-dir "%s"' % target_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
    finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
        os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
def read_export_function_from_file(file_path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
    if not os.path.exists(file_path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
    m = imp.load_source(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        file_path.replace('\\', '__')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
                 .replace('/', '__')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
                 .replace(':', '_')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
                 .replace('.', '_')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
                 .replace(' ', '_'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        file_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
    try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        return m.export_standalone
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    except AttributeError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
def main(argv):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
    # Parse args
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
    parser = OptionParser()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
    parser.add_option("--target-dir",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
                      help="The directory where the test are to be exported.",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
                      metavar="COMMAND")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
    parser.add_option("--plugin-subpackage",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
                      help="The plug-in package for exporting plug-in integration tests.",\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
                      default=None,\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
                      metavar="SUBPACKAGE")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
    (options, args) = parser.parse_args()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
    if options.target_dir is None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        parser.error("Target directory must be given")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
    if options.plugin_subpackage is None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        parser.error("Plug-in sub-package name must be given")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
    TARGET_PATH = options.target_dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
    PLUGIN_PACKAGES = ['common']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
    if options.plugin_subpackage.lower() not in ('', 'common'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
       PLUGIN_PACKAGES.append(options.plugin_subpackage)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
    print "(Re)creating dir '%s'..." % TARGET_PATH
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
    if os.path.exists(TARGET_PATH):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        shutil.rmtree(TARGET_PATH)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
    os.makedirs(TARGET_PATH)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    print "Copying script test files..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
    copy_dir(source_dir             = os.path.join(ROOT_PATH, '..'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
             target_dir             = os.path.join(TARGET_PATH, 'tests'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
             dir_ignore_functions   = [lambda d: d in ('.svn', 'temp', 'export_standalone')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
             file_ignore_functions  = [lambda f: f == 'cone.log' or f.endswith('.pyc')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
    print "Copying plug-in integration test files..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
    for name in PLUGIN_PACKAGES:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        print "  Processing plug-in package '%s'..." % name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        package_path = os.path.join(PLUGIN_SOURCE_ROOT, name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        if not os.path.isdir(package_path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
            print "    '%s' does not exist or is not a directory!" % package_path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
            return 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        tests_path = os.path.join(package_path, 'integration-test')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        if not os.path.isdir(tests_path):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
            print "    No 'integration-test' directory, skipping"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
            continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        print "    Copying test files..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        target_path = os.path.join(TARGET_PATH, 'plugin-tests', name + '_tests')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        copy_dir(source_dir             = tests_path,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
                 target_dir             = target_path,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
                 dir_ignore_functions   = [lambda d: d in ('.svn', 'temp')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
                 file_ignore_functions  = [lambda f: f in ('cone.log', 'export_standalone.py') or f.endswith('.pyc')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        print "    Overwriting __init__.py..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
        f = open(os.path.join(target_path, '__init__.py'), 'wb')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        f.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        print "    Exporting extra data..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        func = read_export_function_from_file(os.path.join(tests_path, 'export_standalone.py'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        if func:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
            print "      Executing export function..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
            func(target_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
    print "Copying overlay files..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
    copy_dir(source_dir = os.path.join(ROOT_PATH, "overlay"),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
             target_dir = TARGET_PATH,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
             dir_ignore_functions   = [lambda d: d  == '.svn'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    print "Building eggs..."
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
    eggs_dir = os.path.join(TARGET_PATH, 'eggs')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
    build_egg(os.path.join(SOURCE_ROOT), eggs_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
    build_egg(os.path.join(SOURCE_ROOT, 'testautomation'), eggs_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
    return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
if __name__ == "__main__":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
    sys.exit(main(sys.argv))