130 lines
4.4 KiB
Python
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()
|