ksjsb/tests/test_weapon_mf.py
2026-07-30 20:25:56 +08:00

130 lines
4.4 KiB
Python

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()