@fluidframework/driver-utils 2.0.0-dev-rc.2.0.0.245554 → 2.0.0-dev-rc.3.0.0.250606
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -1
- package/dist/adapters/compression/documentServiceCompressionAdapter.js.map +1 -1
- package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.js +1 -1
- package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.js.map +1 -1
- package/dist/adapters/predefinedAdapters.d.ts.map +1 -1
- package/dist/adapters/predefinedAdapters.js.map +1 -1
- package/dist/blob.d.ts +1 -1
- package/dist/blob.d.ts.map +1 -1
- package/dist/blob.js.map +1 -1
- package/dist/buildSnapshotTree.d.ts.map +1 -1
- package/dist/buildSnapshotTree.js +1 -1
- package/dist/buildSnapshotTree.js.map +1 -1
- package/dist/insecureUrlResolver.d.ts.map +1 -1
- package/dist/insecureUrlResolver.js.map +1 -1
- package/dist/messageRecognition.d.ts.map +1 -1
- package/dist/messageRecognition.js +2 -2
- package/dist/messageRecognition.js.map +1 -1
- package/dist/network.d.ts +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js.map +1 -1
- package/dist/networkUtils.d.ts +1 -1
- package/dist/networkUtils.d.ts.map +1 -1
- package/dist/networkUtils.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/parallelRequests.d.ts +6 -2
- package/dist/parallelRequests.d.ts.map +1 -1
- package/dist/parallelRequests.js +2 -2
- package/dist/parallelRequests.js.map +1 -1
- package/dist/prefetchDocumentStorageService.d.ts.map +1 -1
- package/dist/prefetchDocumentStorageService.js +2 -2
- package/dist/prefetchDocumentStorageService.js.map +1 -1
- package/dist/runWithRetry.d.ts.map +1 -1
- package/dist/runWithRetry.js +1 -1
- package/dist/runWithRetry.js.map +1 -1
- package/dist/summaryForCreateNew.d.ts +1 -1
- package/dist/summaryForCreateNew.d.ts.map +1 -1
- package/dist/summaryForCreateNew.js.map +1 -1
- package/lib/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -1
- package/lib/adapters/compression/documentServiceCompressionAdapter.js.map +1 -1
- package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.js +1 -1
- package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.js.map +1 -1
- package/lib/adapters/predefinedAdapters.d.ts.map +1 -1
- package/lib/adapters/predefinedAdapters.js +1 -1
- package/lib/adapters/predefinedAdapters.js.map +1 -1
- package/lib/blob.d.ts +1 -1
- package/lib/blob.d.ts.map +1 -1
- package/lib/blob.js.map +1 -1
- package/lib/buildSnapshotTree.d.ts.map +1 -1
- package/lib/buildSnapshotTree.js +1 -1
- package/lib/buildSnapshotTree.js.map +1 -1
- package/lib/insecureUrlResolver.d.ts.map +1 -1
- package/lib/insecureUrlResolver.js.map +1 -1
- package/lib/messageRecognition.d.ts.map +1 -1
- package/lib/messageRecognition.js.map +1 -1
- package/lib/network.d.ts +1 -1
- package/lib/network.d.ts.map +1 -1
- package/lib/network.js.map +1 -1
- package/lib/networkUtils.d.ts +1 -1
- package/lib/networkUtils.d.ts.map +1 -1
- package/lib/networkUtils.js +1 -1
- package/lib/networkUtils.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/parallelRequests.d.ts +6 -2
- package/lib/parallelRequests.d.ts.map +1 -1
- package/lib/parallelRequests.js +1 -1
- package/lib/parallelRequests.js.map +1 -1
- package/lib/prefetchDocumentStorageService.d.ts.map +1 -1
- package/lib/prefetchDocumentStorageService.js.map +1 -1
- package/lib/runWithRetry.d.ts.map +1 -1
- package/lib/runWithRetry.js +2 -2
- package/lib/runWithRetry.js.map +1 -1
- package/lib/summaryForCreateNew.d.ts +1 -1
- package/lib/summaryForCreateNew.d.ts.map +1 -1
- package/lib/summaryForCreateNew.js.map +1 -1
- package/lib/test/insecureUrlResolverTest.spec.js.map +1 -1
- package/lib/test/parallelRequests.spec.js +1 -1
- package/lib/test/parallelRequests.spec.js.map +1 -1
- package/lib/test/summaryCompresssionTester.spec.js +1 -1
- package/lib/test/summaryCompresssionTester.spec.js.map +1 -1
- package/package.json +15 -12
- package/src/adapters/compression/documentServiceCompressionAdapter.ts +1 -1
- package/src/adapters/compression/documentServiceFactoryCompressionAdapter.ts +1 -1
- package/src/adapters/predefinedAdapters.ts +1 -1
- package/src/blob.ts +1 -1
- package/src/buildSnapshotTree.ts +1 -1
- package/src/insecureUrlResolver.ts +2 -2
- package/src/messageRecognition.ts +1 -0
- package/src/network.ts +4 -4
- package/src/networkUtils.ts +2 -2
- package/src/packageVersion.ts +1 -1
- package/src/parallelRequests.ts +4 -3
- package/src/prefetchDocumentStorageService.ts +1 -0
- package/src/runWithRetry.ts +2 -2
- package/src/summaryForCreateNew.ts +3 -3
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { strict as assert } from "assert";
|
|
6
|
-
import { MockLogger } from "@fluidframework/telemetry-utils";
|
|
7
6
|
import { unreachableCase } from "@fluidframework/core-utils";
|
|
7
|
+
import { MockLogger } from "@fluidframework/telemetry-utils";
|
|
8
8
|
import { ParallelRequests } from "../parallelRequests.js";
|
|
9
9
|
var HowMany;
|
|
10
10
|
(function (HowMany) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelRequests.spec.js","sourceRoot":"","sources":["../../src/test/parallelRequests.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { unreachableCase } from \"@fluidframework/core-utils\";\nimport { ParallelRequests } from \"../parallelRequests.js\";\n\nenum HowMany {\n\tExact,\n\tPartial,\n\tTooMany,\n}\n\ndescribe(\"Parallel Requests\", () => {\n\tasync function test(\n\t\tconcurrency: number,\n\t\tpayloadSize: number,\n\t\tfrom: number,\n\t\tto: number,\n\t\texpectedRequests: number,\n\t\tknownTo: boolean,\n\t\thowMany: HowMany = HowMany.Exact,\n\t) {\n\t\tlet nextElement = from;\n\t\tlet requests = 0;\n\t\tlet dispatches = 0;\n\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\tfrom,\n\t\t\tknownTo ? to : undefined,\n\t\t\tpayloadSize,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tlet length = _to - _from;\n\t\t\t\trequests++;\n\n\t\t\t\tassert(_from >= from);\n\t\t\t\tassert(length <= payloadSize);\n\t\t\t\tassert(requests <= request);\n\t\t\t\tassert(!knownTo || _to <= to);\n\n\t\t\t\tswitch (howMany) {\n\t\t\t\t\tcase HowMany.Partial:\n\t\t\t\t\t\tlength = Math.min(length, payloadSize / 2 + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HowMany.TooMany:\n\t\t\t\t\t\tlength = 2 * length + 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HowMany.Exact:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunreachableCase(howMany);\n\t\t\t\t}\n\t\t\t\t// covering knownTo === false case\n\t\t\t\tconst actualTo = Math.min(_from + length, to);\n\n\t\t\t\tconst payload: number[] = [];\n\t\t\t\tfor (let i = _from; i < actualTo; i++) {\n\t\t\t\t\tpayload.push(i);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tpartial: _from !== to && howMany === HowMany.Partial,\n\t\t\t\t\tcancel: false,\n\t\t\t\t\tpayload,\n\t\t\t\t};\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tdispatches++;\n\t\t\t\t// Big chunks are broken into smaller ones\n\t\t\t\tassert(dispatches <= requests || howMany === HowMany.TooMany);\n\t\t\t\tfor (const el of deltas) {\n\t\t\t\t\tassert(el === nextElement);\n\t\t\t\t\tnextElement++;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tawait manager.run(concurrency);\n\n\t\tassert(nextElement === to);\n\t\tassert(!knownTo || dispatches === requests);\n\t\tassert.equal(requests, expectedRequests, \"expected requests\");\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t}\n\n\tasync function testCancel(\n\t\tfrom: number,\n\t\tto: number | undefined,\n\t\tcancelAt: number,\n\t\tpayloadSize,\n\t\texpectedRequests: number,\n\t) {\n\t\tlet nextElement = from;\n\t\tlet requests = 0;\n\t\tlet dispatches = 0;\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\tfrom,\n\t\t\tto,\n\t\t\tpayloadSize,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tconst length = _to - _from;\n\t\t\t\trequests++;\n\n\t\t\t\tassert(_from >= from);\n\t\t\t\tassert(length <= payloadSize);\n\t\t\t\tassert(requests <= request);\n\t\t\t\tassert(to === undefined || _to <= to);\n\n\t\t\t\tif (_to > cancelAt) {\n\t\t\t\t\treturn { partial: false, cancel: true, payload: [] };\n\t\t\t\t}\n\n\t\t\t\tconst payload: number[] = [];\n\t\t\t\tfor (let i = _from; i < _to; i++) {\n\t\t\t\t\tpayload.push(i);\n\t\t\t\t}\n\n\t\t\t\treturn { partial: false, cancel: false, payload };\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tdispatches++;\n\t\t\t\tassert(dispatches <= requests);\n\t\t\t\tfor (const el of deltas) {\n\t\t\t\t\tassert(el === nextElement);\n\t\t\t\t\tnextElement++;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tawait manager.run(10);\n\n\t\tassert(dispatches <= requests);\n\t\tassert(requests === expectedRequests);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t}\n\n\tit(\"no concurrency, single request, over\", async () => {\n\t\tawait test(1, 100, 123, 156, 1, true);\n\t\tawait test(1, 100, 123, 156, 1, false);\n\t\tawait test(1, 100, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(1, 100, 123, 156, 1, true, HowMany.Partial);\n\t});\n\n\tit(\"no concurrency, single request, exact\", async () => {\n\t\tawait test(1, 156 - 123, 123, 156, 1, true);\n\t\tawait test(1, 156 - 123, 123, 156, 2, false);\n\t\tawait test(1, 156 - 123, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(1, 156 - 123, 123, 156, 2, true, HowMany.Partial);\n\t\tawait test(1, 156 - 123, 123, 156, 2, false, HowMany.TooMany);\n\t\tawait test(1, 156 - 123, 123, 156, 3, false, HowMany.Partial);\n\t});\n\n\tit(\"concurrency, single request, exact\", async () => {\n\t\tawait test(2, 156 - 123, 123, 156, 1, true);\n\t\tawait test(2, 156 - 123, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(2, 156 - 123, 123, 156, 2, true, HowMany.Partial);\n\t\t// here, the number of actual requests is Ok to be 2..3\n\t\tawait test(2, 156 - 123, 123, 156, 3, false);\n\t\tawait test(2, 156 - 123, 123, 156, 3, false, HowMany.TooMany);\n\t\tawait test(2, 156 - 123, 123, 156, 3, false, HowMany.Partial);\n\t});\n\n\tit(\"no concurrency, multiple requests\", async () => {\n\t\tawait test(1, 10, 123, 156, 4, true);\n\t\tawait test(1, 10, 123, 156, 4, false);\n\t\tawait test(1, 10, 123, 156, 3, false, HowMany.TooMany);\n\t});\n\n\tit(\"two concurrent requests exact\", async () => {\n\t\tawait test(2, 10, 123, 153, 3, true);\n\t\tawait test(2, 10, 123, 153, 3, true, HowMany.TooMany);\n\t\tawait test(2, 10, 123, 153, 6, true, HowMany.Partial);\n\t\tawait test(2, 10, 123, 153, 5, false);\n\t\tawait test(2, 10, 123, 153, 5, false, HowMany.TooMany);\n\t\tawait test(2, 10, 123, 153, 8, false, HowMany.Partial);\n\t});\n\n\tit(\"two concurrent requests one over\", async () => {\n\t\tawait test(2, 10, 123, 154, 4, true);\n\t\t// here, the number of actual requests is Ok to be 4..5\n\t\tawait test(2, 10, 123, 154, 5, false);\n\t});\n\n\tit(\"four concurrent requests\", async () => {\n\t\tawait test(4, 10, 123, 156, 4, true);\n\t\t// here, the number of actual requests is Ok to be 4..7\n\t\tawait test(4, 10, 123, 156, 7, false);\n\t});\n\n\tit(\"cancellation\", async () => {\n\t\tawait testCancel(1, 1000, 502, 10, 60);\n\t\tawait testCancel(1, undefined, 502, 10, 60);\n\t});\n\n\tit(\"exception in request\", async () => {\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\t1,\n\t\t\t100,\n\t\t\t10,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tthrow new Error(\"request\");\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tthrow new Error(\"response\");\n\t\t\t},\n\t\t);\n\n\t\tlet success = true;\n\t\ttry {\n\t\t\tawait manager.run(10);\n\t\t} catch (error: any) {\n\t\t\tsuccess = false;\n\t\t\tassert(error.message === \"request\");\n\t\t}\n\t\tassert(!success);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tit(\"exception in response\", async () => {\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\t1,\n\t\t\t100,\n\t\t\t10,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\treturn { cancel: false, partial: false, payload: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] };\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tthrow new Error(\"response\");\n\t\t\t},\n\t\t);\n\n\t\tlet success = true;\n\t\ttry {\n\t\t\tawait manager.run(10);\n\t\t} catch (error: any) {\n\t\t\tsuccess = false;\n\t\t\tassert(error.message === \"response\");\n\t\t}\n\t\tassert(!success);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"parallelRequests.spec.js","sourceRoot":"","sources":["../../src/test/parallelRequests.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,IAAK,OAIJ;AAJD,WAAK,OAAO;IACX,uCAAK,CAAA;IACL,2CAAO,CAAA;IACP,2CAAO,CAAA;AACR,CAAC,EAJI,OAAO,KAAP,OAAO,QAIX;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,KAAK,UAAU,IAAI,CAClB,WAAmB,EACnB,WAAmB,EACnB,IAAY,EACZ,EAAU,EACV,gBAAwB,EACxB,OAAgB,EAChB,UAAmB,OAAO,CAAC,KAAK;QAEhC,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CACnC,IAAI,EACJ,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACxB,WAAW,EACX,MAAM,CAAC,iBAAiB,EAAE,EAC1B,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACrD,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;YACzB,QAAQ,EAAE,CAAC;YAEX,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;YAC9B,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,OAAO,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;YAE9B,QAAQ,OAAO,EAAE;gBAChB,KAAK,OAAO,CAAC,OAAO;oBACnB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/C,MAAM;gBACP,KAAK,OAAO,CAAC,OAAO;oBACnB,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;oBACxB,MAAM;gBACP,KAAK,OAAO,CAAC,KAAK;oBACjB,MAAM;gBACP;oBACC,eAAe,CAAC,OAAO,CAAC,CAAC;aAC1B;YACD,kCAAkC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;YAE9C,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;YAED,OAAO;gBACN,OAAO,EAAE,KAAK,KAAK,EAAE,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO;gBACpD,MAAM,EAAE,KAAK;gBACb,OAAO;aACP,CAAC;QACH,CAAC,EACD,CAAC,MAAgB,EAAE,EAAE;YACpB,UAAU,EAAE,CAAC;YACb,0CAA0C;YAC1C,MAAM,CAAC,UAAU,IAAI,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9D,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;gBACxB,MAAM,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBAC3B,WAAW,EAAE,CAAC;aACd;QACF,CAAC,CACD,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/B,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,OAAO,IAAI,UAAU,KAAK,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;QAC9D,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,UAAU,UAAU,CACxB,IAAY,EACZ,EAAsB,EACtB,QAAgB,EAChB,WAAW,EACX,gBAAwB;QAExB,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CACnC,IAAI,EACJ,EAAE,EACF,WAAW,EACX,MAAM,CAAC,iBAAiB,EAAE,EAC1B,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3B,QAAQ,EAAE,CAAC;YAEX,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;YAC9B,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;YAEtC,IAAI,GAAG,GAAG,QAAQ,EAAE;gBACnB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;aACrD;YAED,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACnD,CAAC,EACD,CAAC,MAAgB,EAAE,EAAE;YACpB,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;YAC/B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;gBACxB,MAAM,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBAC3B,WAAW,EAAE,CAAC;aACd;QACF,CAAC,CACD,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEtB,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC;QACtC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,uDAAuD;QACvD,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,uDAAuD;QACvD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,uDAAuD;QACvD,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CACnC,CAAC,EACD,GAAG,EACH,EAAE,EACF,MAAM,CAAC,iBAAiB,EAAE,EAC1B,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,EACD,CAAC,MAAgB,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CACD,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACtB;QAAC,OAAO,KAAU,EAAE;YACpB,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;SACpC;QACD,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CACnC,CAAC,EACD,GAAG,EACH,EAAE,EACF,MAAM,CAAC,iBAAiB,EAAE,EAC1B,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;YACrD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACpF,CAAC,EACD,CAAC,MAAgB,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CACD,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACtB;QAAC,OAAO,KAAU,EAAE;YACpB,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;SACrC;QACD,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { unreachableCase } from \"@fluidframework/core-utils\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { ParallelRequests } from \"../parallelRequests.js\";\n\nenum HowMany {\n\tExact,\n\tPartial,\n\tTooMany,\n}\n\ndescribe(\"Parallel Requests\", () => {\n\tasync function test(\n\t\tconcurrency: number,\n\t\tpayloadSize: number,\n\t\tfrom: number,\n\t\tto: number,\n\t\texpectedRequests: number,\n\t\tknownTo: boolean,\n\t\thowMany: HowMany = HowMany.Exact,\n\t) {\n\t\tlet nextElement = from;\n\t\tlet requests = 0;\n\t\tlet dispatches = 0;\n\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\tfrom,\n\t\t\tknownTo ? to : undefined,\n\t\t\tpayloadSize,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tlet length = _to - _from;\n\t\t\t\trequests++;\n\n\t\t\t\tassert(_from >= from);\n\t\t\t\tassert(length <= payloadSize);\n\t\t\t\tassert(requests <= request);\n\t\t\t\tassert(!knownTo || _to <= to);\n\n\t\t\t\tswitch (howMany) {\n\t\t\t\t\tcase HowMany.Partial:\n\t\t\t\t\t\tlength = Math.min(length, payloadSize / 2 + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HowMany.TooMany:\n\t\t\t\t\t\tlength = 2 * length + 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HowMany.Exact:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunreachableCase(howMany);\n\t\t\t\t}\n\t\t\t\t// covering knownTo === false case\n\t\t\t\tconst actualTo = Math.min(_from + length, to);\n\n\t\t\t\tconst payload: number[] = [];\n\t\t\t\tfor (let i = _from; i < actualTo; i++) {\n\t\t\t\t\tpayload.push(i);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tpartial: _from !== to && howMany === HowMany.Partial,\n\t\t\t\t\tcancel: false,\n\t\t\t\t\tpayload,\n\t\t\t\t};\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tdispatches++;\n\t\t\t\t// Big chunks are broken into smaller ones\n\t\t\t\tassert(dispatches <= requests || howMany === HowMany.TooMany);\n\t\t\t\tfor (const el of deltas) {\n\t\t\t\t\tassert(el === nextElement);\n\t\t\t\t\tnextElement++;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tawait manager.run(concurrency);\n\n\t\tassert(nextElement === to);\n\t\tassert(!knownTo || dispatches === requests);\n\t\tassert.equal(requests, expectedRequests, \"expected requests\");\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t}\n\n\tasync function testCancel(\n\t\tfrom: number,\n\t\tto: number | undefined,\n\t\tcancelAt: number,\n\t\tpayloadSize,\n\t\texpectedRequests: number,\n\t) {\n\t\tlet nextElement = from;\n\t\tlet requests = 0;\n\t\tlet dispatches = 0;\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\tfrom,\n\t\t\tto,\n\t\t\tpayloadSize,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tconst length = _to - _from;\n\t\t\t\trequests++;\n\n\t\t\t\tassert(_from >= from);\n\t\t\t\tassert(length <= payloadSize);\n\t\t\t\tassert(requests <= request);\n\t\t\t\tassert(to === undefined || _to <= to);\n\n\t\t\t\tif (_to > cancelAt) {\n\t\t\t\t\treturn { partial: false, cancel: true, payload: [] };\n\t\t\t\t}\n\n\t\t\t\tconst payload: number[] = [];\n\t\t\t\tfor (let i = _from; i < _to; i++) {\n\t\t\t\t\tpayload.push(i);\n\t\t\t\t}\n\n\t\t\t\treturn { partial: false, cancel: false, payload };\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tdispatches++;\n\t\t\t\tassert(dispatches <= requests);\n\t\t\t\tfor (const el of deltas) {\n\t\t\t\t\tassert(el === nextElement);\n\t\t\t\t\tnextElement++;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tawait manager.run(10);\n\n\t\tassert(dispatches <= requests);\n\t\tassert(requests === expectedRequests);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t}\n\n\tit(\"no concurrency, single request, over\", async () => {\n\t\tawait test(1, 100, 123, 156, 1, true);\n\t\tawait test(1, 100, 123, 156, 1, false);\n\t\tawait test(1, 100, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(1, 100, 123, 156, 1, true, HowMany.Partial);\n\t});\n\n\tit(\"no concurrency, single request, exact\", async () => {\n\t\tawait test(1, 156 - 123, 123, 156, 1, true);\n\t\tawait test(1, 156 - 123, 123, 156, 2, false);\n\t\tawait test(1, 156 - 123, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(1, 156 - 123, 123, 156, 2, true, HowMany.Partial);\n\t\tawait test(1, 156 - 123, 123, 156, 2, false, HowMany.TooMany);\n\t\tawait test(1, 156 - 123, 123, 156, 3, false, HowMany.Partial);\n\t});\n\n\tit(\"concurrency, single request, exact\", async () => {\n\t\tawait test(2, 156 - 123, 123, 156, 1, true);\n\t\tawait test(2, 156 - 123, 123, 156, 1, true, HowMany.TooMany);\n\t\tawait test(2, 156 - 123, 123, 156, 2, true, HowMany.Partial);\n\t\t// here, the number of actual requests is Ok to be 2..3\n\t\tawait test(2, 156 - 123, 123, 156, 3, false);\n\t\tawait test(2, 156 - 123, 123, 156, 3, false, HowMany.TooMany);\n\t\tawait test(2, 156 - 123, 123, 156, 3, false, HowMany.Partial);\n\t});\n\n\tit(\"no concurrency, multiple requests\", async () => {\n\t\tawait test(1, 10, 123, 156, 4, true);\n\t\tawait test(1, 10, 123, 156, 4, false);\n\t\tawait test(1, 10, 123, 156, 3, false, HowMany.TooMany);\n\t});\n\n\tit(\"two concurrent requests exact\", async () => {\n\t\tawait test(2, 10, 123, 153, 3, true);\n\t\tawait test(2, 10, 123, 153, 3, true, HowMany.TooMany);\n\t\tawait test(2, 10, 123, 153, 6, true, HowMany.Partial);\n\t\tawait test(2, 10, 123, 153, 5, false);\n\t\tawait test(2, 10, 123, 153, 5, false, HowMany.TooMany);\n\t\tawait test(2, 10, 123, 153, 8, false, HowMany.Partial);\n\t});\n\n\tit(\"two concurrent requests one over\", async () => {\n\t\tawait test(2, 10, 123, 154, 4, true);\n\t\t// here, the number of actual requests is Ok to be 4..5\n\t\tawait test(2, 10, 123, 154, 5, false);\n\t});\n\n\tit(\"four concurrent requests\", async () => {\n\t\tawait test(4, 10, 123, 156, 4, true);\n\t\t// here, the number of actual requests is Ok to be 4..7\n\t\tawait test(4, 10, 123, 156, 7, false);\n\t});\n\n\tit(\"cancellation\", async () => {\n\t\tawait testCancel(1, 1000, 502, 10, 60);\n\t\tawait testCancel(1, undefined, 502, 10, 60);\n\t});\n\n\tit(\"exception in request\", async () => {\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\t1,\n\t\t\t100,\n\t\t\t10,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\tthrow new Error(\"request\");\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tthrow new Error(\"response\");\n\t\t\t},\n\t\t);\n\n\t\tlet success = true;\n\t\ttry {\n\t\t\tawait manager.run(10);\n\t\t} catch (error: any) {\n\t\t\tsuccess = false;\n\t\t\tassert(error.message === \"request\");\n\t\t}\n\t\tassert(!success);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tit(\"exception in response\", async () => {\n\t\tconst logger = new MockLogger();\n\n\t\tconst manager = new ParallelRequests<number>(\n\t\t\t1,\n\t\t\t100,\n\t\t\t10,\n\t\t\tlogger.toTelemetryLogger(),\n\t\t\tasync (request: number, _from: number, _to: number) => {\n\t\t\t\treturn { cancel: false, partial: false, payload: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] };\n\t\t\t},\n\t\t\t(deltas: number[]) => {\n\t\t\t\tthrow new Error(\"response\");\n\t\t\t},\n\t\t);\n\n\t\tlet success = true;\n\t\ttry {\n\t\t\tawait manager.run(10);\n\t\t} catch (error: any) {\n\t\t\tsuccess = false;\n\t\t\tassert(error.message === \"response\");\n\t\t}\n\t\tassert(!success);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n});\n"]}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { strict as assert } from "assert";
|
|
9
9
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
10
10
|
import { SummaryType, } from "@fluidframework/protocol-definitions";
|
|
11
|
-
import {
|
|
11
|
+
import { SummaryCompressionAlgorithm, applyStorageCompression, blobHeadersBlobName, } from "../adapters/index.js";
|
|
12
12
|
import { snapshotTree, summaryTemplate } from "./summaryCompressionData.js";
|
|
13
13
|
/**
|
|
14
14
|
* This function clones the imported summary and returns a new summary with the same content.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summaryCompresssionTester.spec.js","sourceRoot":"","sources":["../../src/test/summaryCompresssionTester.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/dot-notation */\nimport { strict as assert } from \"assert\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport {\n\tIClient,\n\tICreateBlobResponse,\n\tISnapshotTree,\n\tISummaryBlob,\n\tISummaryHandle,\n\tISummaryTree,\n\tIVersion,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tFetchSource,\n\tIDocumentDeltaConnection,\n\tIDocumentDeltaStorageService,\n\tIDocumentService,\n\tIDocumentServiceEvents,\n\tIDocumentServiceFactory,\n\tIDocumentServicePolicies,\n\tIDocumentStorageService,\n\tIDocumentStorageServicePolicies,\n\tIResolvedUrl,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport {\n\tapplyStorageCompression,\n\tICompressionStorageConfig,\n\tSummaryCompressionAlgorithm,\n\tblobHeadersBlobName,\n} from \"../adapters/index.js\";\nimport { DocumentStorageServiceProxy } from \"../documentStorageServiceProxy.js\";\nimport { snapshotTree, summaryTemplate } from \"./summaryCompressionData.js\";\n\n/**\n * This function clones the imported summary and returns a new summary with the same content.\n */\nfunction cloneSummary(): ISummaryTree {\n\treturn JSON.parse(JSON.stringify(summaryTemplate)) as ISummaryTree;\n}\n\n/**\n * This function generates the summary with the given content size. At first it clones the summary\n * template, then it generates the content with the given size by loop, which will\n * use repeated sequence from 0 to 10 to generate the content until the content size is achieved.\n * The content is stored in the header of the summary.\n * @param contentSize - The size of the content to be generated.\n */\nfunction generateSummaryWithContent(contentSize: number) {\n\tconst summary = cloneSummary();\n\tconst header = (\n\t\t(\n\t\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\t\".channels\"\n\t\t\t] as ISummaryTree\n\t\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree\n\t).tree.header;\n\tlet contentString = \"\";\n\twhile (contentString.length < contentSize) {\n\t\tif (contentString.length + 10 > contentSize) {\n\t\t\tcontentString += \"0123456789\".substring(0, contentSize - contentString.length);\n\t\t\tbreak;\n\t\t} else {\n\t\t\tcontentString += \"0123456789\";\n\t\t}\n\t}\n\theader[\"content\"] = `{\"value\": ${contentString}}`;\n\treturn summary;\n}\n\nfunction generateSummaryWithBinaryContent(startsWith: number, contentSize: number) {\n\tconst summary = cloneSummary();\n\tconst header = (\n\t\t(\n\t\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\t\".channels\"\n\t\t\t] as ISummaryTree\n\t\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree\n\t).tree.header;\n\tconst content = new Uint8Array(contentSize);\n\tcontent[0] = startsWith;\n\tfor (let i = 1; i < contentSize; i = i + 10) {\n\t\tfor (let j = 0; j < 10; j++) {\n\t\t\tcontent[i + j] = j;\n\t\t}\n\t}\n\theader[\"content\"] = content;\n\treturn summary;\n}\n\nconst misotestid: string = \"misotest-id\";\n\nconst abcContent = \"ABC\";\nclass InternalTestStorage implements IDocumentStorageService {\n\tconstructor() {}\n\tprivate _uploadedSummary: ISummaryTree | undefined;\n\n\tpolicies?: IDocumentStorageServicePolicies | undefined;\n\n\tasync getSnapshotTree(\n\t\tversion?: IVersion | undefined,\n\t\tscenarioName?: string | undefined,\n\t): Promise<ISnapshotTree | null> {\n\t\treturn JSON.parse(JSON.stringify(snapshotTree));\n\t}\n\tasync getVersions(\n\t\tversionId: string | null,\n\t\tcount: number,\n\t\tscenarioName?: string | undefined,\n\t\tfetchSource?: FetchSource | undefined,\n\t): Promise<IVersion[]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync readBlob(id: string): Promise<ArrayBufferLike> {\n\t\treturn id === misotestid\n\t\t\t? new TextEncoder().encode(abcContent)\n\t\t\t: getHeaderContent(this._uploadedSummary!);\n\t}\n\tasync uploadSummaryWithContext(\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tthis._uploadedSummary = summary;\n\t\treturn \"test\";\n\t}\n\tasync downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {\n\t\treturn this._uploadedSummary!;\n\t}\n\tdisposed?: boolean | undefined;\n\tdispose?(error?: Error | undefined): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic get uploadedSummary(): ISummaryTree | undefined {\n\t\treturn this._uploadedSummary;\n\t}\n\n\tpublic thisIsReallyOriginalStorage: string = \"yes\";\n}\n\nfunction isOriginalStorage(storage: IDocumentStorageService): boolean {\n\treturn (storage as InternalTestStorage).thisIsReallyOriginalStorage === \"yes\";\n}\n\nclass InternalTestDocumentService\n\textends TypedEventEmitter<IDocumentServiceEvents>\n\timplements IDocumentService\n{\n\tconstructor() {\n\t\tsuper();\n\t}\n\tresolvedUrl: IResolvedUrl = {} as any;\n\tpolicies?: IDocumentServicePolicies | undefined;\n\tstorage: IDocumentStorageService = new InternalTestStorage();\n\tasync connectToStorage(): Promise<IDocumentStorageService> {\n\t\treturn this.storage;\n\t}\n\tasync connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tdispose(error?: any): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\nclass InternalTestDocumentServiceFactory implements IDocumentServiceFactory {\n\tprivate readonly documentService: IDocumentService;\n\tconstructor() {\n\t\tthis.documentService = new InternalTestDocumentService();\n\t}\n\n\tasync createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger | undefined,\n\t\tclientIsSummarizer?: boolean | undefined,\n\t): Promise<IDocumentService> {\n\t\treturn this.documentService;\n\t}\n\tasync createContainer(\n\t\tcreateNewSummary: ISummaryTree | undefined,\n\t\tcreateNewResolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger | undefined,\n\t\tclientIsSummarizer?: boolean | undefined,\n\t): Promise<IDocumentService> {\n\t\treturn this.documentService;\n\t}\n}\n\nasync function buildCompressionStorage(\n\tconfig?: ICompressionStorageConfig | boolean,\n): Promise<IDocumentStorageService> {\n\t{\n\t\tconst factory: IDocumentServiceFactory = applyStorageCompression(\n\t\t\tnew InternalTestDocumentServiceFactory(),\n\t\t\tconfig,\n\t\t);\n\t\tconst documentService = await factory.createContainer(undefined, {} as any);\n\t\tconst storage = await documentService.connectToStorage();\n\t\treturn storage;\n\t}\n}\n\nconst prefixForUncompressed = 0xb0;\nconst prefixForLZ4 = 0xb1;\ndescribe(\"Summary Compression Test\", () => {\n\tit(\"Verify Proper Summary Generation\", async () => {\n\t\tconst summary = generateSummaryWithContent(1000000);\n\t\tconst content = getHeaderContent(summary);\n\t\tassert(\n\t\t\tcontent.length === 1000000 + 11,\n\t\t\t`The content size is ${content.length} and should be 1000011`,\n\t\t);\n\t});\n\tit(\"Verify Config True\", async () => {\n\t\tconst storage = await buildCompressionStorage(true);\n\t\tcheckCompressionConfig(storage, 500, SummaryCompressionAlgorithm.LZ4);\n\t});\n\tit(\"Verify Config False\", async () => {\n\t\tconst storage = await buildCompressionStorage(false);\n\t\tconst config = (storage as any)._config;\n\t\tassert(config === undefined, \"The storage has compression\");\n\t\tassert(isOriginalStorage(storage), \"The storage is not the original storage\");\n\t});\n\tit(\"Verify Config Empty\", async () => {\n\t\tconst storage = await buildCompressionStorage();\n\t\tconst config = (storage as any)._config;\n\t\tassert(config === undefined, \"The storage has compression\");\n\t\tassert(isOriginalStorage(storage), \"The storage is not the original storage\");\n\t});\n\tit(\"Verify Config Object (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 763,\n\t\t};\n\t\tconst storage = await buildCompressionStorage(config);\n\t\tcheckCompressionConfig(storage, 763, SummaryCompressionAlgorithm.None);\n\t});\n\n\tit(\"Verify Compressed Markup at Summary (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\t\tconst summary = generateSummaryWithContent(1000);\n\t\tawait storage.uploadSummaryWithContext(summary, {\n\t\t\treferenceSequenceNumber: 0,\n\t\t\tproposalHandle: \"test\",\n\t\t\tackHandle: \"test\",\n\t\t});\n\t\tconst uploadedSummary = ((storage as any).service as InternalTestStorage).uploadedSummary;\n\t\tassert(\n\t\t\tuploadedSummary?.tree[blobHeadersBlobName] !== undefined,\n\t\t\t\"The summary-blob markup is not added\",\n\t\t);\n\t});\n\n\tit(\"Verify Blob Enc/Dec Symmetry (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkEncDec(config);\n\t});\n\n\tit(\"Verify Blob Enc/Dec no-compress Symmetry (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkEncDec(config);\n\t});\n\n\tit(\"Verify Upload / Download Summary (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkUploadDownloadSummary(config);\n\t});\n\n\tit(\"Verify Upload / Download Summary no-compress (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkUploadDownloadSummary(config);\n\t});\n\n\tit(\"Verify no-compress small (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\t\tconst summary = generateSummaryWithContent(300);\n\t\tawait storage.uploadSummaryWithContext(summary, {\n\t\t\treferenceSequenceNumber: 0,\n\t\t\tproposalHandle: \"test\",\n\t\t\tackHandle: \"test\",\n\t\t});\n\t\tconst originalContent = getHeaderContent(summary);\n\t\tconst content = new TextDecoder().decode(await storage.readBlob(\"1234\"));\n\t\tassert(\n\t\t\tcontent === originalContent,\n\t\t\t`The content is not equal to original content \\n${content} \\n ${originalContent}`,\n\t\t);\n\t});\n\n\tit(\"Verify no-compress prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst firstOriginalByte = 0xb3;\n\t\tconst contentSize = 30;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tconst secondByte = uploadedContent[1];\n\t\tassert(\n\t\t\tfirstByte === prefixForUncompressed,\n\t\t\t`The first byte should be ${prefixForUncompressed} but is ${firstByte}`,\n\t\t);\n\t\tassert(\n\t\t\tsecondByte === firstOriginalByte,\n\t\t\t`The second byte should be ${firstOriginalByte} but is ${secondByte}`,\n\t\t);\n\t});\n\n\tit(\"Verify compress prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst firstOriginalByte = 0xb3;\n\t\tconst contentSize = 800;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(\n\t\t\tfirstByte === prefixForLZ4,\n\t\t\t`The first byte should be ${prefixForLZ4} but is ${firstByte}`,\n\t\t);\n\t});\n\n\tit(\"Verify no-compress no-prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testNoPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify none-algorithm no-prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testNoPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify prefix compressed (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify prefix uncompressed small size (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testPrefix(contentSize, config, 0xb0, 0xc0, prefixForUncompressed);\n\t});\n\n\tit(\"Verify prefix uncompressed algorithm none (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testPrefix(contentSize, config, 0xb0, 0xc0, prefixForUncompressed);\n\t});\n\n\tit(\"Verify enc / dec compressed loop (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n\n\tit(\"Verify enc / dec uncompressed loop - algorithm none (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n\n\tit(\"Verify enc / dec uncompressed loop - small (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n});\nasync function testNoPrefix(contentSize: number, config: ICompressionStorageConfig) {\n\tfor (let i = 0; i < 256; i++) {\n\t\tif (i >= 0xb0 && i <= 0xbf) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst firstOriginalByte = i;\n\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(\n\t\t\tfirstByte === firstOriginalByte,\n\t\t\t`The first byte should be ${firstOriginalByte} but is ${firstByte}`,\n\t\t);\n\t}\n}\n\nasync function testPrefix(\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n\tfrom: number = 0,\n\tto: number = 256,\n\tprefix: number = prefixForLZ4,\n) {\n\tfor (let i = from; i < to; i++) {\n\t\tconst firstOriginalByte = i;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(firstByte === prefix, `The first byte should be ${prefix} but is ${firstByte}`);\n\t}\n}\n\nasync function uploadSummaryWithBinaryContent(\n\tfirstOriginalByte: number,\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n) {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst summary = generateSummaryWithBinaryContent(firstOriginalByte, contentSize);\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tconst uploadedSummary = ((storage as any).service as InternalTestStorage).uploadedSummary;\n\tconst uploadedContent: ArrayBufferLike = getHeaderContent(uploadedSummary!);\n\treturn uploadedContent;\n}\n\nasync function checkUploadDownloadSummary(\n\tconfig: ICompressionStorageConfig,\n): Promise<ISummaryTree> {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst summary = generateSummaryWithContent(1000);\n\tconst originBlobContent = getHeaderContent(summary);\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tawait storage.getSnapshotTree({ id: \"test\", treeId: \"test\" }, \"test\");\n\tconst summaryHandle: ISummaryHandle = {\n\t\ttype: SummaryType.Handle,\n\t\thandleType: SummaryType.Tree,\n\t\thandle: \"test\",\n\t};\n\tconst downloadedSummary: ISummaryTree = await storage.downloadSummary(summaryHandle);\n\tconst downloadedBlobContentBin = getHeaderContent(downloadedSummary);\n\t// const blobStr = new TextDecoder().decode(blob);\n\tconst downloadedBlobContent = new TextDecoder().decode(downloadedBlobContentBin);\n\tassert(\n\t\toriginBlobContent === downloadedBlobContent,\n\t\t`The origin and the downloaded blob are not the same\n\t\t\\norigin : ${originBlobContent} \n\t\t\\ndownloaded : ${downloadedBlobContent}`,\n\t);\n\treturn downloadedSummary;\n}\n\nasync function checkEncDec(config: ICompressionStorageConfig) {\n\tconst summary = generateSummaryWithContent(1000);\n\tawait checkEncDecConfigurable(summary, config);\n}\n\nasync function checkEncDecBinary(\n\tconfig: ICompressionStorageConfig,\n\tstartsWith: number,\n\tcontentSize: number,\n) {\n\tconst summary = generateSummaryWithBinaryContent(startsWith, contentSize);\n\tawait checkEncDecConfigurable(summary, config, startsWith);\n}\n\nasync function testEncDecBinaryLoop(\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n\tfrom: number = 0,\n\tto: number = 256,\n) {\n\tfor (let i = from; i < to; i++) {\n\t\tconst firstOriginalByte = i;\n\t\tawait checkEncDecBinary(config, firstOriginalByte, contentSize);\n\t}\n}\n\nfunction compareTwoBlobs(blob1: ArrayBufferLike, blob2: ArrayBufferLike): boolean {\n\tconst blob1View = new Uint8Array(blob1);\n\tconst blob2View = new Uint8Array(blob2);\n\tif (blob1View.length !== blob2View.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < blob1View.length; i++) {\n\t\tif (blob1View[i] !== blob2View[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nasync function checkEncDecConfigurable(\n\tsummary: ISummaryTree,\n\tconfig: ICompressionStorageConfig,\n\tstartsWith = -1,\n) {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst originHeaderHolder: ISummaryTree = getHeaderHolder(summary);\n\tconst originBlob = (originHeaderHolder.tree.header as ISummaryBlob).content;\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tawait storage.getSnapshotTree({ id: \"test\", treeId: \"test\" }, \"test\");\n\tconst blob: ArrayBufferLike = await storage.readBlob(\"abcd\");\n\tif (typeof originBlob === \"string\") {\n\t\tconst blobStr = new TextDecoder().decode(blob);\n\t\tassert(\n\t\t\tblobStr === originBlob,\n\t\t\t`The origin and the downloaded blob starting with ${startsWith} are not the same \\n\\n\\n${blobStr}\\n\\n${originBlob}`,\n\t\t);\n\t} else {\n\t\tassert(\n\t\t\tcompareTwoBlobs(blob, originBlob),\n\t\t\t`The origin and the downloaded blob are not the same \\n\\n\\n${blob.byteLength}\\n\\n${originBlob.byteLength}. \n\t\t\tThe first bytes are ${blob[0]} and ${originBlob[0]}`,\n\t\t);\n\t}\n}\n\nfunction checkCompressionConfig(\n\tstorage: IDocumentStorageService,\n\texpectedMinSizeToCompress: number,\n\texpectedAlgorithm: SummaryCompressionAlgorithm,\n) {\n\tconst config = (storage as any)._config;\n\tassert(config !== undefined, \"The storage has no compression\");\n\tassert(\n\t\t(config.minSizeToCompress === expectedMinSizeToCompress,\n\t\t`Unexpected minSizeToCompress config ${config.minSizeToCompress}`),\n\t);\n\tassert(\n\t\t(config.algorithmm === expectedAlgorithm,\n\t\t`Unexpected minSizeToCompress config ${config.algorithmm}`),\n\t);\n}\n\nfunction getHeaderContent(summary: ISummaryTree) {\n\treturn getHeader(summary)[\"content\"];\n}\n\nfunction getHeader(summary: ISummaryTree) {\n\treturn getHeaderHolder(summary).tree.header;\n}\n\nfunction getHeaderHolder(summary: ISummaryTree) {\n\treturn (\n\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\".channels\"\n\t\t] as ISummaryTree\n\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"summaryCompresssionTester.spec.js","sourceRoot":"","sources":["../../src/test/summaryCompresssionTester.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/dot-notation */\nimport { strict as assert } from \"assert\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport {\n\tFetchSource,\n\tIDocumentDeltaConnection,\n\tIDocumentDeltaStorageService,\n\tIDocumentService,\n\tIDocumentServiceEvents,\n\tIDocumentServiceFactory,\n\tIDocumentServicePolicies,\n\tIDocumentStorageService,\n\tIDocumentStorageServicePolicies,\n\tIResolvedUrl,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tIClient,\n\tICreateBlobResponse,\n\tISnapshotTree,\n\tISummaryBlob,\n\tISummaryHandle,\n\tISummaryTree,\n\tIVersion,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tICompressionStorageConfig,\n\tSummaryCompressionAlgorithm,\n\tapplyStorageCompression,\n\tblobHeadersBlobName,\n} from \"../adapters/index.js\";\nimport { DocumentStorageServiceProxy } from \"../documentStorageServiceProxy.js\";\nimport { snapshotTree, summaryTemplate } from \"./summaryCompressionData.js\";\n\n/**\n * This function clones the imported summary and returns a new summary with the same content.\n */\nfunction cloneSummary(): ISummaryTree {\n\treturn JSON.parse(JSON.stringify(summaryTemplate)) as ISummaryTree;\n}\n\n/**\n * This function generates the summary with the given content size. At first it clones the summary\n * template, then it generates the content with the given size by loop, which will\n * use repeated sequence from 0 to 10 to generate the content until the content size is achieved.\n * The content is stored in the header of the summary.\n * @param contentSize - The size of the content to be generated.\n */\nfunction generateSummaryWithContent(contentSize: number) {\n\tconst summary = cloneSummary();\n\tconst header = (\n\t\t(\n\t\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\t\".channels\"\n\t\t\t] as ISummaryTree\n\t\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree\n\t).tree.header;\n\tlet contentString = \"\";\n\twhile (contentString.length < contentSize) {\n\t\tif (contentString.length + 10 > contentSize) {\n\t\t\tcontentString += \"0123456789\".substring(0, contentSize - contentString.length);\n\t\t\tbreak;\n\t\t} else {\n\t\t\tcontentString += \"0123456789\";\n\t\t}\n\t}\n\theader[\"content\"] = `{\"value\": ${contentString}}`;\n\treturn summary;\n}\n\nfunction generateSummaryWithBinaryContent(startsWith: number, contentSize: number) {\n\tconst summary = cloneSummary();\n\tconst header = (\n\t\t(\n\t\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\t\".channels\"\n\t\t\t] as ISummaryTree\n\t\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree\n\t).tree.header;\n\tconst content = new Uint8Array(contentSize);\n\tcontent[0] = startsWith;\n\tfor (let i = 1; i < contentSize; i = i + 10) {\n\t\tfor (let j = 0; j < 10; j++) {\n\t\t\tcontent[i + j] = j;\n\t\t}\n\t}\n\theader[\"content\"] = content;\n\treturn summary;\n}\n\nconst misotestid: string = \"misotest-id\";\n\nconst abcContent = \"ABC\";\nclass InternalTestStorage implements IDocumentStorageService {\n\tconstructor() {}\n\tprivate _uploadedSummary: ISummaryTree | undefined;\n\n\tpolicies?: IDocumentStorageServicePolicies | undefined;\n\n\tasync getSnapshotTree(\n\t\tversion?: IVersion | undefined,\n\t\tscenarioName?: string | undefined,\n\t): Promise<ISnapshotTree | null> {\n\t\treturn JSON.parse(JSON.stringify(snapshotTree));\n\t}\n\tasync getVersions(\n\t\tversionId: string | null,\n\t\tcount: number,\n\t\tscenarioName?: string | undefined,\n\t\tfetchSource?: FetchSource | undefined,\n\t): Promise<IVersion[]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync readBlob(id: string): Promise<ArrayBufferLike> {\n\t\treturn id === misotestid\n\t\t\t? new TextEncoder().encode(abcContent)\n\t\t\t: getHeaderContent(this._uploadedSummary!);\n\t}\n\tasync uploadSummaryWithContext(\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tthis._uploadedSummary = summary;\n\t\treturn \"test\";\n\t}\n\tasync downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {\n\t\treturn this._uploadedSummary!;\n\t}\n\tdisposed?: boolean | undefined;\n\tdispose?(error?: Error | undefined): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic get uploadedSummary(): ISummaryTree | undefined {\n\t\treturn this._uploadedSummary;\n\t}\n\n\tpublic thisIsReallyOriginalStorage: string = \"yes\";\n}\n\nfunction isOriginalStorage(storage: IDocumentStorageService): boolean {\n\treturn (storage as InternalTestStorage).thisIsReallyOriginalStorage === \"yes\";\n}\n\nclass InternalTestDocumentService\n\textends TypedEventEmitter<IDocumentServiceEvents>\n\timplements IDocumentService\n{\n\tconstructor() {\n\t\tsuper();\n\t}\n\tresolvedUrl: IResolvedUrl = {} as any;\n\tpolicies?: IDocumentServicePolicies | undefined;\n\tstorage: IDocumentStorageService = new InternalTestStorage();\n\tasync connectToStorage(): Promise<IDocumentStorageService> {\n\t\treturn this.storage;\n\t}\n\tasync connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tasync connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tdispose(error?: any): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\nclass InternalTestDocumentServiceFactory implements IDocumentServiceFactory {\n\tprivate readonly documentService: IDocumentService;\n\tconstructor() {\n\t\tthis.documentService = new InternalTestDocumentService();\n\t}\n\n\tasync createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger | undefined,\n\t\tclientIsSummarizer?: boolean | undefined,\n\t): Promise<IDocumentService> {\n\t\treturn this.documentService;\n\t}\n\tasync createContainer(\n\t\tcreateNewSummary: ISummaryTree | undefined,\n\t\tcreateNewResolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger | undefined,\n\t\tclientIsSummarizer?: boolean | undefined,\n\t): Promise<IDocumentService> {\n\t\treturn this.documentService;\n\t}\n}\n\nasync function buildCompressionStorage(\n\tconfig?: ICompressionStorageConfig | boolean,\n): Promise<IDocumentStorageService> {\n\t{\n\t\tconst factory: IDocumentServiceFactory = applyStorageCompression(\n\t\t\tnew InternalTestDocumentServiceFactory(),\n\t\t\tconfig,\n\t\t);\n\t\tconst documentService = await factory.createContainer(undefined, {} as any);\n\t\tconst storage = await documentService.connectToStorage();\n\t\treturn storage;\n\t}\n}\n\nconst prefixForUncompressed = 0xb0;\nconst prefixForLZ4 = 0xb1;\ndescribe(\"Summary Compression Test\", () => {\n\tit(\"Verify Proper Summary Generation\", async () => {\n\t\tconst summary = generateSummaryWithContent(1000000);\n\t\tconst content = getHeaderContent(summary);\n\t\tassert(\n\t\t\tcontent.length === 1000000 + 11,\n\t\t\t`The content size is ${content.length} and should be 1000011`,\n\t\t);\n\t});\n\tit(\"Verify Config True\", async () => {\n\t\tconst storage = await buildCompressionStorage(true);\n\t\tcheckCompressionConfig(storage, 500, SummaryCompressionAlgorithm.LZ4);\n\t});\n\tit(\"Verify Config False\", async () => {\n\t\tconst storage = await buildCompressionStorage(false);\n\t\tconst config = (storage as any)._config;\n\t\tassert(config === undefined, \"The storage has compression\");\n\t\tassert(isOriginalStorage(storage), \"The storage is not the original storage\");\n\t});\n\tit(\"Verify Config Empty\", async () => {\n\t\tconst storage = await buildCompressionStorage();\n\t\tconst config = (storage as any)._config;\n\t\tassert(config === undefined, \"The storage has compression\");\n\t\tassert(isOriginalStorage(storage), \"The storage is not the original storage\");\n\t});\n\tit(\"Verify Config Object (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 763,\n\t\t};\n\t\tconst storage = await buildCompressionStorage(config);\n\t\tcheckCompressionConfig(storage, 763, SummaryCompressionAlgorithm.None);\n\t});\n\n\tit(\"Verify Compressed Markup at Summary (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\t\tconst summary = generateSummaryWithContent(1000);\n\t\tawait storage.uploadSummaryWithContext(summary, {\n\t\t\treferenceSequenceNumber: 0,\n\t\t\tproposalHandle: \"test\",\n\t\t\tackHandle: \"test\",\n\t\t});\n\t\tconst uploadedSummary = ((storage as any).service as InternalTestStorage).uploadedSummary;\n\t\tassert(\n\t\t\tuploadedSummary?.tree[blobHeadersBlobName] !== undefined,\n\t\t\t\"The summary-blob markup is not added\",\n\t\t);\n\t});\n\n\tit(\"Verify Blob Enc/Dec Symmetry (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkEncDec(config);\n\t});\n\n\tit(\"Verify Blob Enc/Dec no-compress Symmetry (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkEncDec(config);\n\t});\n\n\tit(\"Verify Upload / Download Summary (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkUploadDownloadSummary(config);\n\t});\n\n\tit(\"Verify Upload / Download Summary no-compress (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tawait checkUploadDownloadSummary(config);\n\t});\n\n\tit(\"Verify no-compress small (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\t\tconst summary = generateSummaryWithContent(300);\n\t\tawait storage.uploadSummaryWithContext(summary, {\n\t\t\treferenceSequenceNumber: 0,\n\t\t\tproposalHandle: \"test\",\n\t\t\tackHandle: \"test\",\n\t\t});\n\t\tconst originalContent = getHeaderContent(summary);\n\t\tconst content = new TextDecoder().decode(await storage.readBlob(\"1234\"));\n\t\tassert(\n\t\t\tcontent === originalContent,\n\t\t\t`The content is not equal to original content \\n${content} \\n ${originalContent}`,\n\t\t);\n\t});\n\n\tit(\"Verify no-compress prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst firstOriginalByte = 0xb3;\n\t\tconst contentSize = 30;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tconst secondByte = uploadedContent[1];\n\t\tassert(\n\t\t\tfirstByte === prefixForUncompressed,\n\t\t\t`The first byte should be ${prefixForUncompressed} but is ${firstByte}`,\n\t\t);\n\t\tassert(\n\t\t\tsecondByte === firstOriginalByte,\n\t\t\t`The second byte should be ${firstOriginalByte} but is ${secondByte}`,\n\t\t);\n\t});\n\n\tit(\"Verify compress prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst firstOriginalByte = 0xb3;\n\t\tconst contentSize = 800;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(\n\t\t\tfirstByte === prefixForLZ4,\n\t\t\t`The first byte should be ${prefixForLZ4} but is ${firstByte}`,\n\t\t);\n\t});\n\n\tit(\"Verify no-compress no-prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testNoPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify none-algorithm no-prefix (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testNoPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify prefix compressed (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testPrefix(contentSize, config);\n\t});\n\n\tit(\"Verify prefix uncompressed small size (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testPrefix(contentSize, config, 0xb0, 0xc0, prefixForUncompressed);\n\t});\n\n\tit(\"Verify prefix uncompressed algorithm none (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testPrefix(contentSize, config, 0xb0, 0xc0, prefixForUncompressed);\n\t});\n\n\tit(\"Verify enc / dec compressed loop (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.LZ4,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n\n\tit(\"Verify enc / dec uncompressed loop - algorithm none (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 800;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n\n\tit(\"Verify enc / dec uncompressed loop - small (summary-blob markup)\", async () => {\n\t\tconst config: ICompressionStorageConfig = {\n\t\t\talgorithm: SummaryCompressionAlgorithm.None,\n\t\t\tminSizeToCompress: 500,\n\t\t};\n\t\tconst contentSize = 30;\n\t\tawait testEncDecBinaryLoop(contentSize, config);\n\t});\n});\nasync function testNoPrefix(contentSize: number, config: ICompressionStorageConfig) {\n\tfor (let i = 0; i < 256; i++) {\n\t\tif (i >= 0xb0 && i <= 0xbf) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst firstOriginalByte = i;\n\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(\n\t\t\tfirstByte === firstOriginalByte,\n\t\t\t`The first byte should be ${firstOriginalByte} but is ${firstByte}`,\n\t\t);\n\t}\n}\n\nasync function testPrefix(\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n\tfrom: number = 0,\n\tto: number = 256,\n\tprefix: number = prefixForLZ4,\n) {\n\tfor (let i = from; i < to; i++) {\n\t\tconst firstOriginalByte = i;\n\t\tconst uploadedContent: ArrayBufferLike = await uploadSummaryWithBinaryContent(\n\t\t\tfirstOriginalByte,\n\t\t\tcontentSize,\n\t\t\tconfig,\n\t\t);\n\t\tconst firstByte = uploadedContent[0];\n\t\tassert(firstByte === prefix, `The first byte should be ${prefix} but is ${firstByte}`);\n\t}\n}\n\nasync function uploadSummaryWithBinaryContent(\n\tfirstOriginalByte: number,\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n) {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst summary = generateSummaryWithBinaryContent(firstOriginalByte, contentSize);\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tconst uploadedSummary = ((storage as any).service as InternalTestStorage).uploadedSummary;\n\tconst uploadedContent: ArrayBufferLike = getHeaderContent(uploadedSummary!);\n\treturn uploadedContent;\n}\n\nasync function checkUploadDownloadSummary(\n\tconfig: ICompressionStorageConfig,\n): Promise<ISummaryTree> {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst summary = generateSummaryWithContent(1000);\n\tconst originBlobContent = getHeaderContent(summary);\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tawait storage.getSnapshotTree({ id: \"test\", treeId: \"test\" }, \"test\");\n\tconst summaryHandle: ISummaryHandle = {\n\t\ttype: SummaryType.Handle,\n\t\thandleType: SummaryType.Tree,\n\t\thandle: \"test\",\n\t};\n\tconst downloadedSummary: ISummaryTree = await storage.downloadSummary(summaryHandle);\n\tconst downloadedBlobContentBin = getHeaderContent(downloadedSummary);\n\t// const blobStr = new TextDecoder().decode(blob);\n\tconst downloadedBlobContent = new TextDecoder().decode(downloadedBlobContentBin);\n\tassert(\n\t\toriginBlobContent === downloadedBlobContent,\n\t\t`The origin and the downloaded blob are not the same\n\t\t\\norigin : ${originBlobContent} \n\t\t\\ndownloaded : ${downloadedBlobContent}`,\n\t);\n\treturn downloadedSummary;\n}\n\nasync function checkEncDec(config: ICompressionStorageConfig) {\n\tconst summary = generateSummaryWithContent(1000);\n\tawait checkEncDecConfigurable(summary, config);\n}\n\nasync function checkEncDecBinary(\n\tconfig: ICompressionStorageConfig,\n\tstartsWith: number,\n\tcontentSize: number,\n) {\n\tconst summary = generateSummaryWithBinaryContent(startsWith, contentSize);\n\tawait checkEncDecConfigurable(summary, config, startsWith);\n}\n\nasync function testEncDecBinaryLoop(\n\tcontentSize: number,\n\tconfig: ICompressionStorageConfig,\n\tfrom: number = 0,\n\tto: number = 256,\n) {\n\tfor (let i = from; i < to; i++) {\n\t\tconst firstOriginalByte = i;\n\t\tawait checkEncDecBinary(config, firstOriginalByte, contentSize);\n\t}\n}\n\nfunction compareTwoBlobs(blob1: ArrayBufferLike, blob2: ArrayBufferLike): boolean {\n\tconst blob1View = new Uint8Array(blob1);\n\tconst blob2View = new Uint8Array(blob2);\n\tif (blob1View.length !== blob2View.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < blob1View.length; i++) {\n\t\tif (blob1View[i] !== blob2View[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nasync function checkEncDecConfigurable(\n\tsummary: ISummaryTree,\n\tconfig: ICompressionStorageConfig,\n\tstartsWith = -1,\n) {\n\tconst storage = (await buildCompressionStorage(config)) as DocumentStorageServiceProxy;\n\tconst originHeaderHolder: ISummaryTree = getHeaderHolder(summary);\n\tconst originBlob = (originHeaderHolder.tree.header as ISummaryBlob).content;\n\tawait storage.uploadSummaryWithContext(summary, {\n\t\treferenceSequenceNumber: 0,\n\t\tproposalHandle: \"test\",\n\t\tackHandle: \"test\",\n\t});\n\tawait storage.getSnapshotTree({ id: \"test\", treeId: \"test\" }, \"test\");\n\tconst blob: ArrayBufferLike = await storage.readBlob(\"abcd\");\n\tif (typeof originBlob === \"string\") {\n\t\tconst blobStr = new TextDecoder().decode(blob);\n\t\tassert(\n\t\t\tblobStr === originBlob,\n\t\t\t`The origin and the downloaded blob starting with ${startsWith} are not the same \\n\\n\\n${blobStr}\\n\\n${originBlob}`,\n\t\t);\n\t} else {\n\t\tassert(\n\t\t\tcompareTwoBlobs(blob, originBlob),\n\t\t\t`The origin and the downloaded blob are not the same \\n\\n\\n${blob.byteLength}\\n\\n${originBlob.byteLength}. \n\t\t\tThe first bytes are ${blob[0]} and ${originBlob[0]}`,\n\t\t);\n\t}\n}\n\nfunction checkCompressionConfig(\n\tstorage: IDocumentStorageService,\n\texpectedMinSizeToCompress: number,\n\texpectedAlgorithm: SummaryCompressionAlgorithm,\n) {\n\tconst config = (storage as any)._config;\n\tassert(config !== undefined, \"The storage has no compression\");\n\tassert(\n\t\t(config.minSizeToCompress === expectedMinSizeToCompress,\n\t\t`Unexpected minSizeToCompress config ${config.minSizeToCompress}`),\n\t);\n\tassert(\n\t\t(config.algorithmm === expectedAlgorithm,\n\t\t`Unexpected minSizeToCompress config ${config.algorithmm}`),\n\t);\n}\n\nfunction getHeaderContent(summary: ISummaryTree) {\n\treturn getHeader(summary)[\"content\"];\n}\n\nfunction getHeader(summary: ISummaryTree) {\n\treturn getHeaderHolder(summary).tree.header;\n}\n\nfunction getHeaderHolder(summary: ISummaryTree) {\n\treturn (\n\t\t((summary.tree[\".channels\"] as ISummaryTree).tree.rootDOId as ISummaryTree).tree[\n\t\t\t\".channels\"\n\t\t] as ISummaryTree\n\t).tree[\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\"] as ISummaryTree;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/driver-utils",
|
|
3
|
-
"version": "2.0.0-dev-rc.
|
|
3
|
+
"version": "2.0.0-dev-rc.3.0.0.250606",
|
|
4
4
|
"description": "Collection of utility functions for Fluid drivers",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -77,21 +77,22 @@
|
|
|
77
77
|
"temp-directory": "nyc/.nyc_output"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@fluid-internal/client-utils": "2.0.0-dev-rc.
|
|
81
|
-
"@fluidframework/core-interfaces": "2.0.0-dev-rc.
|
|
82
|
-
"@fluidframework/core-utils": "2.0.0-dev-rc.
|
|
83
|
-
"@fluidframework/driver-definitions": "2.0.0-dev-rc.
|
|
80
|
+
"@fluid-internal/client-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
81
|
+
"@fluidframework/core-interfaces": "2.0.0-dev-rc.3.0.0.250606",
|
|
82
|
+
"@fluidframework/core-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
83
|
+
"@fluidframework/driver-definitions": "2.0.0-dev-rc.3.0.0.250606",
|
|
84
84
|
"@fluidframework/gitresources": "^4.0.0",
|
|
85
85
|
"@fluidframework/protocol-base": "^4.0.0",
|
|
86
86
|
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
87
|
-
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.
|
|
87
|
+
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
88
88
|
"axios": "^1.6.2",
|
|
89
89
|
"lz4js": "^0.2.0",
|
|
90
90
|
"uuid": "^9.0.0"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@arethetypeswrong/cli": "^0.13.3",
|
|
94
|
-
"@
|
|
94
|
+
"@biomejs/biome": "^1.6.2",
|
|
95
|
+
"@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.3.0.0.250606",
|
|
95
96
|
"@fluid-tools/build-cli": "^0.34.0",
|
|
96
97
|
"@fluidframework/build-common": "^2.0.3",
|
|
97
98
|
"@fluidframework/build-tools": "^0.34.0",
|
|
@@ -153,16 +154,18 @@
|
|
|
153
154
|
"build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
|
|
154
155
|
"build:test:esm": "tsc --project ./src/test/tsconfig.json",
|
|
155
156
|
"check:are-the-types-wrong": "attw --pack . --entrypoints .",
|
|
157
|
+
"check:biome": "biome check .",
|
|
158
|
+
"check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
|
|
156
159
|
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
157
160
|
"ci:build:docs": "api-extractor run",
|
|
158
161
|
"clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
|
|
159
162
|
"eslint": "eslint --format stylish src",
|
|
160
163
|
"eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
|
|
161
|
-
"format": "
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
164
|
+
"format": "fluid-build --task format .",
|
|
165
|
+
"format:biome": "biome check --apply .",
|
|
166
|
+
"format:prettier": "prettier --write . --cache --ignore-path ../../../.prettierignore",
|
|
167
|
+
"lint": "fluid-build . --task lint",
|
|
168
|
+
"lint:fix": "fluid-build . --task eslint:fix --task format",
|
|
166
169
|
"test": "npm run test:mocha",
|
|
167
170
|
"test:coverage": "c8 npm test",
|
|
168
171
|
"test:mocha": "npm run test:mocha:esm && echo skipping cjs to avoid overhead - npm run test:mocha:cjs",
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
import { IDocumentService, IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
7
7
|
import { DocumentServiceProxy } from "../../documentServiceProxy.js";
|
|
8
|
-
import { DocumentStorageServiceCompressionAdapter as DocumentStorageServiceSummaryBlobCompressionAdapter } from "./summaryblob/index.js";
|
|
9
8
|
import { ICompressionStorageConfig } from "./compressionTypes.js";
|
|
9
|
+
import { DocumentStorageServiceCompressionAdapter as DocumentStorageServiceSummaryBlobCompressionAdapter } from "./summaryblob/index.js";
|
|
10
10
|
|
|
11
11
|
export class DocumentServiceCompressionAdapter extends DocumentServiceProxy {
|
|
12
12
|
constructor(
|
|
@@ -12,8 +12,8 @@ import {
|
|
|
12
12
|
import { ISummaryTree } from "@fluidframework/protocol-definitions";
|
|
13
13
|
import { DocumentServiceFactoryProxy } from "../../documentServiceFactoryProxy.js";
|
|
14
14
|
import { ICompressionStorageConfig } from "./compressionTypes.js";
|
|
15
|
-
import { DocumentStorageServiceCompressionAdapter as DocumentStorageServiceSummaryBlobCompressionAdapter } from "./summaryblob/index.js";
|
|
16
15
|
import { DocumentServiceCompressionAdapter } from "./documentServiceCompressionAdapter.js";
|
|
16
|
+
import { DocumentStorageServiceCompressionAdapter as DocumentStorageServiceSummaryBlobCompressionAdapter } from "./summaryblob/index.js";
|
|
17
17
|
|
|
18
18
|
export class DocumentServiceFactoryCompressionAdapter extends DocumentServiceFactoryProxy {
|
|
19
19
|
constructor(
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils";
|
|
7
7
|
import { IDocumentServiceFactory } from "@fluidframework/driver-definitions";
|
|
8
8
|
import {
|
|
9
|
+
DefaultCompressionStorageConfig,
|
|
9
10
|
DocumentServiceFactoryCompressionAdapter,
|
|
10
11
|
ICompressionStorageConfig,
|
|
11
|
-
DefaultCompressionStorageConfig,
|
|
12
12
|
} from "./compression/index.js";
|
|
13
13
|
|
|
14
14
|
/**
|
package/src/blob.ts
CHANGED
package/src/buildSnapshotTree.ts
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
import { stringToBuffer } from "@fluid-internal/client-utils";
|
|
7
7
|
import { assert } from "@fluidframework/core-utils";
|
|
8
8
|
import * as git from "@fluidframework/gitresources";
|
|
9
|
+
import { buildGitTreeHierarchy } from "@fluidframework/protocol-base";
|
|
9
10
|
import {
|
|
10
11
|
FileMode,
|
|
11
12
|
ISnapshotTree,
|
|
12
13
|
ITreeEntry,
|
|
13
14
|
TreeEntry,
|
|
14
15
|
} from "@fluidframework/protocol-definitions";
|
|
15
|
-
import { buildGitTreeHierarchy } from "@fluidframework/protocol-base";
|
|
16
16
|
import { v4 as uuid } from "uuid";
|
|
17
17
|
|
|
18
18
|
function flattenCore(
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert } from "@fluidframework/core-utils";
|
|
7
6
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
8
|
-
import {
|
|
7
|
+
import { assert } from "@fluidframework/core-utils";
|
|
8
|
+
import { DriverHeader, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
|
|
9
9
|
import Axios from "axios";
|
|
10
10
|
|
|
11
11
|
/**
|
package/src/network.ts
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
|
|
6
7
|
import {
|
|
7
|
-
|
|
8
|
-
IDriverErrorBase,
|
|
8
|
+
DriverErrorTypes,
|
|
9
9
|
IAuthorizationError,
|
|
10
|
+
IDriverErrorBase,
|
|
10
11
|
ILocationRedirectionError,
|
|
11
12
|
IResolvedUrl,
|
|
12
|
-
|
|
13
|
+
IThrottlingWarning,
|
|
13
14
|
} from "@fluidframework/driver-definitions";
|
|
14
|
-
import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
|
|
15
15
|
import { IFluidErrorBase, LoggingError } from "@fluidframework/telemetry-utils";
|
|
16
16
|
|
|
17
17
|
/**
|
package/src/networkUtils.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { type ITelemetryErrorEventExt, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
7
|
+
import { OnlineStatus, canRetryOnError, isOnline } from "./network.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @internal
|
package/src/packageVersion.ts
CHANGED
package/src/parallelRequests.ts
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
|
|
5
6
|
import { performance } from "@fluid-internal/client-utils";
|
|
6
7
|
import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
|
|
7
8
|
import { assert, Deferred } from "@fluidframework/core-utils";
|
|
8
|
-
import { ITelemetryLoggerExt, PerformanceEvent } from "@fluidframework/telemetry-utils";
|
|
9
|
-
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
10
9
|
import { IDeltasFetchResult, IStream, IStreamResult } from "@fluidframework/driver-definitions";
|
|
11
|
-
import {
|
|
10
|
+
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
11
|
+
import { ITelemetryLoggerExt, PerformanceEvent } from "@fluidframework/telemetry-utils";
|
|
12
|
+
import { canRetryOnError, createGenericNetworkError, getRetryDelayFromError } from "./network.js";
|
|
12
13
|
import { logNetworkFailure } from "./networkUtils.js";
|
|
13
14
|
// For now, this package is versioned and released in unison with the specific drivers
|
|
14
15
|
import { pkgVersion as driverVersion } from "./packageVersion.js";
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
|
|
5
6
|
import { LoaderCachingPolicy } from "@fluidframework/driver-definitions";
|
|
6
7
|
import { ISnapshotTree, IVersion } from "@fluidframework/protocol-definitions";
|
|
7
8
|
import { DocumentStorageServiceProxy } from "./documentStorageServiceProxy.js";
|
package/src/runWithRetry.ts
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ITelemetryLoggerExt, isFluidError } from "@fluidframework/telemetry-utils";
|
|
7
6
|
import { performance } from "@fluid-internal/client-utils";
|
|
8
7
|
import { delay } from "@fluidframework/core-utils";
|
|
9
8
|
import { DriverErrorTypes } from "@fluidframework/driver-definitions";
|
|
10
|
-
import {
|
|
9
|
+
import { ITelemetryLoggerExt, isFluidError } from "@fluidframework/telemetry-utils";
|
|
10
|
+
import { NonRetryableError, canRetryOnError, getRetryDelayFromError } from "./network.js";
|
|
11
11
|
import { pkgVersion } from "./packageVersion.js";
|
|
12
12
|
|
|
13
13
|
/**
|