diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/ats3-pysrc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/api/python/ats3-pysrc.html Fri Sep 11 11:54:49 2009 +0100 @@ -0,0 +1,632 @@ + + + + + ats3 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package ats3 + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Package ats3

+
+  1  # -*- encoding: latin-1 -*- 
+  2   
+  3  #============================================================================  
+  4  #Name        : __init__.py  
+  5  #Part of     : Helium  
+  6   
+  7  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+  8  #All rights reserved. 
+  9  #This component and the accompanying materials are made available 
+ 10  #under the terms of the License "Eclipse Public License v1.0" 
+ 11  #which accompanies this distribution, and is available 
+ 12  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
+ 13  # 
+ 14  #Initial Contributors: 
+ 15  #Nokia Corporation - initial contribution. 
+ 16  # 
+ 17  #Contributors: 
+ 18  # 
+ 19  #Description: 
+ 20  #=============================================================================== 
+ 21   
+ 22  """ATS3 test drop generation.""" 
+ 23   
+ 24  #w0142 => * and ** were used 
+ 25  #R*    => will be fixed while refactoring 
+ 26  #F0401 => pylint didn't find "path" module 
+ 27  #C0302 => Too many lines 
+ 28   
+ 29   
+ 30  from optparse import OptionParser 
+ 31  from xml.etree import ElementTree as et 
+ 32  from xml.sax.saxutils import quoteattr 
+ 33  import ats3.testconfigurator as acp 
+ 34  import ats3.dropgenerator as adg 
+ 35  import logging 
+ 36  import os 
+ 37  import re 
+ 38  import zipfile 
+ 39   
+ 40  import ats3.parsers as parser 
+ 41  from path import path 
+ 42   
+ 43  _logger = logging.getLogger('ats3') 
+ 44   
+
45 -class Configuration(object): +
46 """ + 47 ATS3 drop generation configuration. + 48 """ + 49 +
50 - def __init__(self, opts, tsrc_paths): +
51 """ + 52 Initialize from optparse configuration options. + 53 """ + 54 self._opts = opts + 55 CParser = parser.CppParser() + 56 temp_dict = {} + 57 mmp_parser = parser.MmpFileParser() + 58 + 59 # Customize some attributes from how optparse leaves them. + 60 self.build_drive = path(self._opts.build_drive) + 61 self.file_store = path(self._opts.file_store) + 62 self.flash_images = split_paths(self._opts.flash_images) + 63 self.sis_files = split_paths(self._opts.sis_files) + 64 self.config_file = self._opts.config + 65 self.tsrc_paths_dict = {} + 66 main_comps = [] + 67 + 68 for tsrc in tsrc_paths: + 69 temp_dict = CParser.get_cpp_output(path(tsrc), "d") + 70 for t_key, t_value in temp_dict.items(): + 71 self.tsrc_paths_dict[t_key] = t_value + 72 + 73 #preparing a list of main components + 74 for main_component in self.tsrc_paths_dict.keys(): + 75 main_comps.append(main_component) + 76 + 77 self.tsrc_paths = main_comps +
78 +
79 - def __getattr__(self, attr): +
80 return getattr(self._opts, attr) +
81 +
82 - def __str__(self): +
83 dump = "Configuration:\n" + 84 seen = set() + 85 for key, value in vars(self).items(): + 86 if not key.startswith("_"): + 87 dump += "\t%s = %s\n" % (key, value) + 88 seen.add(key) + 89 for key, value in vars(self._opts).items(): + 90 if key not in seen: + 91 dump += "\t%s = %s\n" % (key, value) + 92 seen.add(key) + 93 return dump +
94 + 95 +
96 -class Ats3TestPlan(object): +
97 """ + 98 Tells ATS3 server what to test and how. + 99 +100 The ATS3 test plan from which the test.xml file can be written. The test +101 plan captures all the data related to a test run: flashing, installation +102 of data files and configuration files, test cases, and the notifications. +103 +104 """ +105 +106 EMAIL_SUBJECT = (u"ATS3 report for §RUN_NAME§ §RUN_START_DATE§ " +107 u"§RUN_START_TIME§") +108 REPORT_PATH = u"§RUN_NAME§" + os.sep + u"§RUN_START_DATE§_§RUN_START_TIME§" +109 +
110 - def __init__(self, config): +
111 self.diamonds_build_url = config.diamonds_build_url +112 self.testrun_name = config.testrun_name +113 self.harness = config.harness +114 self.device_type = config.device_type +115 self.device_hwid = config.device_hwid +116 self.plan_name = config.plan_name +117 self.report_email = config.report_email +118 self.file_store = config.file_store +119 self.test_timeout = config.test_timeout +120 self.eunitexerunner_flags = config.eunitexerunner_flags +121 self.sets = [] +122 self.src_dst = [] +123 self.pmd_files = [] +124 self.trace_activation_files = [] +125 self.trace_enabled = self.to_bool(config.trace_enabled) +126 self.ctc_enabled = self.to_bool(config.ctc_enabled) +127 self.component_path = "" +128 self.custom_dir = None +
129 +
130 - def to_bool(self, param): +
131 param = str(param).lower() +132 if "true" == param or "t" == param or "1" == param: +133 return "True" +134 else: +135 return "False" +
136 +
137 - def insert_set(self, data_files=None, config_files=None, +138 engine_ini_file=None, image_files=None, sis_files=None, +139 testmodule_files=None, test_timeout=None,eunitexerunner_flags=None , test_harness=None, +140 src_dst=None, pmd_files=None, trace_activation_files=None, custom_dir=None, component_path=None): +
141 """ +142 Insert a test set into the test plan. +143 """ +144 +145 if not custom_dir is None: +146 self.custom_dir = custom_dir +147 if data_files is None: +148 data_files = [] +149 if config_files is None: +150 config_files = [] +151 if image_files is None: +152 image_files = [] +153 if sis_files is None: +154 sis_files = [] +155 if testmodule_files is None: +156 testmodule_files = [] +157 if test_timeout is None: +158 test_timeout = [] +159 if eunitexerunner_flags is None: +160 eunitexeruner_flags = [] +161 if test_harness is None: +162 test_harness = self.harness +163 if src_dst is None: +164 src_dst = [] +165 if pmd_files is None: +166 pmd_files = [] +167 if trace_activation_files is None: +168 trace_activation_files = [] +169 if component_path is None: +170 component_path = self.component_path +171 +172 setd = dict(name="set%d" % len(self.sets), +173 image_files=image_files, engine_ini_file=engine_ini_file, ctc_enabled=self.ctc_enabled, component_path=component_path) +174 +175 setd = dict(setd, custom_dir=custom_dir) +176 if sis_files: +177 setd = dict(setd, sis_files=sis_files, test_timeout=test_timeout, eunitexerunner_flags=eunitexerunner_flags, test_harness=test_harness, ) +178 else: +179 setd = dict(setd, data_files=data_files, config_files=config_files, +180 testmodule_files=testmodule_files, test_timeout=test_timeout, eunitexerunner_flags=eunitexerunner_flags, test_harness=test_harness, +181 src_dst=src_dst) +182 if self.trace_enabled != "": +183 if self.trace_enabled.lower() == "true": +184 setd = dict(setd, pmd_files=pmd_files, +185 trace_path=self.file_store.joinpath(self.REPORT_PATH, "traces", setd["name"], "tracelog.blx"), +186 trace_activation_files=trace_activation_files) +187 else: +188 setd = dict(setd, pmd_files=[], +189 trace_path="",trace_activation_files=[]) +190 self.sets.append(setd) +
191 +
192 - def set_plan_harness(self): +
193 """setting up test harness for a plan""" +194 eunit = False +195 stif = False +196 stifunit = False +197 for setd in self.sets: +198 if setd["test_harness"] == "STIF": +199 stif = True +200 elif setd["test_harness"] == "EUNIT": +201 eunit = True +202 elif setd["test_harness"] == "STIFUNIT": +203 stifunit = True +204 +205 if eunit and stif: +206 self.harness = "MULTI_HARNESS" +207 elif eunit: +208 self.harness = "EUNIT" +209 elif stif: +210 self.harness = "STIF" +211 elif stifunit: +212 self.harness = "STIFUNIT" +
213 +214 @property +
215 - def post_actions(self): +
216 """ATS3 post actions.""" +217 actions = [] +218 report_path = self.file_store.joinpath(self.REPORT_PATH) +219 email_action = ("SendEmailAction", +220 (("subject", self.EMAIL_SUBJECT), +221 ("type", "ATS3_REPORT"), +222 ("send-files", "true"), +223 ("to", self.report_email))) +224 ats3_report = ("FileStoreAction", +225 (("to-folder", report_path.joinpath("ATS3_REPORT")), +226 ("report-type", "ATS3_REPORT"), +227 ("date-format", "yyyyMMdd"), +228 ("time-format", "HHmmss"))) +229 stif_report = ("FileStoreAction", +230 (("to-folder", report_path.joinpath("STIF_REPORT")), +231 ("report-type", "STIF_COMPONENT_REPORT_ALL_CASES"), +232 ("run-log", "true"), +233 ("date-format", "yyyyMMdd"), +234 ("time-format", "HHmmss"))) +235 eunit_report = ("FileStoreAction", +236 (("to-folder", report_path.joinpath("EUNIT_REPORT")), +237 ("report-type", "EUNIT_COMPONENT_REPORT_ALL_CASES"), +238 ("run-log", "true"), +239 ("date-format", "yyyyMMdd"), +240 ("time-format", "HHmmss"))) +241 diamonds_action = ("DiamondsAction", ()) +242 if self.diamonds_build_url: +243 actions.append(diamonds_action) +244 if self.file_store: +245 actions.append(ats3_report) +246 if self.harness == "STIF": +247 actions.append(stif_report) +248 elif self.harness == "EUNIT": +249 actions.append(eunit_report) +250 if self.report_email: +251 actions.append(email_action) +252 return actions +
253 +
254 - def __getitem__(self, key): +
255 return self.__dict__[key] +
256 +257 +
258 -def create_drop(config): +
259 """Create a test drop.""" +260 _logger.debug("initialize test plan") +261 +262 test_plan = Ats3TestPlan(config) +263 parser = acp.Ats3ComponentParser(config) +264 +265 for tsrc in config.tsrc_paths: +266 lst_check_harness = [] +267 _logger.info("inspecting tsrc path: %s" % tsrc) +268 #cehcking if there are components without harness +269 for sub_component in config.tsrc_paths_dict[tsrc]['content'].keys(): +270 _harness_ = config.tsrc_paths_dict[tsrc]['content'][sub_component]['harness'] +271 if _harness_ != "": +272 lst_check_harness.append(_harness_) +273 +274 #if component has harness then insert to test set +275 if len(lst_check_harness) > 0: +276 parser.insert_test_set(test_plan, path(tsrc), config.tsrc_paths_dict) +277 +278 test_plan.set_plan_harness() +279 +280 generator = adg.Ats3TestDropGenerator() +281 _logger.info("generating drop file: %s" % config.drop_file) +282 generator.generate(test_plan, output_file=config.drop_file, config_file=config.config_file) +
283 +
284 -def split_paths(arg, delim=","): +
285 """ +286 Split the string by delim, removing extra whitespace. +287 """ +288 return [path(part.strip()) +289 for part in arg.split(delim) if part.strip()] +
290 +291 +292 +
293 -def main(): +
294 """Main entry point.""" +295 cli = OptionParser(usage="%prog [options] TSRC1 [TSRC2 [TSRC3 ...]]") +296 cli.add_option("--build-drive", help="Build area root drive") +297 cli.add_option("--data-dir", help="Data directory name", action="append", +298 default=[]) +299 cli.add_option("--device-type", help="Device type (e.g. 'PRODUCT')", +300 default="unknown") +301 cli.add_option("--device-hwid", help="Device hwid", +302 default="") +303 cli.add_option("--trace-enabled", help="Tracing enabled", default="False") +304 cli.add_option("--ctc-enabled", help="CTC enabled", default="False") +305 cli.add_option("--diamonds-build-url", help="Diamonds build url") +306 cli.add_option("--drop-file", help="Name for the final drop zip file", +307 default="ATS3Drop.zip") +308 cli.add_option("--file-store", help="Destination path for reports.", +309 default="") +310 cli.add_option("--flash-images", help="Paths to the flash image files", +311 default="") +312 cli.add_option("--minimum-flash-images", help="Minimum amount of flash images", +313 default=2) +314 cli.add_option("--harness", help="Test harness (default: %default)", +315 default="") +316 cli.add_option("--report-email", help="Email notification receivers", +317 default="") +318 cli.add_option("--plan-name", help="Name of the test plan", +319 default="plan") +320 cli.add_option("--sis-files", help="Paths to the sis files", +321 default="") +322 cli.add_option("--target-platform", help="Target platform (default: %default)", +323 default="armv5 urel") +324 cli.add_option("--test-timeout", help="Test execution timeout value (default: %default)", +325 default="60") +326 cli.add_option("--eunitexerunner-flags", help="Eunitexerunner flags", +327 default="") +328 cli.add_option("--testrun-name", help="Name of the test run", +329 default="run") +330 cli.add_option("--config", help="Path to the config file", +331 default="") +332 cli.add_option("--verbose", help="Increase output verbosity", +333 action="store_true", default=False) +334 +335 opts, tsrc_paths = cli.parse_args() +336 +337 if not tsrc_paths: +338 cli.error("no tsrc directories given") +339 if not opts.flash_images: +340 cli.error("no flash image files given") +341 if not opts.build_drive: +342 cli.error("no build drive given") +343 if len(opts.flash_images.split(",")) < int(opts.minimum_flash_images): +344 cli.error("Not enough flash files: %i defined, %i needed" % (len(opts.flash_images.split(",")), int(opts.minimum_flash_images) )) +345 +346 if opts.verbose: +347 _logger.setLevel(logging.DEBUG) +348 logging.basicConfig(level=logging.DEBUG) +349 +350 config = Configuration(opts, tsrc_paths) +351 create_drop(config) +
352 +353 +354 if __name__ == "__main__": +355 main() +356 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +