~ubuntu-branches/ubuntu/maverick/ldtp/maverick

« back to all changes in this revision

Viewing changes to python/ldtprunner

  • Committer: Bazaar Package Importer
  • Author(s): Kartik Mistry
  • Date: 2010-02-04 10:36:08 UTC
  • mfrom: (1.4.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 19.
  • Revision ID: james.westby@ubuntu.com-20100204103608-dhqdo7jk10ygwt40
Tags: 2.0.2-1
* New upstream release:
  + Packaging is based on Ubuntu packages, Thanks Ubuntu!
  + LDTPv2 is a complete rewrite of LDTPv1 in Python
  + LTFX is completely removed in LDTP v2 in favor of wnck
* debian/control:
  + Updated to Standards-Version 3.8.4 (no changes needed)
  + Fixed typo in description python->Python
  + ldtp is now arch: all package
* debian/rules:
  + Using dh to make it simple
* Removed unused manpages
* Updated package to use new source format 3.0 (quilt)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
#############################################################################
3
 
#
4
 
# Linux Desktop Testing Project http://ldtp.freedesktop.org
5
 
6
 
# ldtprunner
7
 
#
8
 
#  Author:
9
 
#     Nagappan Alagappan <nagappan@gmail.com>
10
 
11
 
#  Copyright 2005 - 2006 Novell, Inc.
12
 
#  Copyright 2008-2009 Nagappan Alagappan
13
 
14
 
#  This program is free software; you can redistribute it and/or
15
 
#  modify it under the terms of the GNU Lesser General Public
16
 
#  License as published by the Free Software Foundation; either
17
 
#  version 2 of the License, or (at your option) any later version.
18
 
19
 
#  This program is distributed in the hope that it will be useful,
20
 
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22
 
#  Lesser General Public License for more details.
23
 
24
 
#  You should have received a copy of the GNU Lesser General Public
25
 
#  License along with this program; if not, write to the
26
 
#  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
27
 
#  Boston, MA 02110, USA.
28
 
#
29
 
#############################################################################
30
 
 
31
 
__author__ = "Nagappan Alagappan <nagappan@gmail.com>"
32
 
# __maintainer__ = "Nagappan Alagappan <nagappan@gmail.com>"
33
 
__version__ = "1.5.1"
34
 
 
35
 
import os
36
 
import re
37
 
import sys
38
 
import time
39
 
import trace
40
 
import commands
41
 
import traceback
42
 
import xml.dom.minidom
43
 
 
44
 
from optparse import OptionParser
45
 
 
46
 
import ldtp
47
 
import ldtputils
48
 
 
49
 
scriptLevelTimeinfo = False
50
 
 
51
 
class TESTCASESTATE (object):
52
 
    TCS_ENTERING = 1
53
 
    TCS_RUNNING = 2
54
 
    TCS_EXITING = 3
55
 
 
56
 
scriptLevelTimeinfo = False
57
 
g_prj_tcID = 0
58
 
g_prj_tccaseentername = None
59
 
g_prj_tccaseexitname = None
60
 
g_prj_tcappstatename = None
61
 
g_prj_exception = False
62
 
g_prj_casestate = None
63
 
    
64
 
# Add current working directory to path
65
 
sys.path = sys.path + ['.']
66
 
# Change to current working directory
67
 
os.chdir (os.getcwdu ())
68
 
 
69
 
def getText (nodelist):
70
 
    rc = ""
71
 
    for node in nodelist:
72
 
        if node.nodeType == node.TEXT_NODE:
73
 
            rc = rc + node.data
74
 
    return rc
75
 
 
76
 
def executeldtp (ldtpxmldata):
77
 
    global g_prj_tccaseentername, g_prj_tccaseexitname
78
 
    if ldtpxmldata == None:
79
 
        raise ldtp.LdtpExecutionError ('ldtpxmldata tag not present')
80
 
 
81
 
    ldtpxml = ldtpxmldata.getElementsByTagName ('ldtp')
82
 
    if ldtpxml == []:
83
 
        ldtp.log ('ldtp xml tag not present')
84
 
        print 'ldtp xml tag not present'
85
 
        sys.exit (1)
86
 
    logfileappend = 1
87
 
    logfilename = ''
88
 
    screenshotDir = None
89
 
    for ldtpelements in ldtpxml:
90
 
        try:
91
 
            logfileoverwrite = ldtpelements.getElementsByTagName ('logfileoverwrite')[0]
92
 
            logfileupdate = getText (logfileoverwrite.childNodes)
93
 
            try:
94
 
                logfileappend = int (logfileupdate)
95
 
            except ValueError:
96
 
                # print 'Log file append status not integer value - ' + logfileupdate
97
 
                log ('Log file append status not integer value - '
98
 
                     + logfileupdate, 'warning')
99
 
                pass
100
 
            # print 'Log append - ' + logfileappend
101
 
        except IndexError:
102
 
            # print 'Log file overwrite not present'
103
 
            pass
104
 
        try:
105
 
            logconf = ldtpelements.getElementsByTagName ('logconf')[0]
106
 
            logConfFile = getText (logconf.childNodes)
107
 
            ldtp.addlogger (logConfFile)
108
 
        except IndexError:
109
 
            # print 'Log configuration file'
110
 
            pass
111
 
        try:
112
 
            screenshotDir = ldtpelements.getElementsByTagName ('screenshotdir')[0]
113
 
            screenshotDir = getText (screenshotDir.childNodes)
114
 
        except IndexError:
115
 
            # print 'Screenshot directory entry missing'
116
 
            pass
117
 
        try:
118
 
            logfile = ldtpelements.getElementsByTagName ('logfile')[0]
119
 
            logfilename = getText (logfile.childNodes)
120
 
            logfilename = ldtputils.getFullPath (logfilename)
121
 
            ldtp.startlog (logfilename, int (logfileappend), screenshotDir)
122
 
            # print 'Log file name - ' + logfilename + ' - overwrite - ' + str (int (logfileappend))
123
 
        except IndexError:
124
 
            # print 'Log file entry not present'
125
 
            pass
126
 
        try:
127
 
            loglevel = ldtpelements.getElementsByTagName ('loglevel')[0]
128
 
            logLevel = getText (loglevel.childNodes)
129
 
            ldtp.setloglevel (logLevel)
130
 
        except IndexError:
131
 
            # print 'Log level entry not present'
132
 
            pass
133
 
        try:
134
 
            appmapfile = ldtpelements.getElementsByTagName ('appmapfile')[0]
135
 
            appmapfilename = getText (appmapfile.childNodes)
136
 
            appmapfilename = ldtputils.getFullPath (appmapfilename)
137
 
            # print 'Appmap file name: ' + appmapfilename
138
 
            ldtp.log ('appmap file name ' + appmapfilename, 'info')
139
 
            ldtp.initappmap (appmapfilename)
140
 
        except IndexError:
141
 
            # print 'Appmap file entry not present'
142
 
            pass
143
 
        except ldtp.LdtpExecutionError, msg:
144
 
            # print 'appmap could not be initalize ' + msg.value
145
 
            ldtp.log ('Appmap could not be initalized %s' % msg.value, 'error')
146
 
        try:
147
 
            appUnderTest = ldtpelements.getElementsByTagName ('appundertest')[0]
148
 
            appUnderTest = getText (appUnderTest.childNodes)
149
 
            ldtp.appundertest (appUnderTest)
150
 
        except IndexError:
151
 
            # print 'Application Under Test entry missing'
152
 
            pass
153
 
 
154
 
        # Check the tag for case enter and exit
155
 
        try:
156
 
            tcenter = ldtpelements.getElementsByTagName ("caseenter")[0]
157
 
            tcentername = getText (tcenter.childNodes)
158
 
            tcentername = ldtputils.getFullPath(tcentername)
159
 
        except IndexError:
160
 
            ldtp.log ('Not use TestCase Enter', 'info')
161
 
        else:
162
 
            g_prj_tccaseentername = tcentername
163
 
        try:
164
 
            tcexit = ldtpelements.getElementsByTagName ("caseexit")[0]
165
 
            tcexitname = getText (tcexit.childNodes)
166
 
            tcexitname = ldtputils.getFullPath(tcexitname)
167
 
        except IndexError:
168
 
            ldtp.log ('Not use TestCase Exit', 'info')
169
 
        else:
170
 
            g_prj_tccaseexitname = tcexitname
171
 
 
172
 
        try:
173
 
            executecategories (ldtpelements)
174
 
        except KeyboardInterrupt:
175
 
            return
176
 
    if logfilename != '':
177
 
        ldtp.stoplog ()
178
 
 
179
 
def executecategories (ldtpelements):
180
 
        categories = ldtpelements.getElementsByTagName ('category')
181
 
        if categories == []:
182
 
            executegroup (ldtpelements)
183
 
            return
184
 
        i = 1
185
 
        _categoryTestcaseCount = 0
186
 
        _categoryScriptPassCount = 0
187
 
        _startTime = time.time ()
188
 
        _startLocalTime = time.strftime ('%H:%M:%S %p on %d-%b-%Y', time.localtime ())
189
 
        for categoryelements in categories:
190
 
            categoryname = None
191
 
            try:
192
 
                categoryname = categoryelements.getElementsByTagName ('name')[0]
193
 
            except IndexError:
194
 
                # print 'Script file entry not present - skipping'
195
 
                ldtp.log ('categoryname entry not present - skipping', 'info')
196
 
            if categoryname != None and categoryname.parentNode == categoryelements:
197
 
                ldtp.log (getText (categoryname.childNodes), 'categorystart')
198
 
            else:
199
 
                ldtp.log (categoryelements.nodeName + str (i), 'categorystart')
200
 
            scriptPassCount, totalScripts = executegroup (categoryelements)
201
 
            _categoryScriptPassCount += scriptPassCount
202
 
            _categoryTestcaseCount   += totalScripts
203
 
            if categoryname != None and categoryname.parentNode == categoryelements:
204
 
                ldtp.log (getText (categoryname.childNodes), 'categoryend')
205
 
            else:
206
 
                ldtp.log ('Executing ' + categoryelements.nodeName + str (i), 'categoryend')
207
 
            i = i + 1
208
 
        ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
209
 
                                               getElapsedTime (time.time (),
210
 
                                                               _startTime)),
