Blame src/python-problem/tests/test_api.py

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()