import hashlib import unittest from core.device_profile import DeviceProfileGenerator from core.dfp_cache import ( PERSISTED_CACHE_KEYS, build_persisted_cache_m, java_hashmap_to_string, persisted_cache_source_values, uq0_s_a, ) class DfpCacheTests(unittest.TestCase): def test_uq0_s_a_matches_java_md5_prefix(self): self.assertEqual(uq0_s_a("abc"), hashlib.md5(b"abc").hexdigest()[:16]) self.assertEqual(uq0_s_a(""), "") self.assertEqual(uq0_s_a("KWE_N"), "KWE_N") def test_java_hashmap_to_string_matches_fixed_dpf_key_order(self): entries = [(key, f"{key}v") for key in PERSISTED_CACHE_KEYS] self.assertEqual( java_hashmap_to_string(entries), ( "{k16=k16v, k27=k27v, k19=k19v, k29=k29v, k110=k110v, " "k40=k40v, k105=k105v, k6=k6v, k8=k8v, k23=k23v}" ), ) def test_persisted_cache_m_changes_with_stable_hardware_material(self): profile = DeviceProfileGenerator(seed=1234).new_profile() original = build_persisted_cache_m(profile) profile.runtime_hints.keeper_seed += "x" changed = build_persisted_cache_m(profile) self.assertNotEqual(changed, original) def test_source_values_match_java_cache_material_key_set(self): profile = DeviceProfileGenerator(seed=1234).new_profile() values = persisted_cache_source_values(profile) self.assertEqual(tuple(values), PERSISTED_CACHE_KEYS) self.assertEqual(values["k6"], "0") self.assertEqual(values["k8"], profile.build_type) self.assertEqual(values["k23"], profile.manufacturer) self.assertEqual(values["k27"], profile.model) self.assertEqual(values["k110"], profile.runtime_hints.keeper_seed) if __name__ == "__main__": unittest.main()