211
 
                  'timeinfo')
212
 
        ldtp.log ('total="%s" pass="%s" fail="%s"'% (str (_categoryTestcaseCount),
213
 
                                                     str (_categoryScriptPassCount),
214
 
                                                     str (_categoryTestcaseCount - _categoryScriptPassCount)),
215
 
                  'categorystatus')
216
 
 
217
 
def executegroup (ldtpelements):
218
 
        global g_prj_tcID, g_prj_exception, g_prj_casestate
219
 
        global g_prj_tccaseentername, g_prj_tccaseexitname, g_prj_tcappstatename
220
 
        global scriptLevelTimeinfo
221
 
        if ldtpelements is None:
222
 
            raise ldtp.LdtpExecutionError ('Atleast one group tag should be present')
223
 
        groups = ldtpelements.getElementsByTagName ('group')
224
 
        if groups == []:
225
 
            raise ldtp.LdtpExecutionError ('Atleast one group tag should be present')
226
 
        groupstart = 'groupstart'
227
 
        groupend = 'groupend'
228
 
        i = 1
229
 
        _groupTestcaseCount = 0
230
 
        _groupScriptPassCount = 0
231
 
        global scriptLevelTimeinfo
232
 
        for groupelements in groups:
233
 
            comment = None
234
 
            testcaseid = None
