Add fake-memory-reader tests for the scanner/poller

process.go's boundary functions (readMemory, findModuleBase,
productVersion, findProcessID, openProcess, closeProcessHandle) become
swappable package variables, same pattern as testExeDir in totals.go.
process_test.go builds a fakeProcess (an in-memory buffer addressed
like real process memory) to exercise signature scanning, scanModule's
chunk-overlap logic, PlayerIns confirmation by memory read (the path
Linux always takes), the save-slot read, the double-read name
confirmation rule, and rejection of raw-pointer-as-UTF16 garbage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
emmatherockandClaude Sonnet 5 committed 2026-09-18 01:48:38 -03:00
1 parent 2ba312a833
commit 66aba2fff2
3 files changed
+321 -25

No files matched your search

+10 -10
View File
@@ -122,11 +122,16 @@ local (el caso de una PC con el OBS en Linux mientras se juega en otra),
3s sin nunca llegar a `openProcess` — `setcap`/`ptrace_scope` no entran
en juego para nada en ese caso.
**Pendiente, no parte de este cambio:** testear el escáner/poller con un
lector de memoria falso. El split ya lo habilita, pero escribir esos
tests (siguiendo el patrón de variable de paquete intercambiable que ya
usa `testExeDir` en `totals.go`, no una interfaz nueva) queda para
después — ver Pendientes.
El split habilita testear el escáner/poller sin una PC con el juego
abierto: `readMemoryFn`, `findModuleBaseFn` y `productVersionFn`
(`process.go`) son variables de paquete que por defecto apuntan a las
implementaciones de plataforma, mismo patrón que `testExeDir` en
`totals.go`. `process_test.go` las pisa con un `fakeProcess` — un buffer
en memoria direccionado como memoria de proceso real — y ejercita el
escaneo de las tres firmas, el overlap de `scanModule` entre chunks de 1
MiB, la confirmación de `PlayerIns` por lectura (el camino que toma
Linux siempre, al no haber versión), el slot de guardado, y la regla de
doble lectura para confirmar el nombre del personaje.
## Offsets de memoria
@@ -272,10 +277,5 @@ No son preferencias de estilo. Cada una costó un bug en producción.
está en inglés de punta a punta, ver "Idioma del código" arriba.
- La identificación por nombre (respaldo cuando no se lee el slot) mezcla
personajes homónimos. Documentado, no resuelto.
- Testear el escáner/poller (`process.go`) con un lector de memoria
falso. El split multiplataforma (ver "Multiplataforma" arriba) ya lo
habilita — falta escribir los tests en sí, con una variable de paquete
intercambiable por función de frontera (mismo patrón que `testExeDir`
en `totals.go`), no una interfaz nueva.
- El README debería mencionar que meter todo adentro de una VPN sigue
siendo una opción perfectamente válida, TLS+pinning aparte.