openclaw / src /plugins /runtime /load-context.current-snapshot.test.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4c76b0d verified
Raw
History Blame Contribute Delete
3.99 kB
import { afterEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../../config/types.openclaw.js";
import {
getCurrentPluginMetadataSnapshot,
setGatewayPluginMetadataSnapshot,
} from "../current-plugin-metadata-snapshot.js";
import { getGatewayPluginMetadataSnapshot } from "../current-plugin-metadata-state.js";
import { resolveInstalledPluginIndexPolicyHash } from "../installed-plugin-index-policy.js";
import { clearPluginMetadataLifecycleCaches } from "../plugin-metadata-lifecycle.js";
import type { PluginMetadataSnapshot } from "../plugin-metadata-snapshot.types.js";
import { resolvePluginRuntimeLoadContext } from "./load-context.resolve.js";
const resolvePluginMetadataSnapshotMock = vi.hoisted(() => vi.fn());
vi.mock("../plugin-metadata-snapshot.js", async (importOriginal) => ({
...(await importOriginal<typeof import("../plugin-metadata-snapshot.js")>()),
resolvePluginMetadataSnapshot: resolvePluginMetadataSnapshotMock,
}));
function createSnapshot(params: {
config: OpenClawConfig;
workspaceDir: string;
}): PluginMetadataSnapshot {
const policyHash = resolveInstalledPluginIndexPolicyHash(params.config);
const index: PluginMetadataSnapshot["index"] = {
version: 1,
hostContractVersion: "test",
compatRegistryVersion: "test",
migrationVersion: 1,
policyHash,
generatedAtMs: 1,
installRecords: {},
plugins: [],
diagnostics: [],
};
return {
policyHash,
workspaceDir: params.workspaceDir,
index,
registryIndex: index,
registryDiagnostics: [],
manifestRegistry: { plugins: [], diagnostics: [] },
plugins: [],
diagnostics: [],
byPluginId: new Map(),
normalizePluginId: (pluginId) => pluginId,
declaredProviderOwners: new Map(),
owners: {
channels: new Map(),
channelConfigs: new Map(),
providers: new Map(),
modelCatalogProviders: new Map(),
cliBackends: new Map(),
setupProviders: new Map(),
commandAliases: new Map(),
contracts: new Map(),
modelIdNormalizationPolicies: new Map(),
},
metrics: {
registrySnapshotMs: 0,
manifestRegistryMs: 0,
ownerMapsMs: 0,
totalMs: 0,
indexPluginCount: 0,
manifestPluginCount: 0,
},
discovery: { candidates: [], diagnostics: [] },
};
}
describe("plugin runtime load context current snapshot ownership", () => {
afterEach(() => {
resolvePluginMetadataSnapshotMock.mockReset();
clearPluginMetadataLifecycleCaches();
});
it("keeps explicit operation metadata from replacing the Gateway startup inventory", () => {
const lifecycleConfig = { plugins: { allow: ["lifecycle"] } };
const operationConfig = { plugins: { allow: ["operation"] } };
const lifecycleWorkspace = "/workspace/lifecycle";
const operationWorkspace = "/workspace/operation";
const lifecycleSnapshot = createSnapshot({
config: lifecycleConfig,
workspaceDir: lifecycleWorkspace,
});
const operationSnapshot = createSnapshot({
config: operationConfig,
workspaceDir: operationWorkspace,
});
setGatewayPluginMetadataSnapshot(lifecycleSnapshot, {
config: lifecycleConfig,
workspaceDir: lifecycleWorkspace,
});
const context = resolvePluginRuntimeLoadContext({
config: operationConfig,
workspaceDir: operationWorkspace,
metadataSnapshot: operationSnapshot,
});
expect(context.metadataSnapshot).toBe(operationSnapshot);
expect(resolvePluginMetadataSnapshotMock).not.toHaveBeenCalled();
expect(getGatewayPluginMetadataSnapshot()).toBe(lifecycleSnapshot);
expect(
getCurrentPluginMetadataSnapshot({
config: lifecycleConfig,
workspaceDir: lifecycleWorkspace,
}),
).toBe(lifecycleSnapshot);
expect(
getCurrentPluginMetadataSnapshot({
config: operationConfig,
workspaceDir: operationWorkspace,
}),
).toBe(lifecycleSnapshot);
});
});