235
 
            groupname = None
236
 
            try:
237
 
                testcaseid = groupelements.getElementsByTagName ('testcaseid')[0]
238
 
            except IndexError:
239
 
                # print 'Script file tag not present - skipping'
240
 
                ldtp.log ('testcaseid tag not present - skipping', 'info')
241
 
            try:
242
 
                groupname = groupelements.getElementsByTagName ('name')[0]
243
 
            except IndexError:
244
 
                # print 'Script file tag not present - skipping'
245
 
                ldtp.log ('groupname tag not present - skipping', 'info')
246
 
            try:
247
 
                _scriptLevelTimeInfo = groupelements.getElementsByTagName ('scripttimeinfo')[0]
248
 
                try:
249
 
                    if int (getText (_scriptLevelTimeInfo.childNodes)) == 1:
250
 
                        scriptLevelTimeinfo = True
251
 
                except ValueError:
252
 
                    pass
253
 
            except IndexError:
254
 
                pass
255
 
            try:
256
 
                comment = groupelements.getElementsByTagName ('comment')[0]
257
 
            except IndexError:
258
 
                # print 'Script file tag not present - skipping'
259
 
                ldtp.log ('comment tag not present - skipping', 'info')
260
 
            # Check the tag for the state of testcase
261
 
            try:
