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

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