uiaccelerator_plat/alf_extended_visual_api/tsrc/group/sis/client.py
branchRCL_3
changeset 10 7c5dd702d6d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_extended_visual_api/tsrc/group/sis/client.py	Tue May 11 17:03:00 2010 +0300
@@ -0,0 +1,130 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#client for coverage testing
+
+import getopt
+import time,os,sys,re
+from socket import *
+from StringIO import *
+host = "localhost"
+port = 3555
+build_command = "bldmake bldfiles & abld build winscw udeb"
+unittest_build_command = "bldmake bldfiles & abld build winscw udeb & ..\\..\\Group\\bldmake bldfiles & ..\\..\\Group\\abld test build winscw udeb"
+clean_command = "abld reallyclean"
+copy_command = "copy Z:\\epoc32\\release\\winscw\\udeb\\UT_*.dll Z:\\epoc32\\release\\winscw\\udeb\\Z\\sys\\bin\\ & copy Z:\\epoc32\\release\\winscw\\udeb\\MT_*.dll Z:\\epoc32\\release\\winscw\\udeb\\Z\\sys\\bin\\"
+
+def buildProfiledBinaries(aPath,aBuildCommand,aIdbName):
+    os.chdir(aPath)
+    os.putenv("CODETEST_LIB","NTmvc_TargetLibMD.lib ctsymbiannativemem.lib")
+    os.putenv("CTDRIVER_ARGS","-CTsize_t=unsigned -CTtag-allocator -CTv -CTno-tag-includes -CTtag-level=SC -CTidb=" + aIdbName)
+    os.system(clean_command)
+    os.system(aBuildCommand)
+    os.putenv("CODETEST_LIB","") # put env vars back
+    os.putenv("CTDRIVER_ARGS","")
+
+def buildModuleTests(aPath,aBuildCommand):
+    os.chdir(aPath)
+    os.system(aBuildCommand)
+    os.system(copy_command)
+    
+def startProfiling(aFullIdbName, aExecutable):
+    s = socket(AF_INET, SOCK_STREAM)
+    s.connect((host,port))
+    s.send(aFullIdbName + "," + aExecutable)
+    data = s.recv(8192)
+    s.close()
+    return data
+
+def parseAndWriteReport(aData, aReportLocation):
+    filename = None
+    date = None
+    covered = None
+    not_covered = None
+    s = StringIO(aData)
+    
+    for line in s:
+        idb_match = re.match(r"^\s+(?P<filename>.*\.idb$)", line)
+        time_match = re.match(r"^\s+\w+-\w+\s+(?P<day_name>\w+)\s+(?P<month_name>\w+)\s+(?P<day_number>\d+)\s+(?P<time>\d+:\d+:\d+)\s+(?P<year>\d+$)", line)
+        covered_match = re.match(r"^\s+\d+\s+(?P<coverage>\d+\.\d+)%\s+covered$", line)
+        if idb_match is not None:
+            filename = idb_match.group('filename')
+        if time_match is not None:            
+            date = time_match.group('day_number') + "-" + time_match.group('month_name') + "-" + time_match.group('year') + "-" + time_match.group('time').replace(":","")
+        if covered_match is not None:
+            covered = covered_match.group('coverage')
+            not_covered = 100 - float(covered)
+        if filename is not None and date is not None and covered is not None:
+            break            
+    s.close()    
+    # write report to location
+    print filename
+    print date
+    print covered
+    
+    
+def cleanSystem(aComponentPath,aCleanCommand):
+    os.chdir(aComponentPath)
+    os.system(aCleanCommand)
+    
+def main():
+    try:    
+        opts, args = getopt.getopt(sys.argv[1:], 'b:i:e:u:r:', ['binary-buildpath=','idb-name=','executable=','unittest-buildpath=', 'report-location='])
+        binary_buildpath = None
+        idb_name = None
+        executable = None
+        unittest_buildpath = None
+        report_location = None
+        p = re.compile(r'/$')
+        
+        for o, a in opts:
+            if o in ("-b", "--binary-buildpath"):
+                binary_buildpath = a.replace("\\", "/")
+                binary_buildpath = p.sub('', binary_buildpath)
+            if o in ("-i", "--idb-name"):
+                idb_name = a
+            if o in ("-e", "--executable"):
+                executable = a.replace("\\", "/")
+            if o in ("-u", "--unittest-buildpath"):
+                unittest_buildpath = a.replace("\\", "/")
+                unittest_buildpath = p.sub('', unittest_buildpath)
+            if o in ("-r", "--report-location"):
+                report_location = a.replace("\\", "/")
+                report_location = p.sub('', report_location)
+                
+        if (binary_buildpath is None) or (idb_name is None) or (executable is None) or (unittest_buildpath is None) or (report_location is None):
+            usage()
+            sys.exit(1)
+        else:
+            buildProfiledBinaries(binary_buildpath, build_command, idb_name)
+            buildModuleTests(unittest_buildpath, unittest_build_command)
+            report = startProfiling(binary_buildpath + "/" + idb_name, executable)
+            parseAndWriteReport(report,report_location)
+            cleanSystem(binary_buildpath, clean_command)
+            cleanSystem(unittest_buildpath, clean_command)
+            
+    except getopt.GetoptError:
+        usage()
+        sys.exit(2)
+      
+def usage():
+    print "Usage: <script> -b[--binary-buildpath=] binary build path, e.g. x:/s60/mw/project/group\n"
+    print "                -i[--idb-name=] idb name for profiled source, e.g. project1.idb\n"
+    print "                -e[--executable=] name of the executeable that should be run for profiled code, e.g. \"x:/epoc32/.../exerunner -arg1 -arg2\"\n"
+    print "                -u[--unittest-buildpath=] path for unit tests to be build"
+    print "                -r[--report-location=] report location, e.g. x:/s60/mw/somecomponent/reports"
+    print " -b x:/.../group -i project.idb -e \"x:/..../exerunner.exe -arg1 -arg2\" -u x:/.../test/group -r x:/reports/component.txt"
+    
+main()
\ No newline at end of file