262
 
                tcappstate = groupelements.getElementsByTagName ("appstate")[0]
263
 
                tcappstatename = getText (tcappstate.childNodes)
264
 
                tcappstatename = ldtputils.getFullPath(tcappstatename)
265
 
            except IndexError:
266
 
                ldtp.log ('appstate tag not present', 'info')
267
 
                g_prj_tcappstatename = None
268
 
            else:
269
 
                g_prj_tcappstatename = tcappstatename
270
 
 
271
 
            # print 'Executing group ' + groupelements.nodeName + str (i)
272
 
            if groupname != None and groupname.parentNode == groupelements:
273
 
                ldtp.log (getText (groupname.childNodes), groupstart)
274
 
            else:
275
 
                ldtp.log (groupelements.nodeName + str (i), groupstart)
276
 
            scriptPassCount = 0
277
 
            totalScripts = 0
278
 
            _startTime = time.time ()
279
 
            _startLocalTime = time.strftime ('%H:%M:%S %p on %d-%b-%Y', time.localtime ())
280
 
            # Run TestCaseEnter and Appstate before to execute every group
281
 
            g_prj_exception = False
282
 
            g_prj_casestate = None
283
 
            if g_prj_tccaseentername:
284
 
                g_prj_casestate = TESTCASESTATE.TCS_ENTERING
285
 
                try:
286
 
                    ldtp.log ('TestCase Enter is: %s' % g_prj_tccaseentername, 'info')
287
 
                    execfile (g_prj_tccaseentername)
288
 
                except:
289
 
                    ldtp.log ('Failed in TestCase Enter', 'info')
290
 
                    if hasattr (traceback, 'format_exc'):
291
 
                        ldtp.log (traceback.format_exc (), 'error')
292
 
                    else:
293
 
                        ldtp.log (traceback.print_exc (), 'error')
294
 
 
295
 
            if g_prj_tcappstatename:
296
 
                try:
297
 
                    ldtp.log ('Entering AppState is: %s' % g_prj_tcappstatename, 'info')
298
 
                    execfile(g_prj_tcappstatename)
299
 
                except:
300
 
                    ldtp.log('Failed in Entering AppState', 'info')
301
 
                    if hasattr (traceback, 'format_exc'):
302
 
                        ldtp.log (traceback.format_exc (), 'error')
303
 
                    else:
304
 
                        ldtp.log (traceback.print_exc (), 'error')
305
 
 
306
 
            try:
307
 
                appUnderTest = groupelements.getElementsByTagName ('appundertest')[0]
308
 
                appUnderTest = getText (appUnderTest.childNodes)
309
 
                ldtp.appundertest (appUnderTest)
310
 
            except IndexError:
311
 
                # print 'Application Under Test entry missing'
