From 23713456ba9caf68e02c27a51fbfd7bf947211db Mon Sep 17 00:00:00 2001 From: Pat Riehecky Date: Nov 06 2015 15:48:59 +0000 Subject: Added new finder, reference_like --- diff --git a/updateinfo/helpers/finders.py b/updateinfo/helpers/finders.py index 33fdf59..ff822d4 100644 --- a/updateinfo/helpers/finders.py +++ b/updateinfo/helpers/finders.py @@ -22,6 +22,8 @@ from __future__ import unicode_literals from __future__ import absolute_import +import re + import concurrent.futures import multiprocessing @@ -105,6 +107,27 @@ def what_update_has_reference(updateinfo_obj, href): results.sort() return tuple(results) +def what_update_has_reference_like(updateinfo_obj, regex): + '''Which updateids have a given reference that matches regex?''' + def __add_if_refid_in(mylist, obj, regex): + ''' a function we can do in parallel ''' + for href in obj.references: + if re.match(regex, href): + mylist.append(obj.updateid) + return + taskpool = concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) + + if not isinstance(regex, type(re.compile('.'))): + regex = re.compile(regex) + + results = [] + for updateid in updateinfo_obj: + taskpool.submit(__add_if_refid_in, results, updateinfo_obj[updateid], regex) + + taskpool.shutdown() + results.sort() + return tuple(results) + def all_updates_for_rpm_name(updateinfo_obj, rpmname): ''' Returns a list of updates with the given 'name' diff --git a/updateinfo/helpers/tests.py b/updateinfo/helpers/tests.py index d9a8519..829cc1d 100644 --- a/updateinfo/helpers/tests.py +++ b/updateinfo/helpers/tests.py @@ -24,6 +24,7 @@ from __future__ import absolute_import import contextlib import os +import re import shutil import subprocess import tempfile @@ -43,6 +44,7 @@ from .finders import all_updates_for_rpm_name from .finders import all_updates_for_rpm_name_and_collection from .finders import what_update_has_filename from .finders import what_update_has_reference +from .finders import what_update_has_reference_like from .finders import what_collection_has_filename from .finders import what_update_has_package from .finders import what_collection_has_package @@ -247,6 +249,10 @@ class HelperFindersTests(unittest.TestCase): '''sample''' testref = self.Reference(reftype='self', href='http://2', refid='2', title='jkl') return testref + def ref_three_for_test(self): + '''sample''' + testref = self.Reference(reftype='other', href='https://3', refid='3', title='sometext') + return testref def entry_one_for_test(self): '''sample''' testentry = self.Update() @@ -268,6 +274,7 @@ class HelperFindersTests(unittest.TestCase): testentry.issued_date = '2014-01-01' testentry.collections.add(self.coll_two_for_test()) testentry.references.add(self.ref_two_for_test()) + testentry.references.add(self.ref_three_for_test()) return testentry def entry_three_for_test(self): '''sample''' @@ -278,6 +285,7 @@ class HelperFindersTests(unittest.TestCase): testentry.updateid = '3' testentry.issued_date = '2014-01-01' testentry.collections.add(self.coll_three_for_test()) + testentry.references.add(self.ref_three_for_test()) return testentry def entry_four_for_test(self): '''sample''' @@ -428,6 +436,42 @@ class HelperFindersTests(unittest.TestCase): self.assertTrue(result, msg="found something") + def test_what_update_has_reference_like_has(self): + '''See if files we know are there are where we expect''' + testobj = self.updateinfo_for_test() + + found = what_update_has_reference_like(testobj, 'http://.*') + + result = False + if found == ('1','2'): + result = True + + self.assertTrue(result, msg="didn't find package") + + def test_what_update_has_reference_like_has_asregex(self): + '''See if files we know are there are where we expect''' + testobj = self.updateinfo_for_test() + + found = what_update_has_reference_like(testobj, re.compile('http://.*')) + + result = False + if found == ('1','2'): + result = True + + self.assertTrue(result, msg="didn't find package") + + def test_what_update_has_reference_like_nope(self): + '''See if files we know are there are where we expect''' + testobj = self.updateinfo_for_test() + + found = what_update_has_reference(testobj, 'http://\w\w\d') + + result = False + if found == (): + result = True + + self.assertTrue(result, msg="found something") + def test_all_updates_for_rpm_name_has_one(self): '''see if we can find just one update''' testobj = self.updateinfo_for_test() @@ -1086,6 +1130,31 @@ class HelperSuggestedTests(unittest.TestCase): self.assertTrue(testobj['1'].reboot_suggested, msg='did not suggest reboot') + def test_no_reboot(self): + '''must not suggest reboot''' + testobj = self.updateinfo_for_test() + testobj['1'].description = 'no important text' + set_suggested(testobj['1']) + + self.assertFalse(testobj['1'].reboot_suggested, msg='did suggested reboot') + + def test_no_restart(self): + '''must not suggest restart''' + testobj = self.updateinfo_for_test() + testobj['1'].description = 'no important text' + set_suggested(testobj['1']) + + self.assertFalse(testobj['1'].restart_suggested, msg='did suggested restart') + + def test_no_relogin(self): + '''must not suggest relogin''' + testobj = self.updateinfo_for_test() + testobj['1'].description = 'no important text' + set_suggested(testobj['1']) + + self.assertFalse(testobj['1'].relogin_suggested, msg='did suggested relogin') + + class HelperXMLToolsTests(unittest.TestCase): '''Make sure the xml helpers work'''