tests: Fix flaky reconciler test

Previously, test_object_move_no_such_object_no_tombstone_ancient
would fail intermittently, with an assertion that two timestamps
were almost (but not quite) equal.

This probably comes down to the fact that it's passing floats as
timestamps down into FakeInternalClient's parse(); specifically,
values like 1738046018.2900746 and 1738045066.1442454 are known
to previously fail.

Just fixing the usage doesn't fix the foot-gun, though -- so fix
up parse() to be internally consistent, even if passed a float.

Change-Id: Ide1271dc4ef54b64d2dc99ef658e8340abb0b6ce
This commit is contained in:
Tim Burke
2025-02-04 16:07:51 -08:00
parent 0dfa38d025
commit 3ccf749043

View File

@@ -12,7 +12,6 @@
# limitations under the License.
import json
import numbers
import shutil
from functools import partial
from tempfile import mkdtemp
@@ -140,6 +139,8 @@ class FakeInternalClient(reconciler.InternalClient):
continue
obj_path = swob.str_to_wsgi(
container_path + '/' + obj_name)
# some tests setup mock listings using floats, some use
# strings, so normalize here
ts = Timestamp(timestamp)
headers = {'X-Timestamp': ts.normal,
'X-Backend-Timestamp': ts.internal}
@@ -149,17 +150,12 @@ class FakeInternalClient(reconciler.InternalClient):
self.app.storage_policy[storage_policy_index].register(
'DELETE', obj_path, swob.HTTPNoContent, {})
# container listing entry
last_modified = timestamp_to_last_modified(timestamp)
# some tests setup mock listings using floats, some use
# strings, so normalize here
if isinstance(timestamp, numbers.Number):
timestamp = '%f' % timestamp
obj_data = {
'bytes': 0,
# listing data is unicode
'name': obj_name,
'last_modified': last_modified,
'hash': timestamp,
'last_modified': ts.isoformat,
'hash': ts.internal,
'content_type': content_type,
}
container_listing_data.append(obj_data)