Blame src/cli-ng/tests/test_match.py

Packit Service 8a8a03
#!/usr/bin/python3
Packit Service 8a8a03
# -*- encoding: utf-8 -*-
Packit Service 8a8a03
import logging
Packit Service 8a8a03
try:
Packit Service 8a8a03
    import unittest2 as unittest
Packit Service 8a8a03
except ImportError:
Packit Service 8a8a03
    import unittest
Packit Service 8a8a03
Packit Service 8a8a03
import clitests
Packit Service 8a8a03
Packit Service 8a8a03
from abrtcli.match import (get_match_data,
Packit Service 8a8a03
                           match_completer,
Packit Service 8a8a03
                           match_get_problem,
Packit Service 8a8a03
                           match_lookup)
Packit Service 8a8a03
Packit Service 8a8a03
from abrtcli.utils import captured_output
Packit Service 8a8a03
Packit Service 8a8a03
Packit Service 8a8a03
class MatchTestCase(clitests.TestCase):
Packit Service 8a8a03
    '''
Packit Service 8a8a03
    Simple test to check if database creation & access
Packit Service 8a8a03
    works as expected.
Packit Service 8a8a03
    '''
Packit Service 8a8a03
Packit Service 8a8a03
    hashes = ['ccacca5', 'bc60a5c', 'acbea5c', 'ffe635c']
Packit Service 8a8a03
    collision_hash = 'bc60a5c'
Packit Service 8a8a03
    human = ['/home/user/bin/user_app', 'unknown_problem', 'polkitd']
Packit Service 8a8a03
    collision_human = 'pavucontrol'
Packit Service 8a8a03
    combined = ['pavucontrol@bc60a5c', 'pavucontrol@acbea5c']
Packit Service 8a8a03
Packit Service 8a8a03
    def test_get_match_data(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test get_match_data returns correctly merged data
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        by_human_id, by_short_id = get_match_data()
Packit Service 8a8a03
        self.assertEqual(len(by_human_id), 4)
Packit Service 8a8a03
Packit Service 8a8a03
        self.assertEqual(len(by_short_id), 4)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_completer(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_completer yields properly formatted candidates
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        pm = match_completer(None, None)
Packit Service 8a8a03
        self.assertEqual(set(pm), set(self.hashes + self.human + self.combined))
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_lookup_hash(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test match lookup by hash
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        for h in self.hashes:
Packit Service 8a8a03
            m = match_lookup(h)
Packit Service 8a8a03
            self.assertTrue(len(m) >= 1)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_lookup_human_id(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test match lookup by human id
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        for h in self.human:
Packit Service 8a8a03
            m = match_lookup(h)
Packit Service 8a8a03
            self.assertTrue(len(m) == 1)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_lookup_combined(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test match lookup by human id
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        for h in self.combined:
Packit Service 8a8a03
            m = match_lookup(h)
Packit Service 8a8a03
            self.assertTrue(len(m) == 1)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_lookup_collisions(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test match lookup handles collisions
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        m = match_lookup(self.collision_hash)
Packit Service 8a8a03
        self.assertTrue(len(m) == 2)
Packit Service 8a8a03
Packit Service 8a8a03
        m = match_lookup(self.collision_human)
Packit Service 8a8a03
        self.assertTrue(len(m) == 2)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_lookup_nonexistent(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test match lookup handles empty input
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        m = match_lookup('')
Packit Service 8a8a03
        self.assertEqual(m, None)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_simple(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem matches unique pattern
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        p = match_get_problem('polkitd')
Packit Service 8a8a03
        self.assertEqual(p.component, 'polkitd')
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_last(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem matches last problem
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        p = match_get_problem('last')
Packit Service 8a8a03
        self.assertEqual(p.uid, 1234)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_multiple(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem fails when multiple problems match
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        with captured_output() as (cap_stdout, cap_stderr):
Packit Service 8a8a03
            with self.assertRaises(SystemExit):
Packit Service 8a8a03
                match_get_problem('pavucontrol')
Packit Service 8a8a03
Packit Service 8a8a03
        stdout = cap_stdout.getvalue()
Packit Service 8a8a03
        self.assertIn("Ambiguous", stdout)
Packit Service 8a8a03
        self.assertIn("pavucontrol@bc60a5c", stdout)
Packit Service 8a8a03
        self.assertIn("pavucontrol@acbea5c", stdout)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_multiple_allowed(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem matches multiple problems when allowed
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        p = match_get_problem('pavucontrol', allow_multiple=True)
Packit Service 8a8a03
        self.assertEqual(len(p), 2)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_empty_database(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem handles no problems in database
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        import problem
Packit Service 8a8a03
Packit Service 8a8a03
        with clitests.monkey_patch(problem, 'list', lambda *args, **kwargs: []):
Packit Service 8a8a03
            with captured_output() as (cap_stdout, cap_stderr):
Packit Service 8a8a03
                with self.assertRaises(SystemExit):
Packit Service 8a8a03
                    match_get_problem('nope')
Packit Service 8a8a03
Packit Service 8a8a03
            stdout = cap_stdout.getvalue()
Packit Service 8a8a03
            self.assertIn("No problem(s) matched", stdout)
Packit Service 8a8a03
Packit Service 8a8a03
            # Similar with last
Packit Service 8a8a03
            with captured_output() as (cap_stdout, cap_stderr):
Packit Service 8a8a03
                with self.assertRaises(SystemExit):
Packit Service 8a8a03
                    match_get_problem('last')
Packit Service 8a8a03
Packit Service 8a8a03
            stdout = cap_stdout.getvalue()
Packit Service 8a8a03
            self.assertIn("No problems", stdout)
Packit Service 8a8a03
Packit Service 8a8a03
    def test_match_get_problem_nonexistent(self):
Packit Service 8a8a03
        '''
Packit Service 8a8a03
        Test that match_get_problem exits on non-existent problem
Packit Service 8a8a03
        '''
Packit Service 8a8a03
Packit Service 8a8a03
        with self.assertRaises(SystemExit):
Packit Service 8a8a03
            match_get_problem('nope')
Packit Service 8a8a03
Packit Service 8a8a03
Packit Service 8a8a03
if __name__ == '__main__':
Packit Service 8a8a03
    logging.basicConfig(level=logging.INFO)
Packit Service 8a8a03
    unittest.main()