312
 
                pass
313
 
 
314
 
            try:
315
 
                if testcaseid != None:
316
 
                    ldtp.log (getText (testcaseid.childNodes), 'testcaseid')
317
 
                if comment != None:
318
 
                    ldtp.log (getText (comment.childNodes), 'comment')
319
 
                scriptPassCount, totalScripts = executescript (groupelements)
320
 
                if scriptPassCount == totalScripts:
321
 
                    _groupScriptPassCount += 1
322
 
                _groupTestcaseCount   += 1
323
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
324
 
                                                        getElapsedTime (time.time (),
325
 
                                                                        _startTime)),
326
 
                          'timeinfo')
327
 
            except KeyboardInterrupt:
328
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
329
 
                                                        getElapsedTime (time.time (),
330
 
                                                                        _startTime)),
331
 
                          'timeinfo')
332
 
                if groupname != None and groupname.parentNode == groupelements:
333
 
                    ldtp.log (getText (groupname.childNodes), groupend)
334
 
                else:
335
 
                    ldtp.log (groupelements.nodeName + str (i), groupend)
336
 
                raise
337
 
            # Run TestCaseExit and Appstate after executed every group
338
 
            if g_prj_tcappstatename:
339
 
                g_prj_casestate = TESTCASESTATE.TCS_EXITING
340
 
                try:
341
 
                    ldtp.log ('Exiting AppState is: %s' % g_prj_tcappstatename, 'info')
342
 
                    execfile (g_prj_tcappstatename)
343
 
                except:
344
 
                    ldtp.log ('Failed in Exiting AppState', 'info')
345
 
                    if hasattr (traceback, 'format_exc'):
346
 
                        ldtp.log (traceback.format_exc (), 'error')
347
 
                    else:
348
 
                        ldtp.log (traceback.print_exc (), 'error')
349
 
            if g_prj_tccaseexitname:
350
 
                g_prj_casestate = TESTCASESTATE.TCS_EXITING
351
 
                try:
352
 
                    ldtp.log ('TestCase Exit is: %s' % g_prj_tccaseexitname, 'info')
353
 
                    execfile (g_prj_tccaseexitname)
354
 
                except:
355
 
                    ldtp.log('Failed in TestCase Exit.', 'info')
356
 
                    if hasattr (traceback, 'format_exc'):
357
 
                        ldtp.log (traceback.format_exc (), 'error')
358
 
                    else:
359
 
                        ldtp.log (traceback.print_exc (), 'error')
360
 
 
361
 
            ldtp.log ('total="%s" pass="%s" fail="%s"'% (str (totalScripts),
362
 
                                                         str (scriptPassCount),
363
 
                                                         str (totalScripts - scriptPassCount)),
364
 
                      'groupsstatus')
365
 
            if groupname != None and groupname.parentNode == groupelements:
366
 
                ldtp.log (getText (groupname.childNodes), groupend)
367
 
            else:
368
 
                ldtp.log (groupelements.nodeName + str (i), groupend)
369
 
            i = i + 1
370
 
        return _groupScriptPassCount, _groupTestcaseCount
371
 
 
372
 
def getElapsedTime (_endTime, _startTime):
373
 
    timeDiff = _endTime - _startTime
374
 
    minbaseon = 60
375
 
    hourbaseon = minbaseon*60
376
 
    daybaseon = hourbaseon*24
377
 
    days = int (timeDiff / daybaseon)
378
 
    hours = int ((timeDiff - days*daybaseon) / hourbaseon)
379
 
    minutes = int ((timeDiff - days * daybaseon - hours * hourbaseon) / minbaseon)
380
 
    seconds = int (timeDiff  - days * daybaseon - hours * hourbaseon - minutes * minbaseon)
381
 
 
382
 
    if days > 0:
383
 
        return ('%s day(s) %s:%s:%s' %
384
 
                (str (days), str (hours), str (minutes), str (seconds)))
385
 
    else:
