1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from path import path
24 import ats3.parsers as parser
25 import logging
26 import os
27 import re
28 import subprocess
29
30 _logger = logging.getLogger('ats3')
31
33 """
34 Parse Symbian SW component for ATS3 testing related information.
35
36 Parses a component's source directories for testing related settings and
37 files, and generates a TestPlan out of the findings.
38
39 """
40
42
43 self.target_platform = config.target_platform
44 self.pkg_parser = parser.PkgFileParser(self.target_platform.replace(" ", "_")+".pkg")
45
46 self.bld_parser = parser.BldFileParser()
47 self.mmp_parser = parser.MmpFileParser()
48
49 self.data_dirs = config.data_dir
50 self.flash_images = [path(p) for p in config.flash_images]
51 self.tsrc_dir = None
52 self.build_drive = config.build_drive
53 self.target_platform = config.target_platform
54 self.sis_files = config.sis_files
55 self.cfg_harness = config.harness
56 self.test_timeout = config.test_timeout
57 self.trace_enabled = config.trace_enabled
58 self.excludable_dlls = []
59 self.custom_dir = None
60
62 """Inserts test set data to test plan for stif"""
63 if not pkg_paths:
64 try:
65
66 tsrc_testdata_files = self.tsrc_data_files()
67 for data_file in tsrc_testdata_files:
68 if "\\mmc\\" in data_file.lower():
69 src_dst.append((data_file, path(r"e:\testing\data").joinpath(data_file.name), "data"))
70 elif "\\c\\" in data_file.lower():
71 src_dst.append((data_file, path(r"c:\testing\data").joinpath(data_file.name), "data"))
72 else:
73 src_dst.append((data_file, path(r"c:\testing\data").joinpath(data_file.name), "data"))
74 except OSError:
75 _logger.warning("No testdata folder" )
76 tsrc_testdata_files = None
77
78 else:
79 try:
80 src_dst = pkg_paths
81 except OSError:
82 _logger.warning("No pkg file in tsrc/group directory ( %s )" % self.tsrc_pkg_dir)
83 src_dst = []
84 except IndexError:
85 _logger.warning("No pkg file in tsrc/group directory ( %s )" % self.tsrc_pkg_dir)
86 src_dst = []
87
88 return src_dst
89
91 """Parse tsrc directory, storing data into the test plan."""
92 self.tsrc_dir = path(tsrc_dir)
93 tsrc_testdata_files = []
94 tsrc_config_files = []
95 self.custom_dir = None
96 engine_ini_file = None
97 test_harness = self.cfg_harness
98 src_dst = []
99 pmd_files = []
100 trace_activation_files = []
101 if not os.path.exists( self.tsrc_dir ):
102 _logger.error("Missing tsrc directory: %s", self.tsrc_dir)
103 else:
104 self.custom_dir = self.tsrc_dir.joinpath("custom")
105 _logger.debug("using customized testing from %s" % self.custom_dir)
106 if os.path.exists(self.tsrc_bld_dir.joinpath("group","bld.inf")):
107 mmp_files = self.bld_parser.get_test_mmp_files(self.tsrc_bld_dir.joinpath("group","bld.inf"))
108 else:
109 mmp_files = self.bld_parser.get_test_mmp_files(self.tsrc_bld_dir.joinpath("bld.inf"))
110
111 for mmp in mmp_files:
112 test_harness = self.mmp_parser.get_harness(mmp)
113
114 pkg_paths = self.pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
115 if self.trace_enabled == "True":
116 try:
117 pmd_files = self.tsrc_pmd_files()
118 except OSError:
119 _logger.warning("No pmd file in output-folder.")
120 try:
121 trace_activation_files = self.tsrc_trace_activation_files()
122 except OSError:
123 _logger.warning("No trace activation files in trace init folder")
124 if trace_activation_files and not pmd_files:
125 _logger.warning("Trace activation files available but NOT pmd file.")
126 elif pmd_files and not trace_activation_files:
127 _logger.warning("Pmd file available but NO trace activation files.")
128
129 if test_harness == "STIF":
130 src_dst = self.insert_testset_stif(src_dst, pkg_paths)
131
132 if test_harness == "STIFUNIT":
133 src_dst = self.insert_testset_stif(src_dst, pkg_paths)
134
135 elif test_harness == "EUNIT":
136 try:
137 src_dst = self.pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
138
139 except OSError:
140 _logger.warning("No pkg file in tsrc/group directory ( %s )" % self.tsrc_pkg_dir)
141 src_dst = []
142 except IndexError:
143 _logger.warning("No pkg file in tsrc/group directory ( %s )" % self.tsrc_pkg_dir)
144 src_dst = []
145 try:
146 testmodule_files = self.tsrc_dll_files()
147
148 for dll_file in testmodule_files:
149 if not self.check_dll_duplication(dll_file.name, src_dst):
150 _dll_type_ = self.mmp_parser.get_dll_type(self.tsrc_bld_dir)
151
152 if dll_file.name in self.excludable_dlls:
153 src_dst.append((dll_file, path(r"c:\sys\bin").joinpath(dll_file.name), "data:%s" % _dll_type_))
154 else:
155 src_dst.append((dll_file, path(r"c:\sys\bin").joinpath(dll_file.name), "testmodule"))
156
157 except OSError:
158 _logger.warning("No dll files in dll folders" )
159 tsrc_testdata_files = None
160 temp_list = []
161 if self.trace_enabled == "True":
162 test_plan.insert_set(data_files=tsrc_testdata_files,
163 config_files=tsrc_config_files,
164 engine_ini_file=engine_ini_file,
165 image_files=self.flash_images,
166 sis_files=self.sis_files,
167
168 test_timeout=list(self.test_timeout),
169 test_harness=test_harness,
170 src_dst=src_dst,
171 pmd_files=pmd_files,
172 trace_activation_files=trace_activation_files,
173 custom_dir=self.custom_dir,
174 component_path=tsrc_dir)
175 else:
176 test_plan.insert_set(image_files=self.flash_images,
177 sis_files=self.sis_files,
178 test_timeout=list(self.test_timeout),
179 test_harness=test_harness,
180 src_dst=src_dst,
181 custom_dir=self.custom_dir,
182 component_path=tsrc_dir)
183
185 """Checks if the dll is already in the dictionary, created by pkg file"""
186 for item in _src_dst_:
187 first, second, _ = item
188 return _dll_file_.lower() in first.lower()
189
190 @property
192 """Component's build directory."""
193 return self.tsrc_dir
194
195 @property
197 """Component's configuration file directory."""
198 return self.tsrc_dir.joinpath("conf")
199
200 @property
202 """Component's test customization directory."""
203 return self.tsrc_dir.joinpath("custom")
204
205
206 @property
208 """Component's data directories."""
209 return [self.tsrc_dir.joinpath(d) for d in self.data_dirs]
210
211 @property
213 """Component's initialization file directory."""
214 return self.tsrc_dir.joinpath("init")
215
216 @property
218 """Component's .pkg -file directory"""
219 return self.tsrc_dir
220
221 @property
223 """Component's trace activation file directory"""
224 return self.tsrc_dir.joinpath("trace_init")
225
226 @property
228 """Component's pmd file directory"""
229 pmd_dir = self.build_drive + os.sep
230 return pmd_dir.joinpath("output", "pmd")
231
233 """Component's trace pmd files from the {build_drive}\output directory"""
234 return list(self.tsrc_pmd_dir.walkfiles("*.pmd"))
235
237 """Component's trace activation files, from the rtace_init directory."""
238 return list(self.tsrc_trace_activation_dir.walkfiles("*.xml"))
239
241 """Component's configuration files, from the conf directory."""
242 return list(self.tsrc_conf_dir.walkfiles("*.cfg"))
243
245 """Component's initialiation files, from the ini directory."""
246 return list(self.tsrc_init_dir.walkfiles("*.ini"))
247
249 """Component's data files, from data directories."""
250 files = []
251 files2 = []
252 for data_dir in self.tsrc_data_dirs:
253 if data_dir.exists():
254 files.extend(list(data_dir.walkfiles()))
255
256
257 for data_file in files:
258 if data_file.name.lower() != "distribution.policy.s60":
259 files2.append(data_file)
260 return files2
261
263 """Component's DLL files, reported by ABLD BUILD."""
264
265 dlls = []
266 orig_dir = os.getcwd()
267 try:
268 os.chdir(self.tsrc_bld_dir)
269 os.system("bldmake bldfiles")
270
271 process = subprocess.Popen("abld -w test build %s" % self.target_platform, shell=True, stdout=subprocess.PIPE)
272 pipe = process.communicate()[0]
273 for line in pipe.split('\n'):
274 _logger.debug(line.strip())
275 target = path(line.strip())
276 if target.ext == ".dll":
277
278 build_target = self.build_drive.joinpath(target).normpath()
279 if not build_target.exists():
280 _logger.warning("not found: %s" % build_target)
281 else:
282 dlls.append(build_target)
283 finally:
284 os.chdir(orig_dir)
285 return dlls
286
288 """Component's package files, from the group directory"""
289 pkg_dirs = []
290 for sub_component in _dict_[self.tsrc_pkg_dir]['content'].keys():
291 pkg_dirs.append(sub_component)
292 return pkg_dirs
293