|
Packit |
8ea169 |
#!/usr/bin/env python3
|
|
Packit |
8ea169 |
import os
|
|
Packit |
8ea169 |
import sys
|
|
Packit |
8ea169 |
import time
|
|
Packit |
8ea169 |
import logging
|
|
Packit |
8ea169 |
import datetime
|
|
Packit |
8ea169 |
import unittest
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
sys.path.insert(0, os.path.abspath(".."))
|
|
Packit |
8ea169 |
sys.path.insert(0, os.path.abspath("../problem/.libs")) # because of _pyabrt
|
|
Packit |
8ea169 |
os.environ["PATH"] = "{0}:{1}".format(os.path.abspath(".."), os.environ["PATH"])
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
from nose import tools
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
from base import ProblematicTestCase
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
import problem
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
class ProblemAPITestCase(ProblematicTestCase):
|
|
Packit |
8ea169 |
def test_init(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(prob.type, problem.RUNTIME)
|
|
Packit |
8ea169 |
tools.eq_(prob.analyzer, problem.RUNTIME)
|
|
Packit |
8ea169 |
tools.eq_(prob.reason, 'Front fell off')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_add_current_process_data(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
tools.eq_(prob.pid, os.getpid())
|
|
Packit |
8ea169 |
tools.eq_(prob.gid, os.getgid())
|
|
Packit |
8ea169 |
tools.ok_(
|
|
Packit |
8ea169 |
'<stdin>' in prob.executable or
|
|
Packit |
8ea169 |
'tests.py' in prob.executable or
|
|
Packit |
8ea169 |
'test_api.py' in prob.executable or
|
|
Packit |
8ea169 |
'nosetest' in prob.executable)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_getattr(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(prob.reason, 'Front fell off')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, lambda: prob.non_existent)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'test', 'wat')
|
|
Packit |
8ea169 |
tools.eq_(prob.test, 'wat')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, lambda: prob.persisted_non_existent)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_getattr_on_deleted(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
del prob.executable
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, getattr, prob, 'executable')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_getattr_on_persisted(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'test', 1)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(prob.test, 1)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_getitem(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(prob['reason'], 'Front fell off')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(KeyError, lambda: prob['non_existent'])
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'test', 'wat')
|
|
Packit |
8ea169 |
tools.eq_(prob['test'], 'wat')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(KeyError, lambda: prob['persisted_non_existent'])
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_setattr(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.test = 'x'
|
|
Packit |
8ea169 |
tools.eq_(prob.test, 'x')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob._test = 'y'
|
|
Packit |
8ea169 |
tools.eq_(prob._test, 'y')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'test'), 'x')
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, '_test'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_setattr_on_persisted(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'test', 'wat')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.test = '14'
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'test'), '14')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_setitem(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob['test'] = 'x'
|
|
Packit |
8ea169 |
tools.eq_(prob.test, 'x')
|
|
Packit |
8ea169 |
tools.eq_(prob['test'], 'x')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob['_test'] = 'y'
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'test'), 'x')
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, '_test'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_delattr(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
del prob.reason
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, lambda: prob.reason)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, lambda: prob.non_existant)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'reason'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
del prob.type
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'type'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_delattr_on_persisted(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'test', 'wat')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
del prob.test
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def raising_delete():
|
|
Packit |
8ea169 |
del prob.test
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(AttributeError, raising_delete)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'test'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_delitem(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
del prob['reason']
|
|
Packit |
8ea169 |
self.assertRaises(KeyError, lambda: prob['reason'])
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def raising_delete():
|
|
Packit |
8ea169 |
del prob['non_existent']
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(KeyError, raising_delete)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'reason'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
del prob['type']
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'type'), None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_int_cast(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
prob['mynumerical'] = 15
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'mynumerical'), '15')
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'numerical', '123')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(prob.numerical, 123)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_time_cast(self):
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
if type(self.proxy) == problem.proxies.DBusProxy:
|
|
Packit |
8ea169 |
# set_item time is not allowed by the daemon
|
|
Packit |
8ea169 |
return unittest.skip('Skipping time cast test on DBusProxy')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
saved_time = int(time.time())
|
|
Packit |
8ea169 |
self.proxy.set_item(ident, 'time', str(saved_time))
|
|
Packit |
8ea169 |
cast_time = prob.time
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(cast_time, datetime.datetime.fromtimestamp(int(saved_time)))
|
|
Packit |
8ea169 |
tools.eq_(type(cast_time), datetime.datetime)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.time += datetime.timedelta(days=3)
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
updated_time = self.proxy.get_item(ident, 'time')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.ok_(type(updated_time), str)
|
|
Packit |
8ea169 |
tools.ok_(updated_time != saved_time)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_add_current_environment(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.add_current_environment()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
for key, value in os.environ.items():
|
|
Packit |
8ea169 |
tools.ok_('{0}={1}'.format(key, value) in prob.environ)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_save_delete(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
path = prob.save()
|
|
Packit |
8ea169 |
tools.ok_('runtime-' in path)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_repr(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
ret = repr(prob)
|
|
Packit |
8ea169 |
tools.ok_('problem.Runtime' in ret)
|
|
Packit |
8ea169 |
tools.ok_('(Front fell off)' in ret)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_items(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
for key, value in prob.items():
|
|
Packit |
8ea169 |
tools.eq_(prob[key], value)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_validate(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
prob.validate()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
del prob.executable
|
|
Packit |
8ea169 |
self.assertRaises(problem.exception.ValidationError, prob.validate)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_invalidproblem(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
time.sleep(2)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
self.assertRaises(problem.exception.InvalidProblem, self.proxy.get_item,ident, 'reason')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_save(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'type'), problem.RUNTIME)
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'analyzer'), problem.RUNTIME)
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'reason'), 'Front fell off')
|
|
Packit |
8ea169 |
tools.ok_(self.proxy.get_item(ident, 'pid') is not None)
|
|
Packit |
8ea169 |
tools.ok_(self.proxy.get_item(ident, 'gid') is not None)
|
|
Packit |
8ea169 |
tools.ok_(self.proxy.get_item(ident, 'executable') is not None)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_dirty_save(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.executable = 'nine'
|
|
Packit |
8ea169 |
prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.eq_(self.proxy.get_item(ident, 'executable'), 'nine')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_delete(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.ok_(ident in self.proxy.list())
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.ok_(ident not in self.proxy.list())
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_delete_then_save(self):
|
|
Packit |
8ea169 |
prob = self.create_problem()
|
|
Packit |
8ea169 |
prob.add_current_process_data()
|
|
Packit |
8ea169 |
ident = prob.save()
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
ident2 = prob.save()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
tools.ok_(ident != ident2)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
prob.delete()
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
def test_problem_types(self):
|
|
Packit |
8ea169 |
for ptype, internal in problem.PROBLEM_TYPES.items():
|
|
Packit |
8ea169 |
class_name = ptype.lower().capitalize()
|
|
Packit |
8ea169 |
prinstance = getattr(problem, class_name)('Front fell off')
|
|
Packit |
8ea169 |
tools.eq_(prinstance.type, internal)
|
|
Packit |
8ea169 |
tools.eq_(prinstance.analyzer, internal)
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
unpr = problem.Unknown('Front not found')
|
|
Packit |
8ea169 |
tools.eq_(unpr.type, 'libreport')
|
|
Packit |
8ea169 |
|
|
Packit |
8ea169 |
if __name__ == '__main__':
|
|
Packit |
8ea169 |
logging.basicConfig(level=logging.DEBUG)
|
|
Packit |
8ea169 |
unittest.main()
|