386
 
        return ('%s:%s:%s' %
387
 
                (str (hours), str (minutes), str (seconds)))
388
 
 
389
 
def executescript (groupelements):
390
 
    global g_prj_exception
391
 
    global scriptLevelTimeinfo
392
 
    if groupelements == None:
393
 
        raise ldtp.LdtpExecutionError ('groupelements value should *NOT* be None')
394
 
 
395
 
    scripts = groupelements.getElementsByTagName ('script')
396
 
    scriptPassCount = 0
397
 
    totalScripts = len (scripts)
398
 
    for scriptelements in scripts:
399
 
        scriptFileName = ''
400
 
        scriptDataFileName = ''
401
 
        testcasename = None
402
 
        try:
403
 
            name = scriptelements.getElementsByTagName ('name')[0]
404
 
        except IndexError:
405
 
            # print 'Script file entry not present - skipping'
406
 
            ldtp.log ('Script file entry not present - skipping', 'warning')
407
 
            continue
408
 
        scriptFileName = getText (name.childNodes)
409
 
        try:
410
 
            data = scriptelements.getElementsByTagName ('data')[0]
411
 
            scriptDataFileName = getText (data.childNodes)
412
 
        except IndexError:
413
 
            ldtp.log ('Data file maynot be present')
414
 
        try:
415
 
            testcase = scriptelements.getElementsByTagName ('testcase')[0]
416
 
            testcasename = getText (testcase.childNodes)
417
 
        except IndexError:
418
 
            ldtp.log ('testcase name maynot be present')
419
 
        scriptglobal = dict ({'datafilename' : ''})
420
 
        if scriptDataFileName != '':
421
 
            ldtp.log (scriptFileName, 'scriptstart')
422
 
            if os.path.exists (scriptDataFileName) == False:
423
 
                scriptDataFileName = "%s/%s" % (baseDir, scriptDataFileName)
424
 
            ldtp.log (scriptDataFileName, 'datafilename')
425
 
            scriptglobal = dict ({'datafilename' : scriptDataFileName})
426
 
        else:
427
 
            ldtp.log (scriptFileName, 'scriptstart')
428
 
            ldtp.log ('data xml tag missing', 'info')
429
 
        # print 'Executing script: ' + scriptFileName + ' - ' + scriptDataFileName
430
 
        try:
431
 
            appmapfile = scriptelements.getElementsByTagName ('appmapfile')[0]
432
 
            appmapfilename = getText (appmapfile.childNodes)
433
 
            appmapfilename = ldtputils.getFullPath (appmapfilename)
434
 
            # print 'Appmap file name: ' + appmapfilename
435
 
            ldtp.log ('appmap file name ' + appmapfilename, 'info')
436
 
            ldtp.initappmap (appmapfilename)
437
 
        except IndexError:
438
 
            # print 'Log file entry not present'
439
 
            pass
440
 
        except ldtp.LdtpExecutionError, msg:
441
 
            # print 'appmap could not be initalize ' + msg.value
442
 
            ldtp.log ('Appmap could not be initalized %s' % msg.value, 'error')
443
 
        try:
444
 
            appUnderTest = scriptelements.getElementsByTagName ('appundertest')[0]
445
 
            appUnderTest = getText (appUnderTest.childNodes)
446
 
            ldtp.appundertest (appUnderTest)
447
 
        except IndexError:
448
 
            # print 'Application Under Test entry missing'
449
 
            pass
450
 
        _startTime = time.time ()
451
 
        _startLocalTime = time.strftime ('%H:%M:%S %p on %d-%b-%Y',
452
 
                                         time.localtime ())
453
 
        global scriptLevelTimeinfo
454
 
        try:
455
 
            if testcasename is not None:
456
 
                ldtp.log (testcasename, 'teststart')
457
 
            scriptName = scriptFileName = ldtputils.getFullPath (scriptFileName)
458
 
            if os.path.exists (scriptName) == False:
