11# Copyright (c) 2021 Cisco Systems, Inc. and its affiliates
22# All rights reserved.
33import io
4- import lzma
54import string
6- import urllib
75from itertools import repeat
86from unittest import mock
97
@@ -204,7 +202,7 @@ def test__walk_source_repos(self):
204202 finder = self .make_finder (source_repos = src , binary_repos = bin )
205203 package = self .FakePackage (vr = finder .version )
206204 do_task = self .patch (yum , 'do_task' )
207- do_task .side_effect = ([ baseurl , None ], [package ])
205+ do_task .return_value = (baseurl , { finder . name : [package ]} )
208206 self .patch (finder , 'test_url' ).return_value = False
209207 url = finder ._walk_source_repos (finder .name )
210208 self .assertEqual (baseurl + package .location , url )
@@ -216,7 +214,7 @@ def test__walk_source_repos_different_version_hit(self):
216214 finder = self .make_finder (source_repos = src , binary_repos = bin )
217215 package = self .FakePackage ()
218216 do_task = self .patch (yum , 'do_task' )
219- do_task .side_effect = ([ baseurl , None ], [package ])
217+ do_task .return_value = (baseurl , { finder . name : [package ]} )
220218 self .patch (finder , 'test_url' ).return_value = True
221219 url = finder ._walk_source_repos (finder .name )
222220 self .assertEqual (baseurl + package .location , url )
@@ -228,7 +226,7 @@ def test__walk_source_repos_different_version_miss(self):
228226 finder = self .make_finder (source_repos = src , binary_repos = bin )
229227 package = self .FakePackage ()
230228 do_task = self .patch (yum , 'do_task' )
231- do_task .side_effect = ([ baseurl , None ], [package ])
229+ do_task .return_value = (baseurl , { finder . name : [package ]} )
232230 self .patch (finder , 'test_url' ).return_value = False
233231 url = finder ._walk_source_repos (finder .name )
234232 self .assertIsNone (url )
@@ -243,7 +241,7 @@ def test__walk_binary_repos(self):
243241 srcrpm = self .make_package (n = n , v = v , r = r )
244242 package = self .FakePackage (vr = finder .version , sourcerpm = srcrpm )
245243 do_task = self .patch (yum , 'do_task' )
246- do_task .side_effect = ([ None , None ], [package ])
244+ do_task .return_value = (None , { finder . name : [package ]} )
247245 name , version = finder ._walk_binary_repos (finder .name )
248246 self .expectThat (name , Equals (n ))
249247 self .expectThat (version , Equals (f"{ v } -{ r } " ))
@@ -254,7 +252,7 @@ def test__walk_binary_repos_no_sourcerpm(self):
254252 finder = self .make_finder (source_repos = src , binary_repos = bin )
255253 package = self .FakePackage (vr = finder .version , sourcerpm = '' )
256254 do_task = self .patch (yum , 'do_task' )
257- do_task .side_effect = ([ None , None ], [package ])
255+ do_task .return_value = (None , { finder . name : [package ]} )
258256 name , version = finder ._walk_binary_repos (finder .name )
259257 self .assertIsNone (name )
260258 self .assertIsNone (version )
@@ -266,7 +264,7 @@ def test__walk_binary_repos_different_name_multiple_versions(self):
266264 package1 = self .FakePackage ()
267265 package2 = self .FakePackage ()
268266 do_task = self .patch (yum , 'do_task' )
269- do_task .side_effect = ([ None , None ], [package1 , package2 ])
267+ do_task .return_value = (None , { finder . name : [package1 , package2 ]} )
270268 name , version = finder ._walk_binary_repos (finder .name )
271269 self .assertIsNone (name )
272270 self .assertIsNone (version )
@@ -281,7 +279,7 @@ def test__walk_binary_repos_different_name_different_version(self):
281279 srcrpm = self .make_package (n = n , v = v , r = r )
282280 package = self .FakePackage (sourcerpm = srcrpm )
283281 do_task = self .patch (yum , 'do_task' )
284- do_task .side_effect = ([ None , None ], [package ])
282+ do_task .return_value = (None , { finder . name : [package ]} )
285283 name , version = finder ._walk_binary_repos (finder .name )
286284 self .expectThat (name , Equals (n ))
287285 self .expectThat (version , Equals (f"{ v } -{ r } " ))
@@ -355,97 +353,48 @@ def setUp(self):
355353 def test_get_repomd (self ):
356354 # Mock up a successful repomd fetch
357355 url = self .factory .make_url ()
358- repo = self .patch (repomd , 'load ' )
359- lxml = self .patch (repomd .defusedxml .lxml , 'tostring ' )
360- lxml . return_value = b"<xml>Test</xml>"
361- compress = self . patch ( lzma , 'compress' )
356+ self .patch (requests , 'get ' )
357+ lxml = self .patch (repomd .defusedxml .lxml , 'parse ' )
358+ package = mock . MagicMock ()
359+ lxml . return_value . getroot . return_value = [ package ]
362360
363- # Ensure that get_repomd re-serializes the object XML and returns a
364- # compressed payload
365361 yum .get_repomd (self .queue , url )
366- compress .assert_called_once_with (lxml .return_value )
362+ # Mocking out all the various and sundry Package properties would be
363+ # tedious, and we don't really care about anything past the package
364+ # name anyhow
367365 self .queue .put .assert_called_once_with (
368- (str ( repo . return_value . baseurl ), compress . return_value )
366+ (url + "/" , { package . findtext . return_value : [ mock . ANY ]} )
369367 )
370368
371369 def test_get_repomd_http_error (self ):
372370 # Mock up a failure to fetch the repomd
373371 url = self .factory .make_url ()
374- load = self .patch (repomd , 'load' )
375- load .side_effect = urllib .error .HTTPError (None , None , None , None , None )
376- lxml = self .patch (repomd .defusedxml .lxml , 'tostring' )
377- compress = self .patch (lzma , 'compress' )
372+ load = self .patch (requests , 'get' )
373+ load .side_effect = requests .exceptions .HTTPError ()
374+ lxml = self .patch (repomd .defusedxml .lxml , 'parse' )
378375
379376 # Ensure that get_repomd won't fill the cache with garbage
380377 yum .get_repomd (self .queue , url )
381378 lxml .assert_not_called ()
382- compress .assert_not_called ()
383379 self .queue .put .assert_called_once_with ((load .side_effect ,), timeout = 30 )
384380
385381 def test_get_repomd_unserializable_http_error (self ):
386- # Ibid, but initializing the HTTPError with a live file pointer will
382+ # Ibid, but initializing the exception with a live file pointer will
387383 # make it refuse to serialize
388384 url = self .factory .make_url ()
389385 fp = io .BufferedReader (io .StringIO ())
390- load = self .patch (repomd , 'load' )
391- load .side_effect = urllib .error .HTTPError (None , None , None , None , fp )
392- lxml = self .patch (repomd .defusedxml .lxml , 'tostring' )
393- compress = self .patch (lzma , 'compress' )
386+ load = self .patch (requests , 'get' )
387+ load .side_effect = requests .exceptions .RequestException (fp )
388+ lxml = self .patch (repomd .defusedxml .lxml , 'parse' )
394389
395390 # Ensure that we get a re-raised plain Exception
396391 yum .get_repomd (self .queue , url )
397392 lxml .assert_not_called ()
398- compress .assert_not_called ()
399393 self .queue .put .assert_called_once_with ((mock .ANY ,), timeout = 30 )
400394 self .assertIn (
401395 're-raising as plain Exception' , str (self .queue .put .call_args )
402396 )
403397
404- def test_lookup_in_repomd (self ):
405- # Mock up a successful package lookup
406- baseurl = self .factory .make_url ()
407- repomd_xml = self .factory .make_string ()
408- name = self .factory .make_string ()
409- decompress = self .patch (lzma , 'decompress' )
410- lxml = self .patch (repomd .defusedxml .lxml , 'fromstring' )
411- repo = self .patch (repomd , 'Repo' )
412- package = mock .MagicMock ()
413- repo .return_value .findall .return_value = [package ]
414-
415- # lookup_in_repomd should decompress/rehydrate a repomd object
416- yum .lookup_in_repomd (self .queue , baseurl , repomd_xml , name )
417- decompress .assert_called_once_with (repomd_xml )
418- lxml .assert_called_once_with (decompress .return_value )
419- repo .assert_called_once_with (baseurl , lxml .return_value )
420- # The response should be converted into a "simplified package"
421- self .queue .put .assert_called_once_with (
422- [yum .serialize_package (package )]
423- )
424-
425- def test_lookup_in_repomd_no_baseurl (self ):
426- # Ensure that calling lookup_in_repomd without valid args does no work
427- repomd_xml = self .factory .make_string ()
428- name = self .factory .make_string ()
429- decompress = self .patch (lzma , 'decompress' )
430- repo = self .patch (repomd , 'Repo' )
431-
432- yum .lookup_in_repomd (self .queue , None , repomd_xml , name )
433- decompress .assert_not_called ()
434- repo .assert_not_called ()
435- self .queue .put .assert_called_once_with ([], timeout = 30 )
436-
437- def test_lookup_in_repomd_no_repoxml (self ):
438- # Ibid.
439- baseurl = self .factory .make_url ()
440- name = self .factory .make_string ()
441- decompress = self .patch (lzma , 'decompress' )
442- repo = self .patch (repomd , 'Repo' )
443-
444- yum .lookup_in_repomd (self .queue , baseurl , None , name )
445- decompress .assert_not_called ()
446- repo .assert_not_called ()
447- self .queue .put .assert_called_once_with ([], timeout = 30 )
448-
449398 def test_do_task (self ):
450399 # Mock up a process that does not exit upon return
451400 data = self .factory .make_string ('response' )
0 commit comments