[rhmessaging-commits] rhmessaging commits: r1675 - in mgmt/cumin: python/cumin and 1 other directory.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Mon Feb 11 09:15:30 EST 2008


Author: justi9
Date: 2008-02-11 09:15:30 -0500 (Mon, 11 Feb 2008)
New Revision: 1675

Modified:
   mgmt/cumin/bin/cumin-test
   mgmt/cumin/python/cumin/test.py
Log:
Adds a number of tests.

Improves test result reporting.



Modified: mgmt/cumin/bin/cumin-test
===================================================================
--- mgmt/cumin/bin/cumin-test	2008-02-11 14:14:08 UTC (rev 1674)
+++ mgmt/cumin/bin/cumin-test	2008-02-11 14:15:30 UTC (rev 1675)
@@ -39,10 +39,7 @@
     env = TestEnvironment(app, broker_host, broker_port)
     env.init();
 
-    main = MainTest(env)
-
-    session = TestSession(env)
-    main.run(session)
+    session = env.run_test(MainTest(env))
     session.report(sys.stdout)
 
 def main():

Modified: mgmt/cumin/python/cumin/test.py
===================================================================
--- mgmt/cumin/python/cumin/test.py	2008-02-11 14:14:08 UTC (rev 1674)
+++ mgmt/cumin/python/cumin/test.py	2008-02-11 14:15:30 UTC (rev 1675)
@@ -1,9 +1,8 @@
 import sys, os
 from mint import *
-from traceback import print_exc
+from traceback import print_exc, extract_tb
 from datetime import datetime
-from wooly import Session
-import qpid, quirk
+import qpid, quirk, wooly
 
 from cumin import Cumin
 from util import *
@@ -35,59 +34,90 @@
         finally:
             session.close()
 
+    def run_test(self, test):
+        session = TestSession(self)
+        test.run(session)
+        return session
+
+    def page_and_session(self, page=None):
+        if page is None:
+            page = self.app.main_page
+
+        s = wooly.Session(self.app)
+        s.set_page(page)
+
+        return page, s
+
 class TestSession(object):
     def __init__(self, env):
         self.env = env
+        self.id = datetime.now().strftime("test-%Y-%m-%d-%H-%M-%S")
 
-        self.successes = list()
-        self.failures = list()
+        self.stack = list()
+        self.passed = list()
+        self.failed = list()
 
-    def add_success(self, test, message, exception):
-        result = TestResult(test, message, exception)
-        self.successes.append(result)
+    def report(self, out):
+        out.write("Tests:")
+        out.write(os.linesep)
 
-    def add_failure(self, test, message, exception):
-        if exception:
-            print_exc()
+        self.stack[0].report(sys.stdout, 1)
 
-        result = TestResult(test, message, exception)
-        self.failures.append(result)
+        out.write("Failures:")
+        out.write(os.linesep)
 
-    def report(self, out):
-        out.write("Succcesses (%i)\n" % len(self.successes))
+        if self.failed:
+            for call in self.failed:
+                out.write("  %s: %s" % \
+                              (call.test.path(), call.exception.message))
+                out.write(os.linesep)
 
-        for success in self.successes:
-            out.write("    %s\n" % success)
+                for spec in extract_tb(call.traceback):
+                    file, line, func, text = spec
+                    out.write("    File \"%s\", line %i, in %s" % spec[:3])
+                    out.write(os.linesep)
+                    out.write("      %s" % spec[3])
+                    out.write(os.linesep)
+        else:
+            out.write("  None")
+            out.write(os.linesep)
 
-        out.write("Failures (%i)\n" % len(self.failures))
+        out.write("Summary:")
+        out.write(os.linesep)
 
-        for failure in self.failures:
-            out.write("    %s\n" % failure)
+        passed, failed = len(self.passed), len(self.failed)
+        out.write("  %i passed, %i failed" % (passed, failed))
+        out.write(os.linesep)
 
-class TestResult(object):
-    def __init__(self, test, message, exception):
-        self.test = test
-        self.message = message
-        self.exception = exception
-
-    def __repr__(self):
-        return "%s: %s" % (self.test, self.message)
-
 class Test(object):
     def __init__(self, env, parent):
         self.env = env
+        self.name = self.__class__.__name__
         self.parent = parent
         self.children = list()
-
+        
         if parent:
             self.parent.children.append(self)
 
+    def path(self):
+        if self.parent is None:
+            return self.name
+        else:
+            return self.parent.path() + "/" + self.name
+
     def run(self, session):
+        call = TestCall(session, self)
+        call.open()
         try:
-            self.do_run(session)
-            session.add_success(self, "OK", None)
-        except Exception, e:
-            session.add_failure(self, e.message, e)
+            try:
+                self.do_run(session)
+                session.passed.append(call)
+            except Exception, e:
+                call.exception = e
+                call.traceback = sys.exc_info()[2]
+                session.failed.append(call)
+        finally:
+            call.close()
 
     def do_run(self, session):
         self.run_children(session)
@@ -99,59 +129,173 @@
     def __repr__(self):
         return self.__class__.__name__
 
