[Lldb-commits] [lldb] r154847 - in /lldb/trunk: examples/test/.lldb-pre-post-flight examples/test/.lldb-pre-post-flight.bad examples/test/usage-pre-post-flight test/dotest.py test/lldbtest.py

Johnny Chen johnny.chen at apple.com
Mon Apr 16 11:55:15 PDT 2012


Author: johnny
Date: Mon Apr 16 13:55:15 2012
New Revision: 154847

URL: http://llvm.org/viewvc/llvm-project?rev=154847&view=rev
Log:
Add the capability of supplying the pre/post-flight functions to the test suite such that
the pre-flight code gets executed during setUp() after the debugger instance is available
and the post-flight code gets executed during tearDown() after the debugger instance has
done killing the inferior and deleting all the target programs.

Example:

[11:32:48] johnny:/Volumes/data/lldb/svn/ToT/test $ ./dotest.py -A x86_64 -v -c ../examples/test/.lldb-pre-post-flight  functionalities/watchpoint/hello_watchpoint
config: {'pre_flight': <function pre_flight at 0x1098541b8>, 'post_flight': <function post_flight at 0x109854230>}
LLDB build dir: /Volumes/data/lldb/svn/ToT/build/Debug
LLDB-139
Path: /Volumes/data/lldb/svn/ToT
URL: https://johnny@llvm.org/svn/llvm-project/lldb/trunk
Repository Root: https://johnny@llvm.org/svn/llvm-project
Repository UUID: 91177308-0d34-0410-b5e6-96231b3b80d8
Revision: 154753
Node Kind: directory
Schedule: normal
Last Changed Author: gclayton
Last Changed Rev: 154730
Last Changed Date: 2012-04-13 18:42:46 -0700 (Fri, 13 Apr 2012)


lldb.pre_flight: def pre_flight(test):
    __import__("lldb")
    __import__("lldbtest")
    print "\nRunning pre-flight function:"
    print "for test case:", test

lldb.post_flight: def post_flight(test):
    __import__("lldb")
    __import__("lldbtest")
    print "\nRunning post-flight function:"
    print "for test case:", test


Session logs for test failures/errors/unexpected successes will go into directory '2012-04-16-11_34_08'
Command invoked: python ./dotest.py -A x86_64 -v -c ../examples/test/.lldb-pre-post-flight functionalities/watchpoint/hello_watchpoint
compilers=['clang']

Configuration: arch=x86_64 compiler=clang
----------------------------------------------------------------------
Collected 2 tests

1: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
   Test a simple sequence of watchpoint creation and watchpoint hit. ... 
Running pre-flight function:
for test case: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)

Running post-flight function:
for test case: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
ok
2: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
   Test a simple sequence of watchpoint creation and watchpoint hit. ... 
Running pre-flight function:
for test case: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)

Running post-flight function:
for test case: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
ok

----------------------------------------------------------------------
Ran 2 tests in 1.584s

OK

Added:
    lldb/trunk/examples/test/.lldb-pre-post-flight
    lldb/trunk/examples/test/.lldb-pre-post-flight.bad
    lldb/trunk/examples/test/usage-pre-post-flight
Modified:
    lldb/trunk/test/dotest.py
    lldb/trunk/test/lldbtest.py

Added: lldb/trunk/examples/test/.lldb-pre-post-flight
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/test/.lldb-pre-post-flight?rev=154847&view=auto
==============================================================================
--- lldb/trunk/examples/test/.lldb-pre-post-flight (added)
+++ lldb/trunk/examples/test/.lldb-pre-post-flight Mon Apr 16 13:55:15 2012
@@ -0,0 +1,12 @@
+def pre_flight(test):
+    __import__("lldb")
+    __import__("lldbtest")
+    print "\nRunning pre-flight function:"
+    print "for test case:", test
+
+def post_flight(test):
+    __import__("lldb")
+    __import__("lldbtest")
+    print "\nRunning post-flight function:"
+    print "for test case:", test
+

Added: lldb/trunk/examples/test/.lldb-pre-post-flight.bad
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/test/.lldb-pre-post-flight.bad?rev=154847&view=auto
==============================================================================
--- lldb/trunk/examples/test/.lldb-pre-post-flight.bad (added)
+++ lldb/trunk/examples/test/.lldb-pre-post-flight.bad Mon Apr 16 13:55:15 2012
@@ -0,0 +1,8 @@
+pre_flight = "I am not callable"
+
+def post_flight(test):
+    __import__("lldb")
+    __import__("lldbtest")
+    print "\nRunning post-flight function:"
+    print "for test case:", test
+

