Files
mongo/buildscripts/tests/resmokelib/utils/test_history.py
Juan Gu 2513cc511b SERVER-94076 Remove unused imports via Ruff rule (#27337)
GitOrigin-RevId: 8923cc14f276be93355d763cb88c04bdb4dd9000
2024-10-04 01:43:13 +00:00

202 lines
5.2 KiB
Python

"""Unit tests for buildscripts/resmokelib/utils/history.py."""
import unittest
from buildscripts.resmokelib.utils.history import HistoryDict, make_historic
class TestHistory(unittest.TestCase):
"""Unit tests for the HistoryDict class."""
def test_acts_like_dict(self):
test_dict = HistoryDict()
self.assertRaises(KeyError, lambda: test_dict["nonexistent_key"])
test_dict["key1"] = "key1value1"
self.assertEqual(test_dict["key1"], "key1value1")
test_dict["key1"] = "key1value2"
self.assertEqual(test_dict["key1"], "key1value2")
del test_dict["key1"]
self.assertRaises(KeyError, lambda: test_dict["key1"])
def test_is_iterable(self):
test_dict = HistoryDict()
test_dict["key1"] = "key1val"
test_dict["key2"] = "key2val"
test_dict["key3"] = "key3val"
test_dict["key4"] = "key4val"
expected_vals = ["key1val", "key2val", "key3val", "key4val"]
actual_vals = []
for key in test_dict:
actual_vals.append(test_dict[key])
self.assertCountEqual(actual_vals, expected_vals)
def test_inner_dict(self):
test_dict = HistoryDict()
inner_dict = HistoryDict()
inner_dict["foo"] = "bar"
test_dict["innerDict"] = inner_dict
test_dict["innerDict"]["foo"] = "za"
another_ref = test_dict["innerDict"]
another_ref["another_added"] = "another_val"
self.assertEqual(test_dict["innerDict"]["foo"], "za")
self.assertEqual(test_dict["innerDict"]["another_added"], "another_val")
expected_test_dict = """SchemaVersion: "0.1"
History:
innerDict:
- time: 0
type: WRITE
value_written: null
- time: 1
type: WRITE
value_written: null
- time: 2
type: WRITE
value_written: null"""
test_dict_dumped = test_dict.dump_history()
self.assertEqual(test_dict_dumped, expected_test_dict)
final_dict = HistoryDict(yaml_string=test_dict_dumped)
self.assertEqual(expected_test_dict, final_dict.dump_history())
def test_make_historic(self):
actual_dict = {"foo": "bar", "a": "b", "innerdict": {"innerkey": "innerval"}}
test_dict = make_historic(actual_dict)
test_dict["a"] = "c"
# Updating actual_dict doesn't affect test_dict (it copied).
actual_dict["foo"] = "za"
# Similarly, updating the inner dict doesn't either.
actual_dict["innerdict"]["innerkey"] = "innerval2"
# However, updating the inner dict on the test_dict does.
test_dict["innerdict"]["innerkey"] = "secondinnerval"
expected_test_dict = """SchemaVersion: "0.1"
History:
a:
- time: 1
type: WRITE
value_written: b
- time: 3
type: WRITE
value_written: c
foo:
- time: 0
type: WRITE
value_written: bar
innerdict:
- time: 2
type: WRITE
value_written: null
- time: 4
type: WRITE
value_written: null"""
self.assertEqual(test_dict.dump_history(), expected_test_dict)
def test_dump_and_load(self):
test_dict = HistoryDict()
test_dict["key1"] = "key1value1"
test_dict["key1"] = "key1value2"
test_dict["key2"] = "key2value1"
del test_dict["key1"]
# Testing with location would be flaky across machines since it
# uses absolute pathing. It's just for human convenience anyway.
expected_test_dict = """SchemaVersion: "0.1"
History:
key1:
- time: 0
type: WRITE
value_written: key1value1
- time: 1
type: WRITE
value_written: key1value2
- time: 3
type: DELETE
value_written: null
key2:
- time: 2
type: WRITE
value_written: key2value1"""
self.assertEqual(test_dict.dump_history(), expected_test_dict)
test_dict["key2"] = "key2value2"
second_dict = HistoryDict(yaml_string=expected_test_dict)
self.assertRaises(KeyError, lambda: second_dict["key1"])
self.assertEqual(second_dict["key2"], "key2value1")
# Include the reads / writes we just did.
expected_second_dict = """SchemaVersion: "0.1"
History:
key1:
- time: 0
type: WRITE
value_written: key1value1
- time: 1
type: WRITE
value_written: key1value2
- time: 3
type: DELETE
value_written: null
key2:
- time: 2
type: WRITE
value_written: key2value1"""
self.assertEqual(second_dict.dump_history(), expected_second_dict)
def test_write_equality(self):
test_dict = HistoryDict()
test_dict["foo"] = "bar"
test_dict["myint"] = 1
test_dict["foo"] = "za"
test_dict["innerdict"] = make_historic({"a": "b"})
second_dict = HistoryDict()
second_dict["foo"] = "bar"
second_dict["myint"] = 1
second_dict["foo"] = "za"
second_dict["innerdict"] = make_historic({"a": "b"})
self.assertTrue(test_dict.write_equals(second_dict))
second_dict["another"] = "write"
self.assertFalse(test_dict.write_equals(second_dict))
test_dict["another"] = "write"
self.assertTrue(test_dict.write_equals(second_dict))
# Reads aren't counted
_ = second_dict["foo"]
self.assertTrue(test_dict.write_equals(second_dict))