buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
# -*- encoding: latin-1 -*-
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
#============================================================================ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
#Name        : aste.py 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
#Part of     : Helium 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
#All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
#This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
#under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
#which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
#Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
#Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
#Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
#Description:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
#===============================================================================
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
"""ASTE test drop generation."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    24
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
#W0142 => * and ** were used
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
#R* removed during refactoring
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
from optparse import OptionParser
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
from xml.etree import ElementTree as et
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
import logging
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
import os
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import re
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
import tempfile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
import zipfile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
import pkg_resources
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    36
from path import path # pylint: disable=F0401
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
import amara
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
import ntpath as atspath
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    39
import jinja2 # pylint: disable=F0401
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
_logger = logging.getLogger('ats3')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
# Shortcuts
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
E = et.Element
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
SE = et.SubElement
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
class Configuration(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    ASTE drop generation configuration.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
    def __init__(self, opts):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
        Initialize from optparse configuration options.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
        self._opts = opts
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
        # Customize some attributes from how optparse leaves them.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
        self.build_drive = path(self._opts.build_drive)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
        self.file_store = path(self._opts.file_store)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        self.flash_images = self.split_paths(self._opts.flash_images)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    def split_paths(self, arg, delim=","):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
        Split the string by delim, removing extra whitespace.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
        return [path(part.strip()) 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
                for part in arg.split(delim) if part.strip()]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    def __getattr__(self, attr):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
        return getattr(self._opts, attr)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
    def __str__(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        dump = "Configuration:\n"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
        seen = set()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
        for key, value in vars(self).items():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
            if not key.startswith("_"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
                dump += "\t%s = %s\n" % (key, value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
                seen.add(key)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        for key, value in vars(self._opts).items():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
            if key not in seen:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
                dump += "\t%s = %s\n" % (key, value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
                seen.add(key)                
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
        return dump
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
class AsteTestPlan(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
    Tells ASTE server what to test and how.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
    The ASTE test plan from which the test.xml file can be written. The test
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
    plan requires TestAsset(s) to perform the tests
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
    EMAIL_SUBJECT = (u"ATS3 report for §RUN_NAME§ §RUN_START_DATE§ "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
                     u"§RUN_START_TIME§")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
    REPORT_PATH = u"§RUN_NAME§\§RUN_START_DATE§_§RUN_START_TIME§"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    def __init__(self, config):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
        self.diamonds_build_url = config.diamonds_build_url
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
        self.testrun_name = config.testrun_name
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
        self.harness = "ASTE"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
        self.device_type = config.device_type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
        self.test_type = config.test_type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        self.device_hwid = config.device_hwid
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
        self.plan_name = config.plan_name
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        self.report_email = config.report_email
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
        self.file_store = config.file_store
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
        self.test_timeout = config.test_timeout
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
        self.testasset_location = config.testasset_location
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        self.testasset_caseids = config.testasset_caseids
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
        self.software_version = config.software_version
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        self.device_language = config.device_language
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        self.software_release = config.software_release
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
        self.sets = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        self.temp_directory = path(tempfile.mkdtemp())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
    def insert_set(self, image_files=None, test_timeout=None, ):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
        Insert a test set into the test plan.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
        """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        if image_files is None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
            image_files = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
        if test_timeout is None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
            test_timeout = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        test_harness = self.harness
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
        setd = dict(name="set%d" % len(self.sets), image_files=image_files)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
        setd = dict(setd, test_timeout=test_timeout, test_harness=test_harness)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
        self.sets.append(setd)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
    @property
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
    def post_actions(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
        """ATS3 and ASTE post actions."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
        actions = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
        report_path = self.file_store.joinpath(self.REPORT_PATH)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
        email_action = ("SendEmailAction", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
                        (("subject", self.EMAIL_SUBJECT),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
                         ("type", "ATS3_REPORT"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
                         ("send-files", "true"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
                         ("to", self.report_email)))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
        ats3_report = ("FileStoreAction", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
                       (("to-folder", report_path.joinpath("ATS3_REPORT")),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
                        ("report-type", "ATS_REPORT"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
                        ("date-format", "yyyyMMdd"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
                        ("time-format", "HHmmss")))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
        aste_report = ("FileStoreAction", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
                       (("to-folder", report_path.joinpath("ASTE_REPORT")),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
                        ("report-type", "ASTE_REPORT"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
                        ("run-log", "true"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
                        ("date-format", "yyyyMMdd"),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
                        ("time-format", "HHmmss")))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
        diamonds_action = ("DiamondsAction", ())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
        if self.report_email:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
            actions.append(email_action)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
        if self.file_store:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
            actions.append(ats3_report)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
            actions.append(aste_report)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        if self.diamonds_build_url:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
            actions.append(diamonds_action)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
        return actions               
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
    def __getitem__(self, key):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
        return self.__dict__[key]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
class AsteTestDropGenerator(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
    Generate test drop zip file for ATS3.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
    Generates drop zip files file from a TestPlan instance. The main
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
    responsibility of this class is to serialize the plan into a valid XML
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
    file and build a zip file for the drop.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
    Creates one <set> for ASTE tests.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
    ASTE harness, normal operation
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
    ------------------------------
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
    - create logging dir for aste             makedir (to C:\logs\TestFramework)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
    - execute asset from the testasset.zip    execute-asset
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
    - fetch logs                              fetch-log
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
    ASTE_LOG_DIR = r"c:\logs\testframework"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
    def __init__(self):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
        self.drop_path_root = path("ATS3Drop")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
        self.drop_path = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
        self.defaults = {}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
    def generate(self, test_plan, output_file):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
        """Generate a test drop file."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
        xml = self.generate_xml(test_plan)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
        return self.generate_drop(test_plan, xml, output_file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
    def generate_drop(self, test_plan, xml, output_file):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
        """Generate test drop zip file."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
        zfile = zipfile.ZipFile(output_file, "w", zipfile.ZIP_DEFLATED)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
        try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
            for drop_file, src_file in self.drop_files(test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
                _logger.info("   + Adding: %s" % src_file.strip())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
                zfile.write(src_file.strip(), drop_file.encode('utf-8'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
            doc = amara.parse(et.tostring(xml.getroot()))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
            _logger.debug("XML output: %s" % doc.xml(indent=u"yes"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
            zfile.writestr("test.xml", doc.xml(indent="yes"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
        finally:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
            zfile.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
        return zfile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
    def generate_xml(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
        """Generate test drop XML."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
        self.defaults = {"enabled": "true", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
                         "passrate": "100", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
                         "significant": "false",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
                         "harness": "%s" % test_plan["harness"]} 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
        root = E("test")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
        root.append(et.XML("<name>%(testrun_name)s</name>" % test_plan))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
        if test_plan["diamonds_build_url"]:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
            root.append(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
                et.XML("<buildid>%(diamonds_build_url)s</buildid>" % test_plan))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
        self.generate_target(test_plan, root)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
        root.append(self.generate_plan(test_plan))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
        for post_action in self.generate_post_actions(test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
            root.append(post_action)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
        root.append(self.generate_files(test_plan))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
        etree = et.ElementTree(root)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
        return etree
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
    def generate_target(self, test_plan, root):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
        """Append target(s) into the XML"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
        target = E("target")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
        device = SE(target, "device", rank="none", alias="DEFAULT")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
        SE(device, "property", name="harness", value=test_plan["harness"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
        SE(device, "property", name="hardware", value=test_plan["device_type"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
        SE(device, "setting", name="softwareVersion", value=test_plan["software_version"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
        SE(device, "setting", name="softwareRelease", value=test_plan["software_release"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
        SE(device, "setting", name="language", value=test_plan["device_language"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
        if test_plan["device_hwid"] != "":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
            SE(device, "property", name="HWID", value=test_plan["device_hwid"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
        root.append(target)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
                    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
    def generate_plan(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
        """Generate the test <plan> with multiple <set>s."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
        plan = E("plan", name="Plan %s %s" % (test_plan["test_type"], test_plan["device_type"]), **self.defaults)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
        session = SE(plan, "session", name="session", **self.defaults)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
        # One set for each component.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
        for setd in test_plan.sets:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
            self.drop_path = self.drop_path_root.joinpath(setd["name"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
            elem = SE(session, "set", name=setd["name"], **self.defaults)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
            SE(SE(elem, "target"), "device", rank="master", alias="DEFAULT")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
            case = SE(elem, "case", name="%s case" % setd["name"], **self.defaults)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
            self.generate_steps(setd, case, test_plan)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
        return plan
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
    def generate_steps(self, setd, case, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
        """Generate the test plan <step>s."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
        # Flash images.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
        images = self.drop_path_root.joinpath("images")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
        for image_file in setd["image_files"]:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
            flash = SE(case, "flash", images=images.joinpath(image_file.name))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
            flash.set("target-alias", "DEFAULT")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
        # If tracing enabled:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
        self.generate_execute_asset_steps(case, test_plan)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
    def generate_execute_asset_steps(self, case, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
        """Executes steps for TestAsset"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
        time_out = test_plan["test_timeout"]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
        step = SE(case, "step", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
                      name="Execute asset zip step" , **self.defaults)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
        SE(step, "command").text = "execute-asset"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
        params = SE(step, "params")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
        SE(params, "param", repeat="1")        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
        elem = SE(params, "param")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
        elem.set("asset-source", path(r"ATS3Drop" + os.sep + "TestAssets" + os.sep + "TestAsset.zip"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
        elem = SE(params, "param")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
        elem.set("testcase-ids", test_plan["testasset_caseids"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
        SE(params, "param", timeout=time_out)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
    def generate_post_actions(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
        """Generate post actions."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
        actions = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
        for action_type, parameters in test_plan.post_actions:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
            action = E("postAction")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
            SE(action, "type").text = action_type
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
            params = SE(action, "params")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
            for name, value in parameters:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
                SE(params, "param", name=name, value=value)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
            actions.append(action)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
        return actions
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
    def generate_testasset_zip(self, test_plan, output_file=None):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
        """Generate TestAsset.zip for the ASTE server"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
        filename = test_plan["temp_directory"].joinpath(r"TestAsset.zip")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
        if output_file != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
            filename = output_file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
        testasset_location = path(test_plan["testasset_location"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
        if re.search(r"[.]zip", testasset_location):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
            return testasset_location
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
            zfile = zipfile.ZipFile(filename, "w", zipfile.ZIP_DEFLATED)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
            try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
                for file_ in list(testasset_location.walkfiles()):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
                    file_mod = file_.replace(testasset_location, "")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
                    zfile.write(file_, file_mod.encode('utf-8'))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
            finally:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
                zfile.close()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
            return filename
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
    def drop_files(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
        """Yield a list of drop files."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
        drop_set = set()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
        drop_files = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
        zip_file = path(self.generate_testasset_zip(test_plan)) ##check here, I changed the variable name from "zipfile" to "zip_file"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
        for setd in test_plan.sets:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
            drop_path = self.drop_path_root.joinpath(setd["name"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
            drop_files = ((drop_path.parent, "images", setd["image_files"]),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
                          (drop_path.parent, "TestAssets", [zip_file]))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
            for drop_dir, sub_dir, files in drop_files:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
                for file_path in files:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
                    if file_path != None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
                        drop_file = drop_dir.joinpath(sub_dir, file_path.name)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
                        drop_file = drop_file.normpath()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
                        if drop_file not in drop_set:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
                            drop_set.add(drop_file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
                            yield (drop_file, file_path.normpath())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   332
           
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
    def generate_files(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
        """Generate the <files> section."""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
        files_elem = E("files")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
        for drop_file, _ in self.drop_files(test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
            SE(files_elem, "file").text = drop_file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
        return files_elem
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
class AsteComponentParser(object):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
    Add information to the test_plan
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
    def __init__(self, config):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
        self.flash_images = [path(p) for p in config.flash_images]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
        self.build_drive = config.build_drive
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
        self.test_timeout = config.test_timeout
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
    def insert_test_set(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
        """Parse flash images and creates inserts into 'sets'"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
        test_plan.insert_set(image_files=self.flash_images,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
                             test_timeout=list(self.test_timeout))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
class AsteTemplateTestDropGenerator(AsteTestDropGenerator):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
    """ ASTE template Drop generator tester"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
    def getlogdir(self, setd):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
        """ get the logger directory"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
        setd = setd  #just to fool pylint
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
        return self.ASTE_LOG_DIR
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
    def aslfiles(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
        """get the list of .asl files"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
        files = []
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   367
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
        testasset_location = path(test_plan["testasset_location"])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
        for file_ in list(testasset_location.walkfiles()):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
            if file_.endswith('.asl'):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
                files.append(file_.replace(testasset_location + os.sep, ""))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
        return files
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
    def generate_xml(self, test_plan):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
        """ generate an XML file"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
        loader = jinja2.ChoiceLoader([jinja2.PackageLoader(__name__, 'templates')])
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
        env = jinja2.Environment(loader=loader)
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   378
        template = env.from_string(pkg_resources.resource_string(__name__, 'aste_template.xml'))# pylint: disable=E1101
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
        xmltext = template.render(test_plan=test_plan, os=os, atspath=atspath, atsself=self).encode('ISO-8859-1')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
        return et.ElementTree(et.XML(xmltext))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
def create_drop(config):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
    """Create a test drop."""    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
    _logger.debug("initialize test plan")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   387
    test_plan = AsteTestPlan(config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   388
    parser = AsteComponentParser(config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   389
    parser.insert_test_set(test_plan) ######check here if something goes wrong, removed ", path(tsrc)"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   390
    if config.ats4_enabled.lower() == 'true':
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   391
        generator = AsteTemplateTestDropGenerator()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   392
    else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   393
        generator = AsteTestDropGenerator()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   394
    _logger.info("generating drop file: %s" % config.drop_file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   395
    generator.generate(test_plan, output_file=config.drop_file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   396
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   397
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   398
def main():
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   399
    """Main entry point."""    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   400
    cli = OptionParser(usage="%prog [options] TSRC1 [TSRC2 [TSRC3 ...]]")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   401
    cli.add_option("--build-drive", help="Build area root drive")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   402
    cli.add_option("--device-type", help="Device type (e.g. 'PRODUCT')", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   403
                   default="unknown")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   404
    cli.add_option("--device-hwid", help="Device hwid", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   405
                   default="")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   406
    cli.add_option("--diamonds-build-url", help="Diamonds build url")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   407
    cli.add_option("--drop-file", help="Name for the final drop zip file",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   408
                   default="ATS3Drop.zip")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   409
    cli.add_option("--file-store", help="Destination path for reports.",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   410
                   default="")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   411
    cli.add_option("--flash-images", help="Paths to the flash image files",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   412
                   default="")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   413
    cli.add_option("--minimum-flash-images", help="Minimum amount of flash images",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   414
                   default=2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   415
    cli.add_option("--report-email", help="Email notification receivers", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   416
                   default="")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   417
    cli.add_option("--plan-name", help="Name of the test plan", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   418
                   default="plan")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   419
    cli.add_option("--test-timeout", help="Test execution timeout value (default: %default)",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   420
                   default="60")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   421
    cli.add_option("--testrun-name", help="Name of the test run", 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   422
                   default="run")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   423
    cli.add_option("--testasset-location", help="Path to the ASTE test assets location",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   424
                   default="")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   425
    cli.add_option("--testasset-caseids", help="Test case IDs to run",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   426
                   default="")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   427
    cli.add_option("--software-version", help="Sofwtare version",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   428
                   default="")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   429
    cli.add_option("--test-type", help="Sofwtare version",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   430
                   default="smoke")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   431
    cli.add_option("--device-language", help="language name e.g. English",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   432
                   default="English")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   433
    cli.add_option("--software-release", help="Software release or product name e.g. PPD 52.50",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   434
                   default="")     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   435
    cli.add_option("--ats4-enabled", help="ATS4 enabled", default="False")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   436
    cli.add_option("--verbose", help="Increase output verbosity",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   437
                   action="store_true", default=False)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   438
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   439
    opts, _ = cli.parse_args()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   440
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   441
    if not opts.flash_images:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   442
        cli.error("no flash image files given")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   443
    if len(opts.flash_images.split(",")) < int(opts.minimum_flash_images):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   444
        cli.error("Not enough flash files: %i defined, %i needed" % (len(opts.flash_images.split(",")), int(opts.minimum_flash_images) ))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   445
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   446
    if opts.verbose:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   447
        _logger.setLevel(logging.DEBUG)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   448
        logging.basicConfig(level=logging.DEBUG)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   449
    config = Configuration(opts)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   450
    create_drop(config)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   451
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   452
if __name__ == "__main__":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   453
    main()