Added: lldb/trunk/examples/test/usage-pre-post-flight
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/test/usage-pre-post-flight?rev=154847&view=auto
==============================================================================
--- lldb/trunk/examples/test/usage-pre-post-flight (added)
+++ lldb/trunk/examples/test/usage-pre-post-flight Mon Apr 16 13:55:15 2012
@@ -0,0 +1,65 @@
+#
+# The following examples first show a bad pre/post flight config file followed by a good pre/post config file.
+#
+
+[11:31:19] johnny:/Volumes/data/lldb/svn/ToT/test $ ./dotest.py -A x86_64 -v -c ../examples/test/.lldb-pre-post-flight.bad  functionalities/watchpoint/hello_watchpoint
+config: {'pre_flight': 'I am not callable', 'post_flight': <function post_flight at 0x1071871b8>}
+fatal error: pre_flight is not callable, exiting.
+[11:32:48] johnny:/Volumes/data/lldb/svn/ToT/test $ ./dotest.py -A x86_64 -v -c ../examples/test/.lldb-pre-post-flight  functionalities/watchpoint/hello_watchpoint
+config: {'pre_flight': <function pre_flight at 0x1098541b8>, 'post_flight': <function post_flight at 0x109854230>}
+LLDB build dir: /Volumes/data/lldb/svn/ToT/build/Debug
+LLDB-139
+Path: /Volumes/data/lldb/svn/ToT
+URL: https://johnny@llvm.org/svn/llvm-project/lldb/trunk
+Repository Root: https://johnny@llvm.org/svn/llvm-project
+Repository UUID: 91177308-0d34-0410-b5e6-96231b3b80d8
+Revision: 154753
+Node Kind: directory
+Schedule: normal
+Last Changed Author: gclayton
+Last Changed Rev: 154730
+Last Changed Date: 2012-04-13 18:42:46 -0700 (Fri, 13 Apr 2012)
+
+
+lldb.pre_flight: def pre_flight(test):
+    __import__("lldb")
+    __import__("lldbtest")
+    print "\nRunning pre-flight function:"
+    print "for test case:", test
+
+lldb.post_flight: def post_flight(test):
+    __import__("lldb")
+    __import__("lldbtest")
+    print "\nRunning post-flight function:"
+    print "for test case:", test
+
+
+Session logs for test failures/errors/unexpected successes will go into directory '2012-04-16-11_34_08'
+Command invoked: python ./dotest.py -A x86_64 -v -c ../examples/test/.lldb-pre-post-flight functionalities/watchpoint/hello_watchpoint
+compilers=['clang']
+
+Configuration: arch=x86_64 compiler=clang
+----------------------------------------------------------------------
+Collected 2 tests
+
+1: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+   Test a simple sequence of watchpoint creation and watchpoint hit. ... 
+Running pre-flight function:
+for test case: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+
+Running post-flight function:
+for test case: test_hello_watchpoint_with_dsym_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+ok
+2: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+   Test a simple sequence of watchpoint creation and watchpoint hit. ... 
+Running pre-flight function:
+for test case: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+
+Running post-flight function:
+for test case: test_hello_watchpoint_with_dwarf_using_watchpoint_set (TestMyFirstWatchpoint.HelloWatchpointTestCase)
+ok
+
+----------------------------------------------------------------------
+Ran 2 tests in 1.584s
+
+OK
\ No newline at end of file

Modified: lldb/trunk/test/dotest.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/dotest.py?rev=154847&r1=154846&r2=154847&view=diff
==============================================================================
--- lldb/trunk/test/dotest.py (original)
+++ lldb/trunk/test/dotest.py Mon Apr 16 13:55:15 2012
@@ -96,6 +96,9 @@
 
 # The dictionary as a result of sourcing configFile.
 config = {}
+# The pre_flight and post_flight functions come from reading a config file.
+pre_flight = None
+post_flight = None
 
 # The 'archs' and 'compilers' can be specified via either command line or configFile,
 # with the command line overriding the configFile.  When specified, they should be
@@ -660,11 +663,21 @@
     # respectively.
     #
     # See also lldb-trunk/example/test/usage-config.
-    global config
+    global config, pre_flight, post_flight
     if configFile:
         # Pass config (a dictionary) as the locals namespace for side-effect.
         execfile(configFile, globals(), config)
-        #print "config:", config
+        print "config:", config
+        if "pre_flight" in config:
+            pre_flight = config["pre_flight"]
+            if not callable(pre_flight):
+                print "fatal error: pre_flight is not callable, exiting."
+                sys.exit(1)
+        if "post_flight" in config:
+            post_flight = config["post_flight"]
+            if not callable(post_flight):
+                print "fatal error: post_flight is not callable, exiting."
+                sys.exit(1)
         #print "sys.stderr:", sys.stderr
         #print "sys.stdout:", sys.stdout
 
@@ -1021,6 +1034,23 @@
 # Put the blacklist in the lldb namespace, to be used by lldb.TestBase.
 lldb.blacklist = blacklist
 
+# The pre_flight and post_flight come from reading a config file.
+lldb.pre_flight = pre_flight
+lldb.post_flight = post_flight
+def getsource_if_available(obj):
+    """
+    Return the text of the source code for an object if available.  Otherwise,
+    a print representation is returned.
+    """
+    import inspect
+    try:
+        return inspect.getsource(obj)
+    except:
+        return repr(obj)
+
+print "lldb.pre_flight:", getsource_if_available(lldb.pre_flight)
+print "lldb.post_flight:", getsource_if_available(lldb.post_flight)
+
 # Put all these test decorators in the lldb namespace.
 lldb.dont_do_python_api_test = dont_do_python_api_test
 lldb.just_do_python_api_test = just_do_python_api_test

Modified: lldb/trunk/test/lldbtest.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbtest.py?rev=154847&r1=154846&r2=154847&view=diff
==============================================================================
--- lldb/trunk/test/lldbtest.py (original)
+++ lldb/trunk/test/lldbtest.py Mon Apr 16 13:55:15 2012
@@ -1058,6 +1058,10 @@
         # And the result object.
         self.res = lldb.SBCommandReturnObject()
 
+        # Run global pre-flight code, if defined via the config file.
+        if lldb.pre_flight:
+            lldb.pre_flight(self)
+
     def tearDown(self):
         #import traceback
         #traceback.print_stack()
@@ -1079,6 +1083,10 @@
         for target in targets:
             self.dbg.DeleteTarget(target)
 
+        # Run global post-flight code, if defined via the config file.
+        if lldb.post_flight:
+            lldb.post_flight(self)
+
         del self.dbg
 
     def switch_to_thread_with_stop_reason(self, stop_reason):





More information about the lldb-commits mailing list