Add func test for nova-manage db archive_deleted_rows --before

This is inspired by database query filtering that occurs when --before
is passed to nova-manage db archive_deleted_rows. There is a comparison
WHERE deleted_at < before and not all database records populate it.

This verifies that no records are missed due to that comparision when
archiving with --before.

Related-Bug: #1751192

Change-Id: I44b79cfb236e94444740e32b0dd0a2344c29f340
This commit is contained in:
melanie witt 2021-06-17 01:43:17 +00:00
parent 9cdecc81fb
commit b84787d26a
1 changed files with 24 additions and 0 deletions

View File

@ -1734,6 +1734,30 @@ class TestDBArchiveDeletedRows(integrated_helpers._IntegratedTestBase):
self.cli.archive_deleted_rows(task_log=True, verbose=True)
self.assertRegex(self.output.getvalue(), r'\| task_log\s+\| 2')
def test_archive_before(self):
"""Test that no records are left over after archiving with --before"""
# Create and delete a server so we can archive.
server = self._build_server()
server = self.api.post_server({'server': server})
server = self.api.get_server(server['id'])
self._delete_server(server)
# First try archiving records before a past datetime. Nothing should be
# archived.
past = timeutils.utcnow() - datetime.timedelta(hours=1)
ret = self.cli.archive_deleted_rows(before=past.isoformat())
# Return code 0 means nothing was archived.
self.assertEqual(0, ret)
# Now try archiving records before a future datetime. Everything should
# have been archived.
future = timeutils.utcnow() + datetime.timedelta(hours=1)
ret = self.cli.archive_deleted_rows(before=future.isoformat())
# Return code 1 means something was archived.
self.assertEqual(1, ret)
# Now archive everything without specifying --before.
ret = self.cli.archive_deleted_rows()
# Return code 0 means nothing was archived.
self.assertEqual(0, ret)
class TestDBArchiveDeletedRowsMultiCell(integrated_helpers.InstanceHelperMixin,
test.TestCase):