diff options
author | Jiri Moskovcak <jmoskovc@redhat.com> | 2010-08-30 13:18:02 +0200 |
---|---|---|
committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2010-08-30 13:18:02 +0200 |
commit | d9aba0749270335afe43e23f984e6930893023f6 (patch) | |
tree | 7f493f6e68c63e6cc1673b38280bc429eae63266 /tests | |
parent | 5e160fa0532e2a8f61e1e60914ff67af0a0eb427 (diff) | |
download | abrt-d9aba0749270335afe43e23f984e6930893023f6.tar.gz abrt-d9aba0749270335afe43e23f984e6930893023f6.tar.xz abrt-d9aba0749270335afe43e23f984e6930893023f6.zip |
added test suite
Diffstat (limited to 'tests')
-rw-r--r-- | tests/abrt_test.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/abrt_test.py b/tests/abrt_test.py new file mode 100644 index 00000000..e6680228 --- /dev/null +++ b/tests/abrt_test.py @@ -0,0 +1,123 @@ +import unittest +import sys +import rpm +from subprocess import Popen, PIPE +import os +import gobject + +PROGNAME = "abrt_test" + +sys.path.append("../src/gui") +import CCDBusBackend + +def info_msg(fmt, *args): + sys.stdout.write("%s: %s\n" % (PROGNAME, fmt % args)) + +def log1(message): + pass + + +CRASH = "crash" +TIMEOUT = "timeout" + +# prevent creating daemon twice +# otherwise we get can't create signal.. +daemon = None +def get_daemon(): + global daemon + if not daemon: + daemon = CCDBusBackend.DBusManager() + return daemon + +class TestCrash(unittest.TestCase): + def setUp(self): + #Test.__init__(self) + #print "setUp TestCrash" + self.daemon = get_daemon() + self.package_nvr = None + self.timeout = None + self.result = None + self.timeout = None + self.loop = gobject.MainLoop() + self.crash_signal = self.daemon.connect("crash", self.on_crash) + + + def get_package(self, filename): + ts = rpm.TransactionSet() + mi = ts.dbMatch(rpm.RPMTAG_BASENAMES, filename) + for h in mi: + package = h['nvr'] + log1("Killing %s from package %s" % (filename, package)) + return package + + def on_timeout(self, test, critical): + #info_msg("Test has timed out") + if critical: + #info_msg("[ FAILED ]") + self.result = TIMEOUT + self.loop.quit() + + def on_crash(self, daemon, crashed_package_nvr, uuid, uid): + if self.timeout: + #print "removing source id: %i" % self.timeout + gobject.source_remove(self.timeout) + + log1("got crash signal") + self.loop.quit() + self.assertEqual(self.package_nvr, crashed_package_nvr, + "expected: %s, got: %s" % (crashed_package_nvr, self.package_nvr)) + self.result = CRASH + +class TestCompiled(TestCrash): + #def __init__(self): + #TestCrash.__init__(self) + + def setUp(self): + #info_msg("C/C++ crash detection") + TestCrash.setUp(self) + + def kill_sleep(self): + # kill runs sleep 100 and sends a SEGV to it" + self.timeout = gobject.timeout_add(5000, self.on_timeout, "c/c++", True) + app_to_kill = "/bin/sleep" + self.package_nvr = self.get_package(app_to_kill) + pid = Popen([app_to_kill,"100"], stdout=PIPE, bufsize=-1).pid + os.kill(pid, 11) + return False + + def test_c_cpp_crash(self): + gobject.timeout_add(5, self.kill_sleep) + self.loop.run() + self.assertEqual(self.result, CRASH, "expected: %s, got: %s" % (CRASH, self.result)) + + def test_timeout_on_repeat(self): + #info_msg("testing repeated crash - should timedout") + gobject.timeout_add(5, self.kill_sleep) + self.loop.run() + self.assertEqual(self.result, TIMEOUT, "expected: %s, got: %s" % (TIMEOUT, self.result)) + + #def runTest(self): + # info_msg("Testing C/C++") + + def tearDown(self): + self.daemon.disconnect(self.crash_signal) + +class TestPython(TestCrash): + def test_catch_exception(self): + pass + + def test_pyhook(self): + # TODO: how to test the hook with default config? + # we need broken signed package... + pass + +if __name__ == "__main__": + try: + # finds every instance of class TestCompiled and run every method + # called test_* + suite = unittest.TestLoader().loadTestsFromTestCase(TestCompiled) + unittest.TextTestRunner(verbosity=2).run(suite) + suite = unittest.TestLoader().loadTestsFromTestCase(TestPython) + unittest.TextTestRunner(verbosity=2).run(suite) + except KeyboardInterrupt: + sys.exit() |