fix model del & rename
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
const assert = require("node:assert/strict");
|
||||
const fs = require("node:fs");
|
||||
const os = require("node:os");
|
||||
const path = require("node:path");
|
||||
const test = require("node:test");
|
||||
const { createModelHandlers } = require("../model-handlers");
|
||||
|
||||
test("panel model kernel renames, overwrites, and deletes by fileID", async (context) => {
|
||||
const directory = await fs.promises.mkdtemp(path.join(os.tmpdir(), "reinloop-panel-model-"));
|
||||
context.after(() => fs.promises.rm(directory, { recursive: true, force: true }));
|
||||
const sourcePath = path.join(directory, "controller-original.bin");
|
||||
await fs.promises.writeFile(sourcePath, "first-version");
|
||||
|
||||
const records = new Map();
|
||||
const requests = [];
|
||||
const callServer = async (payload) => {
|
||||
requests.push(payload);
|
||||
if (payload.type === "uploadDataFile") {
|
||||
const fileID = `model://${payload.folder.replace(/\/model_config$/, "")}/${payload.modelName}`;
|
||||
if (records.has(fileID) && !payload.overwrite) throw new Error("文件已存在");
|
||||
records.set(fileID, {
|
||||
fileID,
|
||||
fileName: payload.modelName,
|
||||
originalFileName: payload.fileName
|
||||
});
|
||||
return { ...records.get(fileID), uploadMetadata: { url: `memory://${encodeURIComponent(fileID)}` } };
|
||||
}
|
||||
if (payload.type === "deleteModel") {
|
||||
const deleted = records.delete(payload.fileID);
|
||||
return { success: true, deletedCount: deleted ? 1 : 0 };
|
||||
}
|
||||
throw new Error(`unexpected request: ${payload.type}`);
|
||||
};
|
||||
const handlers = createModelHandlers({
|
||||
callServer,
|
||||
fetchImpl: async () => ({ status: 204 })
|
||||
});
|
||||
const request = {
|
||||
deviceId: "company-a/line-1",
|
||||
sourcePath,
|
||||
fileName: "controller-original.bin",
|
||||
modelName: "pressure-controller.bin",
|
||||
credentials: { adminToken: "test-token" }
|
||||
};
|
||||
|
||||
const uploaded = await handlers.upload(request);
|
||||
assert.equal(uploaded.fileName, "pressure-controller.bin");
|
||||
assert.equal(uploaded.originalFileName, "controller-original.bin");
|
||||
assert.equal(records.size, 1);
|
||||
|
||||
await fs.promises.writeFile(sourcePath, "second-version");
|
||||
const overwritten = await handlers.upload({ ...request, overwrite: true });
|
||||
assert.equal(overwritten.fileID, uploaded.fileID);
|
||||
assert.equal(records.size, 1);
|
||||
|
||||
const deleted = await handlers.delete({ fileID: overwritten.fileID, credentials: request.credentials });
|
||||
assert.equal(deleted.deletedCount, 1);
|
||||
assert.equal(records.size, 0);
|
||||
assert.equal(requests.at(-1).type, "deleteModel");
|
||||
assert.equal(requests.at(-1).fileID, overwritten.fileID);
|
||||
});
|
||||
Reference in New Issue
Block a user