import json import hashlib import unittest from core.device_profile import DeviceProfile from core.weapon_mf import ( WeaponRuntimeSnapshot, build_mf_payload, generate_profile_passport_account_image, serialize_mf_payload, ) from core.weapon_vimg import generate_passport_account_image def _profile() -> DeviceProfile: g_rdi2 = "700000001::4741" return DeviceProfile( android_id="46a032e0a2af8184", local_did="ANDROID_f05497e9cef09a7f", did="ANDROID_f05497e9cef09a7f", o_did="ANDROID_46a032e0a2af8184", rdid=f"ANDROID_{hashlib.md5(g_rdi2.encode()).hexdigest()[16:32]}", g_rdi2=g_rdi2, manufacturer="OnePlus", brand="OnePlus", model="PJZ110", android_release="16", ) class WeaponMfTests(unittest.TestCase): def test_payload_uses_cloud_did_after_dfp_registration(self): profile = _profile() profile.apply_cloud_identity("ANDROID_7205d2129b5e056d", 2) payload = build_mf_payload( profile, snapshot=WeaponRuntimeSnapshot( now_ms=1785104096000, elapsed_realtime_ms=219654594, uptime_ms=127955394, boot_count=129, report_counter=4, ), ) self.assertEqual(payload["03000"], profile.did) self.assertNotEqual(profile.did, profile.local_did) def test_build_payload_matches_captured_runtime_shape(self): snapshot = WeaponRuntimeSnapshot( now_ms=1785104096000, elapsed_realtime_ms=219654594, uptime_ms=127955394, boot_count=129, report_counter=4, ) payload = build_mf_payload( _profile(), snapshot=snapshot, field_overrides={ "1021": "a_b73d864da07d7258", "83": '[{"1":1},{"2":1}]', "02008": "kvm-slave-build-s-system-11410184", "02029": "299.07", "03128": "491765592064", "03030": 60, "03006": 0, "03007": "100%", "03015": "1", "03115": 120111827, }, ) self.assertEqual(payload["03043"], 219654594) self.assertEqual(payload["03044"], 127955394) self.assertEqual(payload["03045"], 1784884441) self.assertEqual(payload["11111"], 1785104096) self.assertEqual(payload["11112"], 4) self.assertEqual(payload["03000"], "ANDROID_f05497e9cef09a7f") self.assertEqual(payload["20000"], 1) self.assertEqual( list(payload), [ "0", "3", "8", "24", "35", "30", "31", "65", "66", "68", "101", "102", "1021", "6", "47", "48", "37", "38", "45", "91", "54", "55", "79", "80", "83", "87", "89", "75", "88", "92", "98", "100", "02001", "02002", "02003", "02008", "02016", "03014", "03113", "07025", "03020", "03033", "03043", "03044", "03045", "03085", "03086", "02029", "03128", "03030", "03006", "03007", "03015", "03115", "03000", "20000", "11113", "11111", "11112", "07069", "07070", ], ) def test_serialize_payload_is_compact_java_json_order(self): payload = build_mf_payload( _profile(), snapshot=WeaponRuntimeSnapshot( now_ms=1785104096000, elapsed_realtime_ms=219654594, uptime_ms=127955394, boot_count=129, report_counter=4, ), ) serialized = serialize_mf_payload(payload) self.assertNotIn(": ", serialized) self.assertNotIn(", ", serialized) self.assertEqual(json.loads(serialized), payload) self.assertTrue(serialized.startswith('{"0":1,"3":1,"8":0')) def test_generate_profile_ticket_uses_pure_vimg_generator(self): snapshot = WeaponRuntimeSnapshot( now_ms=1785104096000, elapsed_realtime_ms=219654594, uptime_ms=127955394, boot_count=129, report_counter=4, ) payload = serialize_mf_payload(build_mf_payload(_profile(), snapshot=snapshot)) self.assertEqual( generate_profile_passport_account_image(_profile(), snapshot=snapshot), generate_passport_account_image(payload), ) if __name__ == "__main__": unittest.main()