fix(edp): resolve managed reader source scope

This commit is contained in:
Codex
2026-07-19 12:28:00 +03:00
parent 0611a88971
commit 95446bdc24
10 changed files with 273 additions and 19 deletions
@@ -196,7 +196,7 @@ try {
const managedReaderToken = "ndc_edprb_managed_api_test_0123456789abcdefghijklmnopqrstuvwxyz";
const managedReaderBody = {
source: scope,
source: { ...scope, connectionId: "api-consumer-connection" },
allowedDataProductIds: [productId],
expiresAt: null,
generation: 1,
@@ -209,12 +209,25 @@ try {
]);
assert.deepEqual(managedReaderResults.map(({ value }) => value.idempotent).sort(), [false, true]);
assert.equal(managedReaderResults[0].value.readerBinding.id, managedReaderResults[1].value.readerBinding.id);
assert.equal(managedReaderResults[0].value.readerBinding.connectionId, "api-consumer-connection");
assert.equal("token" in managedReaderResults[0].value, false);
assert.equal(JSON.stringify(managedReaderResults[0].value).includes(managedReaderBody.capabilityDigest), false);
assert.deepEqual(
(await jsonRequest("/internal/data-plane/v1/reader/data-products", { token: managedReaderToken })).dataProducts.map((value) => value.id),
[productId],
);
const managedSourcePublish = await jsonRequest(`/internal/data-plane/v1/data-products/${productId}/publish`, {
method: "POST",
token: managedTokenGeneration2,
body: publish("api-managed-reader-source", "2026-07-15T11:00:00.000Z", 37.60),
});
assert.equal(managedSourcePublish.currentUpdatedCount, 1);
const managedReaderSnapshot = await jsonRequest(
`/internal/data-plane/v1/data-products/${productId}/snapshot`,
{ token: managedReaderToken },
);
assert.equal(validateDataProductSnapshot(managedReaderSnapshot).ok, true);
assert.equal(managedReaderSnapshot.facts.length, 1);
const legacyManagedReaderRevoke = await fetch(
`${baseUrl}/internal/data-plane/v1/reader-bindings/${managedReaderResults[0].value.readerBinding.id}/revoke`,
{ method: "POST", headers: { Authorization: `Bearer ${provisionerSecret}` } },
@@ -236,6 +249,31 @@ try {
});
assert.equal(rejectedManagedReader.status, 401);
const secondWriterToken = "ndc_edpwb_second_source_api_test_0123456789abcdefghijklmnopqrstuvwxyz";
await jsonRequest("/internal/data-plane/v1/writer-bindings/by-key/engine.api-connection-2.positions", {
method: "PUT",
managedSignature: true,
body: {
...managedBody,
source: { ...scope, connectionId: "api-connection-2" },
capabilityDigest: createHash("sha256").update(secondWriterToken, "utf8").digest("hex"),
},
});
const ambiguousReaderToken = "ndc_edprb_ambiguous_api_test_0123456789abcdefghijklmnopqrstuvwxyz";
const ambiguousReader = await signedFetch(
"/internal/data-plane/v1/reader-bindings/by-key/engine.api-ambiguous.positions-reader",
{
method: "PUT",
body: {
...managedReaderBody,
source: { ...scope, connectionId: "api-other-consumer" },
capabilityDigest: createHash("sha256").update(ambiguousReaderToken, "utf8").digest("hex"),
},
},
);
assert.equal(ambiguousReader.status, 409);
assert.equal((await ambiguousReader.json()).error, "managed_reader_source_scope_ambiguous");
const manualWriterBody = { source: scope, allowedDataProductIds: [productId], expiresAt: expiry };
const signedOnlyManualProvisioning = await signedFetch("/internal/data-plane/v1/writer-bindings", {
method: "POST",