459
 
                scriptName = "%s/%s" % (baseDir, scriptName)
460
 
            execfile (scriptName, scriptglobal)
461
 
            time.sleep (1)
462
 
            if scriptLevelTimeinfo:
463
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
464
 
                                                        getElapsedTime (time.time (),
465
 
                                                                        _startTime)),
466
 
                          'timeinfo')
467
 
            scriptPassCount = scriptPassCount + 1
468
 
            if testcasename is not None:
469
 
                ldtp.log (testcasename, 'pass')
470
 
                ldtp.log (testcasename, 'testend')
471
 
        except ldtp.LdtpExecutionError, ErrorMsg:
472
 
            g_prj_exception = True
473
 
            if scriptLevelTimeinfo:
474
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
475
 
                                                        getElapsedTime (time.time (),
476
 
                                                                        _startTime)),
477
 
                          'timeinfo')
478
 
            msg = ErrorMsg.value# + traceback.print_exc ()
479
 
            # Escape unicode message
480
 
            replacequotes = re.compile ('\'u\"')
481
 
            msg = replacequotes.sub ('', msg)
482
 
            # Escape single quotes and dobule quotes
483
 
            replacequotes = re.compile ('\'\"')
484
 
            msg = replacequotes.sub ('', msg)
485
 
            # print msg
486
 
            if hasattr (traceback, 'format_exc'):
487
 
                stackTrace = traceback.format_exc ()
488
 
            else:
489
 
                stackTrace = traceback.print_exc ()
490
 
            ldtp.log (stackTrace, 'stacktrace')
491
 
            if stackTrace.find ('ldtp.py') == -1 and \
492
 
                    stackTrace.find ('ldtputils.py') == -1:
493
 
                # Kind of work around, as ldtp.py and ldtputils.py will log,
494
 
                # the error case as well, so let us log error in that case.
495
 
                ldtp.logFailures (msg) # Will take screenshot as well
496
 
            ldtp.log (msg, 'cause')
497
 
            if testcasename is not None:
498
 
                ldtp.log (testcasename, 'fail')
499
 
                ldtp.log (testcasename, 'testend')
500
 
            ldtp.log (scriptFileName, 'scriptend')
501
 
            break
502
 
        except IOError:
503
 
            if testcasename is not None:
504
 
                ldtp.log (testcasename, 'fail')
505
 
                ldtp.log (testcasename, 'testend')
506
 
            g_prj_exception = True
507
 
            ldtp.log ('Script \"' + scriptFileName + '\" not found', 'error')
508
 
            ldtp.log (scriptFileName, 'scriptend')
509
 
            break
510
 
        except KeyboardInterrupt:
511
 
            if testcasename is not None:
512
 
                ldtp.log (testcasename, 'fail')
513
 
                ldtp.log (testcasename, 'testend')
514
 
            if scriptLevelTimeinfo:
515
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
516
 
                                                       getElapsedTime (time.time (),
517
 
                                                                       _startTime)),
518
 
                          'timeinfo')
519
 
            ldtp.log (scriptFileName, 'scriptend')
520
 
            raise
521
 
        except:
522
 
            g_prj_exception = True
523
 
            if hasattr (traceback, 'format_exc'):
524
 
                ldtp.log (traceback.format_exc (), 'stacktrace')
525
 
            else:
526
 
                ldtp.log (traceback.print_exc (), 'stacktrace')
527
 
            if testcasename is not None:
528
 
                ldtp.log (testcasename, 'fail')
529
 
                ldtp.log (testcasename, 'testend')
530
 
            if scriptLevelTimeinfo:
531
 
                ldtp.log ('start="%s" elapsed="%s"' % (str (_startLocalTime),
532
 
                                                       getElapsedTime (time.time (),
533
 
                                                                       _startTime)),
534
 
                          'timeinfo')
535
 
            ldtp.log (scriptFileName, 'scriptend')
536
 
            break
537
 
        ldtp.log (scriptFileName, 'scriptend')
