usr/src/lib/install_engine/test/engine_test_utils.py
author Ginnie Wray<virginia.wray@oracle.com>
Fri, 29 Jun 2012 00:42:35 -0600
changeset 1737 c20116627c69
parent 1717 10cb4d15a248
permissions -rw-r--r--
7178513 slim_source unit tests can hose /system/volatile
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     1
#!/usr/bin/python2.6
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     2
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     3
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     4
# CDDL HEADER START
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     5
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     6
# The contents of this file are subject to the terms of the
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     7
# Common Development and Distribution License (the "License").
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     8
# You may not use this file except in compliance with the License.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
     9
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    10
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    11
# or http://www.opensolaris.org/os/licensing.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    12
# See the License for the specific language governing permissions
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    13
# and limitations under the License.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    14
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    15
# When distributing Covered Code, include this CDDL HEADER in each
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    16
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    17
# If applicable, add the following below this CDDL HEADER, with the
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    18
# fields enclosed by brackets "[]" replaced with your own identifying
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    19
# information: Portions Copyright [yyyy] [name of copyright owner]
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    20
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    21
# CDDL HEADER END
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    22
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    23
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    24
#
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    25
# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    26
#
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    27
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    28
'''Some convenience functions that can be used by other test suites that use
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    29
   the engine in their testing
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    30
'''
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    31
import logging
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    32
import os
1169
83735ef8ac29 7042081 usr/src/lib/install_utils is not pep8 clean
Mary Ding <mary.ding@oracle.com>
parents: 909
diff changeset
    33
import shutil
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    34
import tempfile
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    35
import solaris_install.engine as engine
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    36
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    37
from solaris_install.logger import InstallLogger
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    38
from solaris_install.data_object import DataObjectBase
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    39
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    40
DEBUG_ENGINE = (os.environ.get("DEBUG_ENGINE", "false").lower() == "true")
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    41
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    42
TMP_DIR = "/tmp"
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    43
TMP_PREFIX = "logging_"
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    44
LOGFILE = "install_log"
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    45
DEFAULT_LOG_PREFIX = TMP_DIR + "/" + TMP_PREFIX
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    46
1202
4b52b212aa41 7037123 Invoking ddu on livecd does not work in snv_161 and onward.
Mary Ding <mary.ding@oracle.com>
parents: 1169
diff changeset
    47
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    48
def get_new_engine_instance(doc_in_tmp=True, default_log=None):
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    49
    '''Returns a new install engine instance.  If an existing instance exists,
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    50
       it will be cleaned up.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    51
    '''
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    52
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    53
    reset_engine()
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    54
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    55
    if not default_log:
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    56
        default_log_dir = tempfile.mkdtemp(dir=TMP_DIR, prefix=TMP_PREFIX)
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    57
        default_log = default_log_dir + "/" + LOGFILE
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    58
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    59
    new_engine = engine.InstallEngine(default_log)
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    60
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    61
    new_engine.debug = DEBUG_ENGINE
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    62
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    63
    if doc_in_tmp:
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    64
        # Run tests with /tmp as directory for DOC snapshots so
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    65
        # they do not have to be run as root
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    66
        tmp_doc_snapshot_path = ("/tmp/engine_test_doc_path_%s") % os.getpid()
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    67
        os.environ[new_engine.TMP_CACHE_ENV] = tmp_doc_snapshot_path
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    68
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    69
    return (new_engine)
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    70
1202
4b52b212aa41 7037123 Invoking ddu on livecd does not work in snv_161 and onward.
Mary Ding <mary.ding@oracle.com>
parents: 1169
diff changeset
    71
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    72
def reset_engine(old_engine=None):
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    73
    ''' Clean up the engine for the tests '''
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    74
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    75
    try:
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    76
        if old_engine is None:
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    77
            old_engine = engine.InstallEngine.get_instance()
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    78
        # Force all content of the DOC to be cleared.
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    79
        old_engine.data_object_cache.clear()
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    80
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    81
        if old_engine._tmp_cache_path is not None:
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    82
            shutil.rmtree(old_engine._tmp_cache_path, ignore_errors=True)
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    83
        old_engine._tmp_cache_path = None
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    84
    except:
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    85
        pass
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    86
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    87
    # Reset the DOC logger to None
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    88
    DataObjectBase.reset_logger()
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    89
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    90
    engine.InstallEngine._instance = None
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
    91
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    92
    # Make sure that the log file assigned to the logger uses the same
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    93
    # tempfile directory prefix. If not, only remove the log file and
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    94
    # not the directory that contains it.
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
    95
    try:
1737
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    96
        if InstallLogger.DEFAULTFILEHANDLER.baseFilename.startswith(
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    97
            DEFAULT_LOG_PREFIX):
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    98
            shutil.rmtree(os.path.dirname(
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
    99
                InstallLogger.DEFAULTFILEHANDLER.baseFilename))
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
   100
        else:
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
   101
            if os.path.isfile(InstallLogger.DEFAULTFILEHANDLER.baseFilename):
c20116627c69 7178513 slim_source unit tests can hose /system/volatile
Ginnie Wray<virginia.wray@oracle.com>
parents: 1717
diff changeset
   102
                os.remove(InstallLogger.DEFAULTFILEHANDLER.baseFilename)
1717
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
   103
    except:
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
   104
        pass
10cb4d15a248 7066254 Problem with install/logging
Ginnie Wray<virginia.wray@oracle.com>
parents: 1202
diff changeset
   105
909
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
   106
    logging.Logger.manager.loggerDict = {}
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
   107
ab25dde8919d 16323 Implement Install Execution Engine
Karen Tung <karen.tung@oracle.com>
parents:
diff changeset
   108
    InstallLogger.DEFAULTFILEHANDLER = None