From 7ff917da90d31726130e67a582c462bcbd67768a Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Nov 07 2021 09:45:20 +0000 Subject: update unit tests --- diff --git a/tests/test_hub/test_get_next_build.py b/tests/test_hub/test_get_next_build.py new file mode 100644 index 0000000..34b4ece --- /dev/null +++ b/tests/test_hub/test_get_next_build.py @@ -0,0 +1,73 @@ +import mock +import unittest +import koji +import kojihub + +from psycopg2._psycopg import IntegrityError + + +class TestGetNextBuild(unittest.TestCase): + + def setUp(self): + self.get_next_release = mock.patch('kojihub.get_next_release').start() + self.new_build = mock.patch('kojihub.new_build').start() + self._dml = mock.patch('kojihub._dml').start() + self.binfo = {'name': 'name', 'version': 'version'} + + def tearDown(self): + mock.patch.stopall() + + def test_get_next_build_simple(self): + # typical case + self.get_next_release.return_value = '2.mydist' + self.new_build.return_value = 'mybuild' + result = kojihub.get_next_build(self.binfo) + self.assertEqual(result, 'mybuild') + self.new_build.assert_called_once() + # release value should be passed to new_build + self.assertEqual(self.new_build.call_args[0][0]['release'], '2.mydist') + + def test_get_next_build_have_release(self): + # if a release is passed, get_next_release should not be called + self.binfo['release'] = '42' + result = kojihub.get_next_build(self.binfo) + self.new_build.assert_called_once() + self.get_next_release.assert_not_called() + # release value should be passed to new_build + self.assertEqual(self.new_build.call_args[0][0]['release'], '42') + + def test_get_next_build_retry(self): + # set up new_build to fail a few times + nb_callnum = 0 + def my_new_build(data, strict=False): + nonlocal nb_callnum + nb_callnum += 1 + if nb_callnum < 3: + raise IntegrityError('fake error') + return 'mybuild' + self.new_build.side_effect = my_new_build + + self.get_next_release.return_value = '2.mydist' + + result = kojihub.get_next_build(self.binfo) + self.assertEqual(result, 'mybuild') + self.assertEqual(len(self.new_build.mock_calls), 3) + self.assertEqual(len(self.get_next_release.mock_calls), 3) + # incr arg should have incremented on successive tries + self.assertEqual(self.get_next_release.mock_calls[1][1][1], 2) + self.assertEqual(self.get_next_release.mock_calls[2][1][1], 3) + + def test_get_next_build_fail(self): + # set up new_build to fail forever + self.new_build.side_effect = IntegrityError('fake error') + self.get_next_release.return_value = '2.mydist' + + with self.assertRaises(koji.GenericError): + result = kojihub.get_next_build(self.binfo) + + # there should have been ten tries + self.assertEqual(len(self.new_build.mock_calls), 8) + self.assertEqual(len(self.get_next_release.mock_calls), 9) + # incr arg should have incremented on successive tries + for i in range(1, 9): + self.assertEqual(self.get_next_release.mock_calls[i][1][1], i+1) diff --git a/tests/test_hub/test_get_next_release.py b/tests/test_hub/test_get_next_release.py index ea1c0d5..561a3f1 100644 --- a/tests/test_hub/test_get_next_release.py +++ b/tests/test_hub/test_get_next_release.py @@ -33,6 +33,7 @@ class TestGetNextRelease(unittest.TestCase): ['1.el6', '2.el6'], ['1.fc23', '2.fc23'], ['45.fc23', '46.fc23'], + ['20211105.nightly.7', '20211105.nightly.8'], ] for a, b in data: self.query.executeOne.return_value = {'release': a} @@ -53,3 +54,15 @@ class TestGetNextRelease(unittest.TestCase): with self.assertRaises(koji.BuildError): kojihub.get_next_release(self.binfo) + def test_get_next_release_bad_incr(self): + data = [ + # bad_incr_value + "foo", + None, + 1.1, + {1:1}, + [1], + ] + for val in data: + with self.assertRaises(koji.ParameterError): + kojihub.get_next_release(self.binfo, incr=val)