import re import unittest from core.device_id import is_valid_oaid, oaid_from_seed_material class DeviceIdTests(unittest.TestCase): def test_oaid_from_seed_material_is_stable_uppercase_sha256_shape(self): oaid = oaid_from_seed_material( [ "ANDROID_0123456789abcdef", "ANDROID_fedcba9876543210", "ANDROID_0011223344556677", "DFP" + "A" * 61, ] ) self.assertEqual( oaid, "4450249A4464DEA6C2C6C32811552E6F98B536AE6BD2996911EFA00AB572D228", ) self.assertTrue(is_valid_oaid(oaid)) self.assertRegex(oaid, re.compile(r"^[0-9A-F]{64}$")) def test_oaid_from_seed_material_changes_when_seed_changes(self): left = oaid_from_seed_material(["ANDROID_0123456789abcdef", "seed-a"]) right = oaid_from_seed_material(["ANDROID_0123456789abcdef", "seed-b"]) self.assertNotEqual(left, right) self.assertTrue(is_valid_oaid(left)) self.assertTrue(is_valid_oaid(right)) def test_is_valid_oaid_rejects_empty_lowercase_and_wrong_length(self): self.assertFalse(is_valid_oaid("")) self.assertFalse(is_valid_oaid("a" * 64)) self.assertFalse(is_valid_oaid("A" * 63)) self.assertFalse(is_valid_oaid("G" * 64)) if __name__ == "__main__": unittest.main()