mirror of
https://github.com/morluto/rea.git
synced 2026-10-19 04:19:54 -05:00
fix(android): validate engine archive prerequisites (#1145)
* fix(android): validate engine archive prerequisites * fix(android): bound engine metadata reads before allocation
This commit is contained in:
1 parent
13935077ba
commit
e9ebfb94ef
9 files changed
+180
-17
No files matched your search
@@ -1,5 +1,12 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { access, mkdtemp, mkdir, rm, symlink } from "node:fs/promises";
|
||||
import {
|
||||
access,
|
||||
mkdtemp,
|
||||
mkdir,
|
||||
rm,
|
||||
symlink,
|
||||
writeFile,
|
||||
} from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { delimiter, dirname, isAbsolute, join } from "node:path";
|
||||
import { Client } from "@modelcontextprotocol/client";
|
||||
@@ -67,6 +74,8 @@ export async function verifyAndroidFailureRecovery({
|
||||
}
|
||||
const withoutJavaHome = { ...environment };
|
||||
delete withoutJavaHome.JAVA_HOME;
|
||||
const invalidJar = join(root, "invalid.jar");
|
||||
await writeFile(invalidJar, "not a Java archive");
|
||||
const environments = [
|
||||
{
|
||||
label: "JRE without compiler",
|
||||
@@ -78,6 +87,12 @@ export async function verifyAndroidFailureRecovery({
|
||||
env: { ...withoutJavaHome, PATH: empty },
|
||||
observation: "ENOENT",
|
||||
},
|
||||
{
|
||||
label: "invalid engine archive with a working JDK",
|
||||
env: { ...environment, REA_JADX_MCP_JAR: invalidJar },
|
||||
observation: "Cannot inspect REA_JADX_MCP_JAR",
|
||||
jarFailure: true,
|
||||
},
|
||||
];
|
||||
if (process.platform === "darwin") {
|
||||
// /usr/bin/java either resolves an installed runtime or reports the actual stub failure.
|
||||
@@ -114,8 +129,16 @@ export async function verifyAndroidFailureRecovery({
|
||||
JSON.stringify(failure).includes(scenario.observation),
|
||||
JSON.stringify(failure),
|
||||
);
|
||||
assert.match(failure.message, /full JDK/u);
|
||||
assert.match(failure.remediation.action, /java --list-modules/u);
|
||||
assert.match(
|
||||
failure.message,
|
||||
scenario.jarFailure ? /REA_JADX_MCP_JAR/u : /full JDK/u,
|
||||
);
|
||||
assert.match(
|
||||
failure.remediation.action,
|
||||
scenario.jarFailure ? /jadx-headless-mcp/u : /java --list-modules/u,
|
||||
);
|
||||
if (scenario.jarFailure)
|
||||
assert.doesNotMatch(failure.message, /Select a full JDK/u);
|
||||
assert.doesNotMatch(JSON.stringify(failure), /rea doctor/u);
|
||||
await verifyAndroidReadiness({
|
||||
entrypoint,
|
||||
|
||||
Reference in new issue
Block a user