+class TestCall(object):
+    def __init__(self, session, test):
+        self.session = session
+        self.test = test
+        self.exception = None
+        self.traceback = None
+
+        self.caller = None
+        self.callees = list()
+
+        self.start = None
+        self.end = None
+
+    def open(self):
+        if self.session.stack:
+            self.caller = self.session.stack[-1]
+            self.caller.callees.append(self)
+
+        self.session.stack.append(self)
+
+        self.start = time.clock()
+
+    def close(self):
+        self.end = time.clock()
+
+        if len(self.session.stack) > 1:
+            self.session.stack.pop()
+
+    def report(self, writer, depth):
+        entry = ("  " * depth) + str(self.test)
+        status = self.exception and self.exception.message or "-"
+
+        writer.write("%-40s %s" % (entry, status))
+        writer.write(os.linesep)
+
+        for call in self.callees:
+            call.report(writer, depth + 1)
+
 class MainTest(Test):
     def __init__(self, env):
         super(MainTest, self).__init__(env, None)
 
         BrokerRegistrationTest(env, self)
+        BrokerGroupTest(env, self)
 
 class BrokerRegistrationTest(Test):
     def __init__(self, env, parent):
         super(BrokerRegistrationTest, self).__init__(env, parent)
 
         BrokerTest(env, self)
+        self.AddToGroup(env, self)
+        self.Remove(env, self)
 
     def do_run(self, session):
-        app = self.env.app
-        page = app.main_page
+        p, s = self.env.page_and_session()
 
-        s = Session(app)
-        s.set_page(page)
+        form = p.show_main(s).show_brokers_add(s)
 
-        # navigate from ui top to broker set add
-
-        form = page.show_main(s).show_brokers_add(s)
-
-        name = "test-" + datetime.now().strftime("%Y-%m-%d-%H-%M")
-
-        form.names.get(s).append(name)
+        form.names.get(s).append(session.id)
         addr = "%s:%s" % \
             (self.env.broker_client.host, self.env.broker_client.port)
         form.addrs.get(s).append(addr)
         form.groups.get(s).append(None)
         form.submit.set(s, True)
  
-        page.process(s, None)
+        p.process(s, None)
 
-        redirect = page.get_redirect_url(s)
+        redirect = p.get_redirect_url(s)
 
         if redirect:
-            s = Session(app)
+            p, s = self.env.page_and_session()
             s.unmarshal(redirect)
+        else:
+            raise Exception("Expected redirect")
 
-        page.process(s, None)
+        p.process(s, None)
+        p.render(s, None)
 
-        html = page.render(s, None)
+        self.env.broker_registration = BrokerRegistration.selectBy \
+            (name=session.id)[0]
 
-        #file = open("BrokerTest.%s.html" % name, "w")
-        #file.write(html)
-        #file.close()
+        self.run_children(session)
 
-        self.env.broker_registration = BrokerRegistration.selectBy \
-            (name=name)[0]
+    class AddToGroup(Test):
+        def do_run(self, session):
+            group = BrokerGroup(name="test-group")
+            group.sync()
 
+            p, s = self.env.page_and_session()
+
+            raise Exception("Not implemented")
+
+    class Remove(Test):
+        def do_run(self, session):
+            raise Exception("Not implemented")
+
+class BrokerGroupTest(Test):
+    def __init__(self, env, parent):
+        super(BrokerGroupTest, self).__init__(env, parent)
+
+        self.Edit(env, self)
+        self.Remove(env, self)
+
+    def do_run(self, session):
+        p, s = self.env.page_and_session()
+
+        form = p.show_main(s).show_broker_group(s, None).show_add(s)
+        form.group_name.set(s, session.id)
+        form.submit.set(s, True)
+
+        p.process(s, None)
+        
+        redirect = p.get_redirect_url(s)
+
+        if redirect:
+            p, s = self.env.page_and_session()
+            s.unmarshal(redirect)
+        else:
+            raise Exception("Expected redirect")
+
+        p.process(s, None)
+        p.render(s, None)
+
+        try:
+            self.env.broker_group = BrokerGroup.selectBy(name=session.id)[0]
+        except IndexError:
+            raise Exception("Broker group not found")
+
         self.run_children(session)
 
+    class Edit(Test):
+        def do_run(self, session):
+            p, s = self.env.page_and_session()
+            group = self.env.broker_group
+
+            form = p.show_main(s).show_broker_group(s, group).show_edit(s)
+            form.group_name.set(s, session.id + "%;&#\\")
+            form.submit.set(s, True)
+
+            p.process(s, None)
+            
+            redirect = p.get_redirect_url(s)
+            
+            if redirect:
+                p, s = self.env.page_and_session()
+                s.unmarshal(redirect)
+            else:
+                raise Exception("Expected redirect")
+
+    class Remove(Test):
+        def do_run(self, session):
+            p, s = self.env.page_and_session()
+            group = self.env.broker_group
+
+            form = p.show_main(s).show_broker_group(s, group).show_remove(s)
+            form.submit.set(s, True)
+
+            p.process(s, None)
+
+            redirect = p.get_redirect_url(s)
+
+            if redirect:
+                p, s = self.env.page_and_session()
+                s.unmarshal(redirect)
+            else:
+                raise Exception("Expected redirect")
+
 class BrokerTest(Test):
     def __init__(self, env, parent):
         super(BrokerTest, self).__init__(env, parent)
@@ -216,6 +360,8 @@
 
 class ClientTest(Test):
     def do_run(self, session):
+        raise Exception("Not implemented")
+
         vhost = self.env.vhost
         address = self.env.broker_client.host + ":" + \
             str(self.env.broker_client.port)




More information about the rhmessaging-commits mailing list