538
 
    return scriptPassCount, totalScripts
539
 
 
540
 
def enable_accessibility ():
541
 
    global old_accessibility_value
542
 
    old_accessibility_value = commands.getoutput('gconftool-2 --get ' +
543
 
                                                 '/desktop/gnome/interface'+
544
 
                                                 '/accessibility')
545
 
    if old_accessibility_value == 'true':
546
 
        return # accessibility is enabled
547
 
    
548
 
    if commands.getstatusoutput ('gconftool-2 --set --type bool /desktop/gnome'
549
 
                                 + '/interface/accessibility true')[0] != 0:
550
 
        raise ldtp.LdtpExecutionError ('Accessibility not enabled')
551
 
    
552
 
def replace_accessibility ():
553
 
    global old_accessibility_value
554
 
    if old_accessibility_value == 'true':
555
 
        return
556
 
    if commands.getstatusoutput ('gconftool-2 --set --type bool /desktop/gnome'
557
 
                                 + '/interface/accessibility false')[0] != 0:
558
 
        raise ldtp.LdtpExecutionError ('Unable to reset Accessibility')    
559
 
 
560
 
def main ():
561
 
    # Defining the command line arguments
562
 
    usage = 'Usage:\n %prog [-c CONFIGFILE] [-i IPADDRESS [-p PORT]] xmlfile'
563
 
    parser = OptionParser (usage)
564
 
    parser.add_option ('-c', '--conf', dest='configFile',
565
 
                       help = 'Add a log configuration file')
566
 
    parser.add_option ('-i', '--ip', dest='ipAddress',
567
 
                       help = 'LDTP engine IP address')
568
 
    parser.add_option ('-p', '--port', dest='port',
569
 
                       help='LDTP engine port')
570
 
    (options, args) = parser.parse_args ()
571
 
 
572
 
    if len (args) != 1:
573
 
        parser.error ('Incorrect number of arguments')
574
 
 
575
 
    filename = options.configFile
576
 
 
577
 
    if options.ipAddress != None:
578
 
        os.environ['LDTP_SERVER_ADDR'] = options.ipAddress
579
 
    if options.port != None:
580
 
        os.environ['LDTP_SERVER_PORT'] = options.port
581
 
 
582
 
    xmlFileName = os.path.abspath (args [0])
583
 
    baseDir = xmlFileName [:xmlFileName.rfind ('/') + 1]
584
 
 
585
 
    try:
586
 
        dom = xml.dom.minidom.parse (xmlFileName)
587
 
    except xml.parsers.expat.ExpatError, msg:
588
 
        print 'XML Error: %s' % msg.value
589
 
        sys.exit (1)
590
 
    except IOError:
591
 
        print 'XML "%s" file not found' % xmlFileName
592
 
        sys.exit (1)
593
 
 
594
 
    if options.ipAddress != None:
595
 
        # Check accessibility, if not enabled, then enable it
596
 
        old_accessibility_value = 'false'
597
 
        enable_accessibility ()
598
 
 
599
 
    # Added user's configuration file, which uses python logging module and configuration format
600
 
    if filename != None:
601
 
        ldtp.addlogger (filename)
602
 
 
603
 
    # Execute LDTP runner XML file
604
 
    executeldtp (dom)
605
 
 
606
 
    if options.ipAddress != None:
607
 
        # Restore the previous accessibility state
608
 
        replace_accessibility ()
609
 
 
610
 
if __name__ == "__main__":
611
 
    main ()
612
 
# else:
613
 
#     # call executeldtp (dom) from your script with xml.dom object
614
 
#    try:
615
 
#        dom = xml.dom.minidom.parse (xmlFileName)
616
 
#    except xml.parsers.expat.ExpatError, msg:
617
 
#        print 'XML Error: %s' % msg.value
618
 
#        sys.exit (1)
619
 
#    except IOError:
620
 
#        print 'XML "%s" file not found' % xmlFileName
621
 
#        sys.exit (1)