Mock datetime instead of redefining standard library

This fixes up the test to mock the datetime calls specifically in
the test that needs to mock them, rather than the prior approach
which was redefining the behavior of the standard library function
globally.

Additionally, to fix the py310 unit tests, jsonschema is pinned to
the latest version that doesn't depend (indirectly) on Rust. This
is not part of the cherry-pick but is needed in this change in order
to fix py310 unit tests. This is not needed for stable/2023.1 and
above, where commit da0f33c95b (Fix
charm for tox4 compatibility) fixed this issue. Stable branches
prior to stable/2023.1 pinned tox to < 4.0.0.

Closes-Bug: #2045588
Change-Id: I9c585c91c5527a61e4a8dbcba0a8a01108cd9b2e
(cherry picked from commit 72e22a94ed)
This commit is contained in:
Corey Bryant 2023-12-04 15:47:20 -05:00
parent 6167af0d40
commit dccb9c4ad0
2 changed files with 12 additions and 19 deletions

View File

@ -29,3 +29,6 @@ git+https://opendev.org/openstack/tempest.git#egg=tempest
croniter # needed for charm-rabbitmq-server unit tests
pyopenssl<=22.0.0
# newer jsonschema needs rustc and cargo
jsonschema<4.18.0

View File

@ -40,24 +40,6 @@ STATUS_CRIT = 2
STATUS_UNKNOWN = 3
class NewDate(datetime.datetime):
@classmethod
def now(cls):
"""
Mock for builtin datetime.datetime.now(), to test repl_last_timestamp()
Non-defined methods are inherited from real class
"""
return cls(2017, 4, 27,
13, 25, 46, 629282)
@classmethod
def fromtimestamp(cls, timestamp):
return cls.utcfromtimestamp(timestamp)
datetime.datetime = NewDate
class CheckSwiftStorageTestCase(unittest.TestCase):
def test_generate_md5(self):
"""
@ -398,12 +380,20 @@ class CheckSwiftStorageTestCase(unittest.TestCase):
result = check_replication(base_url, [4, 10, 4, 10])
self.assertEqual(result, [(STATUS_OK, 'OK')])
def test_repl_last_timestamp(self):
@patch('check_swift_storage.datetime')
def test_repl_last_timestamp(self, mock_datetime):
"""
Calculates delta between NOW and last replication date
Also gathers the number of failures
"""
# 1493299546.629282
mock_datetime.datetime.now.return_value = (
datetime.datetime(2017, 4, 27, 13, 25, 46, 629282)
)
mock_datetime.datetime.fromtimestamp.side_effect = (
datetime.datetime.utcfromtimestamp
)
jdata = {u'replication_last': 1493299546.629282, u'replication_stats':
{u'no_change': 0, u'rsync': 0, u'success': 0, u'start':
1493299546.621624, u'attempted': 0, u'ts_repl': 0, u'remove':