236 lines
5.9 KiB
JavaScript
236 lines
5.9 KiB
JavaScript
import { mutationRanges } from "./scripts/lib/reverse-tools-mutation-targets.mjs";
|
|
|
|
const config = {
|
|
$schema: "./node_modules/@stryker-mutator/core/schema/stryker-schema.json",
|
|
testRunner: "vitest",
|
|
plugins: [
|
|
"@stryker-mutator/typescript-checker",
|
|
"@stryker-mutator/vitest-runner",
|
|
],
|
|
vitest: {
|
|
configFile: "vitest.reverse-tools.config.ts",
|
|
related: true,
|
|
},
|
|
checkers: ["typescript"],
|
|
tsconfigFile: "tsconfig.reverse-tools-mutation.json",
|
|
typescriptChecker: {
|
|
prioritizePerformanceOverAccuracy: true,
|
|
},
|
|
coverageAnalysis: "perTest",
|
|
thresholds: { break: null },
|
|
ignorePatterns: ["/.cache/rea-command-locks/**", "/coverage/**"],
|
|
concurrency: 2,
|
|
timeoutMS: 30000,
|
|
reporters: ["clear-text", "progress", "html", "json"],
|
|
};
|
|
|
|
export default {
|
|
...config,
|
|
mutate: [
|
|
...mutationRanges("src/application/reverse/ReverseEngineeringService.ts", [
|
|
{
|
|
kind: "method",
|
|
owner: "ReverseEngineeringService",
|
|
name: "inspectWithObjdump",
|
|
},
|
|
{
|
|
kind: "method",
|
|
owner: "ReverseEngineeringService",
|
|
name: "executeRizinCommand",
|
|
},
|
|
{
|
|
kind: "method",
|
|
owner: "ReverseEngineeringService",
|
|
name: "#observe",
|
|
},
|
|
{
|
|
kind: "method",
|
|
owner: "ReverseEngineeringService",
|
|
name: "retryCleanup",
|
|
},
|
|
{
|
|
kind: "guard",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
condition: "signal?.aborted",
|
|
direct: true,
|
|
},
|
|
{
|
|
kind: "guard",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
condition: "!cleanup.ok",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
name: "absolutePath",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
name: "cleanup",
|
|
},
|
|
{
|
|
kind: "try",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
assignment: "digest",
|
|
},
|
|
{
|
|
kind: "try",
|
|
owner: "ReverseEngineeringService",
|
|
method: "#observeProvider",
|
|
callee: "this.#run",
|
|
},
|
|
{
|
|
kind: "expression",
|
|
text: "snapshot.signal !== null && snapshot.signal !== undefined",
|
|
},
|
|
]),
|
|
...mutationRanges("src/process/ExecFileOutput.ts", [
|
|
{
|
|
kind: "declaration",
|
|
name: "execFileOutputFailure",
|
|
},
|
|
]),
|
|
...mutationRanges("src/server/providerEnvironment.ts", [
|
|
{
|
|
kind: "declaration",
|
|
name: "captureProviderEnvironment",
|
|
},
|
|
]),
|
|
...mutationRanges("src/server/registerReverseEngineeringTools.ts", [
|
|
{
|
|
kind: "declaration",
|
|
name: "registerReverseEngineeringTools",
|
|
},
|
|
]),
|
|
...mutationRanges("src/gdb/GdbSessionManager.ts", [
|
|
{
|
|
kind: "constructor",
|
|
owner: "GdbCommandTimeoutError",
|
|
},
|
|
{
|
|
kind: "constructor",
|
|
owner: "GdbCommandProcessExitError",
|
|
},
|
|
{
|
|
kind: "constructor",
|
|
owner: "GdbSessionManager",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
name: "DEFAULT_MAX_SESSIONS",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
name: "session",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
name: "stdoutSettled",
|
|
},
|
|
{
|
|
kind: "call",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
callee: "launched.process.stdout?.on",
|
|
event: "data",
|
|
},
|
|
{
|
|
kind: "call",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
callee: "launched.process.stdin?.on",
|
|
event: "error",
|
|
},
|
|
{
|
|
kind: "call",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
callee: "launched.process.stdin?.once",
|
|
event: "close",
|
|
},
|
|
{
|
|
kind: "call",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
callee: "launched.process.once",
|
|
event: "exit",
|
|
},
|
|
{
|
|
kind: "guard",
|
|
owner: "GdbSessionManager",
|
|
method: "#startProtocol",
|
|
condition: "launched.process.stdout === null",
|
|
},
|
|
{
|
|
kind: "method",
|
|
owner: "GdbSessionManager",
|
|
name: "close",
|
|
},
|
|
]),
|
|
...mutationRanges("src/process/ownedDebuggerSession.ts", [
|
|
{
|
|
kind: "declaration",
|
|
name: "waitForInferiorDetach",
|
|
},
|
|
]),
|
|
...mutationRanges("src/rizin/RizinDebugSessionManager.ts", [
|
|
{
|
|
kind: "guard",
|
|
owner: "RizinDebugSessionManager",
|
|
method: "execute",
|
|
condition: "captured.outputTruncated",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "RizinDebugSessionManager",
|
|
method: "execute",
|
|
name: "result",
|
|
withinBlockWithBinding: "captured",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "RizinDebugSessionManager",
|
|
method: "execute",
|
|
name: "evidence",
|
|
withinBlockWithBinding: "captured",
|
|
},
|
|
{
|
|
kind: "declaration",
|
|
owner: "RizinDebugSessionManager",
|
|
method: "#receive",
|
|
name: "nextOffset",
|
|
},
|
|
]),
|
|
...mutationRanges("src/cli/reverseEngineeringCommands.ts", [
|
|
{
|
|
kind: "command-handler",
|
|
command: "debugWithGdb",
|
|
},
|
|
{
|
|
kind: "command-handler",
|
|
command: "debugWithRizin",
|
|
},
|
|
]),
|
|
...mutationRanges("src/cutter/CutterBridgeClient.ts", [
|
|
{
|
|
kind: "expression",
|
|
text: "status.data.current_file === undefined",
|
|
},
|
|
{
|
|
kind: "expression",
|
|
text: "response.current_file === undefined",
|
|
},
|
|
]),
|
|
],
|
|
};
|