[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