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