Files
NODEDC_PLATFORM/device-plane/packages/device-adapter-runtime/test/registry.test.mjs
T

61 lines
1.8 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
DEVICE_ADAPTER_CONTRACT_VERSION,
createDeviceAdapterRegistry,
defineDeviceAdapter,
} from "../src/index.mjs";
function adapter(adapterRef = "generic-tracker", profileRef = "generic.tracker.v1") {
return {
contractVersion: DEVICE_ADAPTER_CONTRACT_VERSION,
adapterRef,
runtimePackageRef: `@nodedc/${adapterRef}-adapter`,
profiles: [{
profileRef,
framing: { maxBufferedBytes: 64 * 1024 },
}],
createSession: () => ({}),
};
}
test("resolves only explicitly allowlisted adapter profiles", () => {
const registry = createDeviceAdapterRegistry({
adapters: [adapter()],
});
assert.deepEqual(registry.adapterRefs, ["generic-tracker"]);
assert.deepEqual(registry.profileRefs, ["generic.tracker.v1"]);
assert.equal(
registry.resolveProfile("generic.tracker.v1").adapter.adapterRef,
"generic-tracker",
);
assert.throws(
() => registry.resolveProfile("unknown.tracker.v1"),
/device_adapter_profile_not_allowlisted/,
);
});
test("rejects duplicate adapters and cross-adapter profile collisions", () => {
assert.throws(
() => createDeviceAdapterRegistry({ adapters: [adapter(), adapter()] }),
/device_adapter_registry_adapter_duplicate/,
);
assert.throws(
() => createDeviceAdapterRegistry({
adapters: [
adapter("generic-tracker", "shared.profile.v1"),
adapter("other-tracker", "shared.profile.v1"),
],
}),
/device_adapter_registry_profile_duplicate/,
);
});
test("freezes adapter metadata but keeps the session factory callable", () => {
const defined = defineDeviceAdapter(adapter());
assert.equal(Object.isFrozen(defined), true);
assert.equal(Object.isFrozen(defined.profiles[0]), true);
assert.equal(typeof defined.createSession, "function");
});