diff --git a/PACKAGES.md b/PACKAGES.md index 959ee498b8a5..fcc6c11a8a66 100644 --- a/PACKAGES.md +++ b/PACKAGES.md @@ -75,7 +75,7 @@ The dependencies between layers are enforced by the layer-check command._ | Packages | Layer Dependencies | | --- | --- | -| - [@fluidframework/tool-utils](/packages/utils/tool-utils)
 
 
  | - [Protocol-Definitions](#Protocol-Definitions)
- [Base-Utils](#Base-Utils)
- [Protocol-Utils](#Protocol-Utils)
- [Other-Utils](#Other-Utils) | +| - [@fluidframework/tool-utils](/packages/utils/tool-utils)
 
 
  | - [Protocol-Definitions](#Protocol-Definitions)
- [Base-Utils](#Base-Utils)
- [Driver-Utils](#Driver-Utils)
- [Other-Utils](#Other-Utils) | ### Container-Utils @@ -99,13 +99,13 @@ The dependencies between layers are enforced by the layer-check command._ | Packages | Layer Dependencies | | --- | --- | -| - [@fluid-experimental/attributable-map](/experimental/dds/attributable-map)
- [@fluid-experimental/ot](/experimental/dds/ot/ot)
- [@fluid-experimental/sharejs-json1](/experimental/dds/ot/sharejs/json1)
- [@fluid-experimental/sequence-deprecated](/experimental/dds/sequence-deprecated)
- [@fluid-experimental/tree](/experimental/dds/tree)
- [@fluid-experimental/tree-graphql](/experimental/dds/tree-graphql)
- [@fluid-experimental/tree2](/experimental/dds/tree2)
- [@fluidframework/cell](/packages/dds/cell)
- [@fluidframework/counter](/packages/dds/counter)
- [@fluidframework/ink](/packages/dds/ink)
- [@fluidframework/map](/packages/dds/map)
- [@fluidframework/matrix](/packages/dds/matrix)
- [@fluidframework/merge-tree](/packages/dds/merge-tree)
- [@fluidframework/ordered-collection](/packages/dds/ordered-collection)
- [@fluid-experimental/pact-map](/packages/dds/pact-map)
- [@fluidframework/register-collection](/packages/dds/register-collection)
- [@fluidframework/sequence](/packages/dds/sequence)
- [@fluidframework/shared-object-base](/packages/dds/shared-object-base)
- [@fluidframework/shared-summary-block](/packages/dds/shared-summary-block)
- [@fluidframework/task-manager](/packages/dds/task-manager)
- [@fluidframework/container-runtime](/packages/runtime/container-runtime)
- [@fluidframework/container-runtime-definitions](/packages/runtime/container-runtime-definitions)
- [@fluidframework/datastore](/packages/runtime/datastore)
- [@fluidframework/datastore-definitions](/packages/runtime/datastore-definitions)
- [@fluidframework/garbage-collector](/packages/runtime/garbage-collector)
- [@fluidframework/runtime-definitions](/packages/runtime/runtime-definitions)
- [@fluidframework/runtime-utils](/packages/runtime/runtime-utils) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Core-Utils](#Core-Utils)
- [Protocol-Utils](#Protocol-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Container-Utils](#Container-Utils)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | +| - [@fluid-experimental/attributable-map](/experimental/dds/attributable-map)
- [@fluid-experimental/ot](/experimental/dds/ot/ot)
- [@fluid-experimental/sharejs-json1](/experimental/dds/ot/sharejs/json1)
- [@fluid-experimental/sequence-deprecated](/experimental/dds/sequence-deprecated)
- [@fluid-experimental/tree](/experimental/dds/tree)
- [@fluid-experimental/tree-graphql](/experimental/dds/tree-graphql)
- [@fluid-experimental/tree2](/experimental/dds/tree2)
- [@fluidframework/cell](/packages/dds/cell)
- [@fluidframework/counter](/packages/dds/counter)
- [@fluidframework/ink](/packages/dds/ink)
- [@fluidframework/map](/packages/dds/map)
- [@fluidframework/matrix](/packages/dds/matrix)
- [@fluidframework/merge-tree](/packages/dds/merge-tree)
- [@fluidframework/ordered-collection](/packages/dds/ordered-collection)
- [@fluid-experimental/pact-map](/packages/dds/pact-map)
- [@fluidframework/register-collection](/packages/dds/register-collection)
- [@fluidframework/sequence](/packages/dds/sequence)
- [@fluidframework/shared-object-base](/packages/dds/shared-object-base)
- [@fluidframework/shared-summary-block](/packages/dds/shared-summary-block)
- [@fluidframework/task-manager](/packages/dds/task-manager)
- [@fluidframework/container-runtime](/packages/runtime/container-runtime)
- [@fluidframework/container-runtime-definitions](/packages/runtime/container-runtime-definitions)
- [@fluidframework/datastore](/packages/runtime/datastore)
- [@fluidframework/datastore-definitions](/packages/runtime/datastore-definitions)
- [@fluidframework/runtime-definitions](/packages/runtime/runtime-definitions)
- [@fluidframework/runtime-utils](/packages/runtime/runtime-utils) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Core-Utils](#Core-Utils)
- [Protocol-Utils](#Protocol-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Container-Utils](#Container-Utils)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | ### Framework | Packages | Layer Dependencies | | --- | --- | -| - [@fluid-experimental/data-objects](/experimental/framework/data-objects)
- [@fluidframework/fluid-static](/packages/framework/fluid-static)
- [@fluid-experimental/property-binder](/experimental/PropertyDDS/packages/property-binder)
- [@fluid-experimental/property-changeset](/experimental/PropertyDDS/packages/property-changeset)
- [@fluid-experimental/property-common](/experimental/PropertyDDS/packages/property-common)
- [@fluid-experimental/property-dds](/experimental/PropertyDDS/packages/property-dds)
- [@fluid-experimental/property-inspector-table](/experimental/PropertyDDS/packages/property-inspector-table)
- [@fluid-experimental/property-properties](/experimental/PropertyDDS/packages/property-properties)
- [@fluid-experimental/property-proxy](/experimental/PropertyDDS/packages/property-proxy)
- [@fluid-experimental/property-query](/experimental/PropertyDDS/packages/property-query)
- [@fluid-experimental/last-edited](/experimental/framework/last-edited)
- [@fluid-experimental/react-inputs](/experimental/framework/react-inputs)
- [@fluid-experimental/tree-react-api](/experimental/framework/tree-react-api) (private)
- [@fluidframework/agent-scheduler](/packages/framework/agent-scheduler)
- [@fluidframework/aqueduct](/packages/framework/aqueduct)
- [@fluid-experimental/attributor](/packages/framework/attributor)
- [@fluid-internal/app-insights-logger](/packages/framework/client-logger/app-insights-logger) (private)
- [@fluidframework/data-object-base](/packages/framework/data-object-base)
- [@fluidframework/dds-interceptions](/packages/framework/dds-interceptions)
- [@fluid-experimental/oldest-client-observer](/packages/framework/oldest-client-observer)
- [@fluidframework/request-handler](/packages/framework/request-handler)
- [@fluidframework/synthesize](/packages/framework/synthesize)
- [@fluidframework/undo-redo](/packages/framework/undo-redo) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Framework-Utils](#Framework-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Container-Utils](#Container-Utils)
- [Loader](#Loader)
- [Runtime](#Runtime)
 
 
 
 
 
 
 
 
 
 
 
 
 
  | +| - [@fluid-experimental/data-objects](/experimental/framework/data-objects)
- [@fluidframework/fluid-static](/packages/framework/fluid-static)
- [@fluid-experimental/property-binder](/experimental/PropertyDDS/packages/property-binder)
- [@fluid-experimental/property-changeset](/experimental/PropertyDDS/packages/property-changeset)
- [@fluid-experimental/property-common](/experimental/PropertyDDS/packages/property-common)
- [@fluid-internal/platform-dependent](/experimental/PropertyDDS/packages/property-common/platform-dependent) (private)
- [@fluid-experimental/property-dds](/experimental/PropertyDDS/packages/property-dds)
- [@fluid-experimental/property-inspector-table](/experimental/PropertyDDS/packages/property-inspector-table)
- [@fluid-experimental/property-properties](/experimental/PropertyDDS/packages/property-properties)
- [@fluid-experimental/property-proxy](/experimental/PropertyDDS/packages/property-proxy)
- [@fluid-experimental/property-query](/experimental/PropertyDDS/packages/property-query)
- [@fluid-experimental/last-edited](/experimental/framework/last-edited)
- [@fluid-experimental/react-inputs](/experimental/framework/react-inputs)
- [@fluid-experimental/tree-react-api](/experimental/framework/tree-react-api)
- [@fluidframework/agent-scheduler](/packages/framework/agent-scheduler)
- [@fluidframework/aqueduct](/packages/framework/aqueduct)
- [@fluid-experimental/attributor](/packages/framework/attributor)
- [@fluid-internal/app-insights-logger](/packages/framework/client-logger/app-insights-logger) (private)
- [@fluidframework/data-object-base](/packages/framework/data-object-base)
- [@fluidframework/dds-interceptions](/packages/framework/dds-interceptions)
- [@fluid-experimental/oldest-client-observer](/packages/framework/oldest-client-observer)
- [@fluidframework/request-handler](/packages/framework/request-handler)
- [@fluidframework/synthesize](/packages/framework/synthesize)
- [@fluidframework/undo-redo](/packages/framework/undo-redo) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Framework-Utils](#Framework-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Container-Utils](#Container-Utils)
- [Loader](#Loader)
- [Runtime](#Runtime)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | ### Build @@ -183,13 +183,13 @@ The dependencies between layers are enforced by the layer-check command._ | Packages | Layer Dependencies | | --- | --- | -| - [@fluid-example/collaborative-textarea](/examples/apps/collaborative-textarea) (private)
- [@fluid-example/contact-collection](/examples/apps/contact-collection) (private)
- [@fluid-example/data-object-grid](/examples/apps/data-object-grid) (private)
- [@fluid-example/task-selection](/examples/apps/task-selection) (private)
- [@fluid-example/bubblebench-baseline](/examples/benchmarks/bubblebench/baseline) (private)
- [@fluid-example/bubblebench-common](/examples/benchmarks/bubblebench/common) (private)
- [@fluid-example/bubblebench-editable-shared-tree](/examples/benchmarks/bubblebench/editable-shared-tree) (private)
- [@fluid-example/bubblebench-ot](/examples/benchmarks/bubblebench/ot) (private)
- [@fluid-example/bubblebench-sharedtree](/examples/benchmarks/bubblebench/sharedtree) (private)
- [@fluid-example/odspsnapshotfetch-perftestapp](/examples/benchmarks/odspsnapshotfetch-perftestapp) (private)
- [@fluid-example/app-insights-logger](/examples/client-logger/app-insights-logger) (private)
- [@fluid-example/canvas](/examples/data-objects/canvas) (private)
- [@fluid-example/clicker](/examples/data-objects/clicker) (private)
- [@fluid-example/codemirror](/examples/data-objects/codemirror) (private)
- [@fluid-example/diceroller](/examples/data-objects/diceroller) (private)
- [@fluid-example/inventory-app](/examples/data-objects/inventory-app) (private)
- [@fluid-example/monaco](/examples/data-objects/monaco) (private)
- [@fluid-example/multiview-constellation-model](/examples/data-objects/multiview/constellation-model) (private)
- [@fluid-example/multiview-constellation-view](/examples/data-objects/multiview/constellation-view) (private)
- [@fluid-example/multiview-container](/examples/data-objects/multiview/container) (private)
- [@fluid-example/multiview-coordinate-model](/examples/data-objects/multiview/coordinate-model) (private)
- [@fluid-example/multiview-coordinate-interface](/examples/data-objects/multiview/interface) (private)
- [@fluid-example/multiview-plot-coordinate-view](/examples/data-objects/multiview/plot-coordinate-view) (private)
- [@fluid-example/multiview-slider-coordinate-view](/examples/data-objects/multiview/slider-coordinate-view) (private)
- [@fluid-example/multiview-triangle-view](/examples/data-objects/multiview/triangle-view) (private)
- [@fluid-example/prosemirror](/examples/data-objects/prosemirror) (private)
- [@fluid-example/shared-text](/examples/data-objects/shared-text) (private)
- [@fluid-example/smde](/examples/data-objects/smde) (private)
- [@fluid-example/table-document](/examples/data-objects/table-document)
- [@fluid-example/table-view](/examples/data-objects/table-view) (private)
- [@fluid-example/todo](/examples/data-objects/todo) (private)
- [@fluid-example/webflow](/examples/data-objects/webflow) (private)
- [@fluid-example/app-integration-external-data](/examples/external-data) (private)
- [@fluid-example/bundle-size-tests](/examples/utils/bundle-size-tests) (private)
- [@fluid-example/example-utils](/examples/utils/example-utils) (private)
- [@fluid-example/app-integration-live-schema-upgrade](/examples/version-migration/live-schema-upgrade) (private)
- [@fluid-example/app-integration-schema-upgrade](/examples/version-migration/schema-upgrade) (private)
- [@fluid-example/app-integration-container-views](/examples/view-integration/container-views) (private)
- [@fluid-example/app-integration-external-views](/examples/view-integration/external-views) (private)
- [@fluid-example/view-framework-sampler](/examples/view-integration/view-framework-sampler) (private)
- [@fluid-example/partial-checkout](/experimental/PropertyDDS/examples/partial-checkout) (private)
- [@fluid-example/property-inspector](/experimental/PropertyDDS/examples/property-inspector) (private)
- [@fluid-example/schemas](/experimental/PropertyDDS/examples/schemas) (private)
- [@fluid-experimental/property-query-service](/experimental/PropertyDDS/services/property-query-service) (private) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Framework-Utils](#Framework-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Server-Libs](#Server-Libs)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [ServiceClients](#ServiceClients)
- [Test-Utils](#Test-Utils)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | +| - [@fluid-example/attributable-map](/examples/apps/attributable-map) (private)
- [@fluid-example/collaborative-textarea](/examples/apps/collaborative-textarea) (private)
- [@fluid-example/contact-collection](/examples/apps/contact-collection) (private)
- [@fluid-example/data-object-grid](/examples/apps/data-object-grid) (private)
- [@fluid-example/task-selection](/examples/apps/task-selection) (private)
- [@fluid-example/bubblebench-baseline](/examples/benchmarks/bubblebench/baseline) (private)
- [@fluid-example/bubblebench-common](/examples/benchmarks/bubblebench/common) (private)
- [@fluid-example/bubblebench-editable-shared-tree](/examples/benchmarks/bubblebench/editable-shared-tree) (private)
- [@fluid-example/bubblebench-ot](/examples/benchmarks/bubblebench/ot) (private)
- [@fluid-example/bubblebench-sharedtree](/examples/benchmarks/bubblebench/sharedtree) (private)
- [@fluid-example/odspsnapshotfetch-perftestapp](/examples/benchmarks/odspsnapshotfetch-perftestapp) (private)
- [@fluid-example/app-insights-logger](/examples/client-logger/app-insights-logger) (private)
- [@fluid-example/canvas](/examples/data-objects/canvas) (private)
- [@fluid-example/clicker](/examples/data-objects/clicker) (private)
- [@fluid-example/codemirror](/examples/data-objects/codemirror) (private)
- [@fluid-example/diceroller](/examples/data-objects/diceroller) (private)
- [@fluid-example/inventory-app](/examples/data-objects/inventory-app) (private)
- [@fluid-example/monaco](/examples/data-objects/monaco) (private)
- [@fluid-example/multiview-constellation-model](/examples/data-objects/multiview/constellation-model) (private)
- [@fluid-example/multiview-constellation-view](/examples/data-objects/multiview/constellation-view) (private)
- [@fluid-example/multiview-container](/examples/data-objects/multiview/container) (private)
- [@fluid-example/multiview-coordinate-model](/examples/data-objects/multiview/coordinate-model) (private)
- [@fluid-example/multiview-coordinate-interface](/examples/data-objects/multiview/interface) (private)
- [@fluid-example/multiview-plot-coordinate-view](/examples/data-objects/multiview/plot-coordinate-view) (private)
- [@fluid-example/multiview-slider-coordinate-view](/examples/data-objects/multiview/slider-coordinate-view) (private)
- [@fluid-example/multiview-triangle-view](/examples/data-objects/multiview/triangle-view) (private)
- [@fluid-example/prosemirror](/examples/data-objects/prosemirror) (private)
- [@fluid-example/shared-text](/examples/data-objects/shared-text) (private)
- [@fluid-example/smde](/examples/data-objects/smde) (private)
- [@fluid-example/table-document](/examples/data-objects/table-document)
- [@fluid-example/table-view](/examples/data-objects/table-view) (private)
- [@fluid-example/todo](/examples/data-objects/todo) (private)
- [@fluid-example/webflow](/examples/data-objects/webflow) (private)
- [@fluid-example/app-integration-external-data](/examples/external-data) (private)
- [@fluid-example/bundle-size-tests](/examples/utils/bundle-size-tests) (private)
- [@fluid-example/example-utils](/examples/utils/example-utils) (private)
- [@fluid-example/app-integration-live-schema-upgrade](/examples/version-migration/live-schema-upgrade) (private)
- [@fluid-example/version-migration-same-container](/examples/version-migration/same-container) (private)
- [@fluid-example/app-integration-schema-upgrade](/examples/version-migration/schema-upgrade) (private)
- [@fluid-example/app-integration-container-views](/examples/view-integration/container-views) (private)
- [@fluid-example/app-integration-external-views](/examples/view-integration/external-views) (private)
- [@fluid-example/view-framework-sampler](/examples/view-integration/view-framework-sampler) (private)
- [@fluid-example/partial-checkout](/experimental/PropertyDDS/examples/partial-checkout) (private)
- [@fluid-example/property-inspector](/experimental/PropertyDDS/examples/property-inspector) (private)
- [@fluid-example/schemas](/experimental/PropertyDDS/examples/schemas) (private)
- [@fluid-experimental/property-query-service](/experimental/PropertyDDS/services/property-query-service) (private) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Framework-Utils](#Framework-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Server-Libs](#Server-Libs)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [ServiceClients](#ServiceClients)
- [Test-Utils](#Test-Utils)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | ### Tools | Packages | Layer Dependencies | | --- | --- | -| - [@fluid-tools/client-debugger](/packages/tools/client-debugger/client-debugger) (private)
- [@fluid-tools/client-debugger-chrome-extension](/packages/tools/client-debugger/client-debugger-chrome-extension) (private)
- [@fluid-tools/client-debugger-view](/packages/tools/client-debugger/client-debugger-view) (private)
- [@fluid-tools/fetch-tool](/packages/tools/fetch-tool)
- [@fluidframework/fluid-runner](/packages/tools/fluid-runner)
- [@fluid-internal/replay-tool](/packages/tools/replay-tool) (private)
- [@fluid-tools/build-cli](/build-tools/packages/build-cli)
- [@fluidframework/build-tools](/build-tools/packages/build-tools)
- [@fluidframework/bundle-size-tools](/build-tools/packages/bundle-size-tools)
- [@fluid-tools/version-tools](/build-tools/packages/version-tools)
- [@fluid-tools/api-markdown-documenter](/tools/api-markdown-documenter)
- [@fluid-internal/getkeys](/tools/getkeys) (private)
- [@fluidframework/test-tools](/tools/test-tools)
 
  | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Container-Utils](#Container-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [Test-Utils](#Test-Utils) | +| - [@fluid-experimental/devtools](/packages/tools/devtools/devtools)
- [@fluid-internal/devtools-browser-extension](/packages/tools/devtools/devtools-browser-extension) (private)
- [@fluid-experimental/devtools-core](/packages/tools/devtools/devtools-core)
- [@fluid-example/devtools-example](/packages/tools/devtools/devtools-example) (private)
- [@fluid-experimental/devtools-view](/packages/tools/devtools/devtools-view) (private)
- [@fluid-tools/fetch-tool](/packages/tools/fetch-tool)
- [@fluidframework/fluid-runner](/packages/tools/fluid-runner)
- [@fluid-internal/replay-tool](/packages/tools/replay-tool) (private)
- [@fluid-tools/build-cli](/build-tools/packages/build-cli)
- [@fluidframework/build-tools](/build-tools/packages/build-tools)
- [@fluidframework/bundle-size-tools](/build-tools/packages/bundle-size-tools)
- [@fluid-internal/readme-command](/build-tools/packages/readme-command) (private)
- [@fluid-tools/version-tools](/build-tools/packages/version-tools)
- [@fluid-tools/api-markdown-documenter](/tools/api-markdown-documenter)
- [@fluid-internal/getkeys](/tools/getkeys) (private)
- [@fluidframework/test-tools](/tools/test-tools) | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Container-Utils](#Container-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [ServiceClients](#ServiceClients)
- [Test-Utils](#Test-Utils) | ### AzureClient @@ -201,13 +201,13 @@ The dependencies between layers are enforced by the layer-check command._ | Packages | Layer Dependencies | | --- | --- | -| - [@fluidframework/azure-end-to-end-tests](/azure/packages/test/end-to-end-tests)
- [@fluidframework/azure-scenario-runner](/azure/packages/test/scenario-runner)
- [@fluid-internal/functional-tests](/packages/test/functional-tests) (private)
- [@fluid-internal/local-server-tests](/packages/test/local-server-tests) (private)
- [@fluidframework/mocha-test-setup](/packages/test/mocha-test-setup)
- [@fluid-internal/test-snapshots](/packages/test/snapshots) (private)
- [@fluid-internal/test-app-insights-logger](/packages/test/test-app-insights-logger)
- [@fluidframework/test-driver-definitions](/packages/test/test-driver-definitions)
- [@fluid-internal/test-drivers](/packages/test/test-drivers)
- [@fluid-internal/test-end-to-end-tests](/packages/test/test-end-to-end-tests)
- [@fluid-internal/test-gc-sweep-tests](/packages/test/test-gc-sweep-tests) (private)
- [@fluid-internal/test-pairwise-generator](/packages/test/test-pairwise-generator)
- [@fluid-internal/test-service-load](/packages/test/test-service-load)
- [@fluidframework/test-utils](/packages/test/test-utils)
- [@fluid-internal/test-version-utils](/packages/test/test-version-utils)
 
 
 
 
 
 
  | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Container-Utils](#Container-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Build](#Build)
- [UberPackage](#UberPackage)
- [Server-Libs](#Server-Libs)
- [Server-Tools](#Server-Tools)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [Test-Utils](#Test-Utils)
- [Tools](#Tools)
- [AzureClient](#AzureClient) | +| - [@fluidframework/azure-end-to-end-tests](/azure/packages/test/end-to-end-tests)
- [@fluidframework/azure-scenario-runner](/azure/packages/test/scenario-runner)
- [@fluid-internal/functional-tests](/packages/test/functional-tests) (private)
- [@fluid-internal/local-server-tests](/packages/test/local-server-tests) (private)
- [@fluidframework/mocha-test-setup](/packages/test/mocha-test-setup)
- [@fluid-internal/test-snapshots](/packages/test/snapshots) (private)
- [@fluid-internal/test-app-insights-logger](/packages/test/test-app-insights-logger)
- [@fluidframework/test-driver-definitions](/packages/test/test-driver-definitions)
- [@fluid-internal/test-drivers](/packages/test/test-drivers)
- [@fluid-internal/test-end-to-end-tests](/packages/test/test-end-to-end-tests)
- [@fluid-internal/test-pairwise-generator](/packages/test/test-pairwise-generator)
- [@fluid-internal/test-service-load](/packages/test/test-service-load)
- [@fluidframework/test-utils](/packages/test/test-utils)
- [@fluid-internal/test-version-utils](/packages/test/test-version-utils)
 
 
 
 
 
 
  | - [Base-Definitions](#Base-Definitions)
- [Protocol-Definitions](#Protocol-Definitions)
- [Driver-Definitions](#Driver-Definitions)
- [Container-Definitions](#Container-Definitions)
- [Base-Utils](#Base-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Driver-Utils](#Driver-Utils)
- [Other-Utils](#Other-Utils)
- [Tool-Utils](#Tool-Utils)
- [Container-Utils](#Container-Utils)
- [Driver](#Driver)
- [Loader](#Loader)
- [Runtime](#Runtime)
- [Framework](#Framework)
- [Build](#Build)
- [Server-Libs](#Server-Libs)
- [Server-Tools](#Server-Tools)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [Test-Utils](#Test-Utils)
- [Tools](#Tools)
- [AzureClient](#AzureClient) | ### Azure-Examples | Packages | Layer Dependencies | | --- | --- | -| - [@fluid-example/presence-tracker](/examples/apps/presence-tracker) (private)
- [@fluid-example/app-integration-external-controller](/azure/packages/external-controller) (private)
 
 
 
 
  | - [Base-Definitions](#Base-Definitions)
- [Base-Utils](#Base-Utils)
- [Framework](#Framework)
- [UberPackage](#UberPackage)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [ServiceClients](#ServiceClients)
- [AzureClient](#AzureClient) | +| - [@fluid-example/presence-tracker](/examples/apps/presence-tracker) (private)
- [@fluid-example/app-integration-external-controller](/azure/packages/external-controller) (private)
 
 
 
 
 
  | - [Base-Definitions](#Base-Definitions)
- [Base-Utils](#Base-Utils)
- [Telemetry-Utils](#Telemetry-Utils)
- [Framework](#Framework)
- [UberPackage](#UberPackage)
- [Routerlicious-Driver](#Routerlicious-Driver)
- [ServiceClients](#ServiceClients)
- [AzureClient](#AzureClient) | ### Routerlicious-Server diff --git a/packages/test/test-gc-sweep-tests/.eslintrc.js b/packages/test/test-gc-sweep-tests/.eslintrc.js deleted file mode 100644 index 67da7004678e..000000000000 --- a/packages/test/test-gc-sweep-tests/.eslintrc.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -module.exports = { - extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], - rules: { - "prefer-arrow-callback": "off", - "@typescript-eslint/strict-boolean-expressions": "off", // requires strictNullChecks=true in tsconfig - "import/no-nodejs-modules": "off", - }, - parserOptions: { - project: ["./src/test/tsconfig.json"], - }, -}; diff --git a/packages/test/test-gc-sweep-tests/.gitignore b/packages/test/test-gc-sweep-tests/.gitignore deleted file mode 100644 index ee26a5e7bdbf..000000000000 --- a/packages/test/test-gc-sweep-tests/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Compiled TypeScript and CSS -dist -lib - -# Babel -public/scripts/es5 - -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt -.cache-loader - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- -node_modules - -# Typings -typings - -# Debug log from npm -npm-debug.log - -# Code coverage -nyc -.nyc_output/ - -# Chart dependencies -**/charts/*.tgz - -# Generated modules -intel_modules/ -temp_modules/ diff --git a/packages/test/test-gc-sweep-tests/.mocharc.js b/packages/test/test-gc-sweep-tests/.mocharc.js deleted file mode 100644 index 81dd8e6fb139..000000000000 --- a/packages/test/test-gc-sweep-tests/.mocharc.js +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -"use strict"; - -const getFluidTestMochaConfig = require("@fluidframework/mocha-test-setup/mocharc-common"); - -const packageDir = __dirname; -const config = getFluidTestMochaConfig(packageDir); -module.exports = config; diff --git a/packages/test/test-gc-sweep-tests/.npmignore b/packages/test/test-gc-sweep-tests/.npmignore deleted file mode 100644 index a40f882cf599..000000000000 --- a/packages/test/test-gc-sweep-tests/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -nyc -*.log -**/*.tsbuildinfo -src/test -dist/test -**/_api-extractor-temp/** diff --git a/packages/test/test-gc-sweep-tests/CHANGELOG.md b/packages/test/test-gc-sweep-tests/CHANGELOG.md deleted file mode 100644 index 03dadd528173..000000000000 --- a/packages/test/test-gc-sweep-tests/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# @fluid-internal/test-gc-sweep-tests - -## 2.0.0-internal.5.0.0 - -Dependency updates only. - -## 2.0.0-internal.4.4.0 - -Dependency updates only. - -## 2.0.0-internal.4.1.0 - -Dependency updates only. diff --git a/packages/test/test-gc-sweep-tests/LICENSE b/packages/test/test-gc-sweep-tests/LICENSE deleted file mode 100644 index 60af0a6a40e9..000000000000 --- a/packages/test/test-gc-sweep-tests/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation and contributors. All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/test/test-gc-sweep-tests/README.md b/packages/test/test-gc-sweep-tests/README.md deleted file mode 100644 index 41f59e591eb0..000000000000 --- a/packages/test/test-gc-sweep-tests/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# @fluid-internal/test-gc-sweep-tests - -## Overview - -The goal of these tests is to enable testing of the GC sweep infrastructure. Ideally, these tests should run for a few -minutes. This test is trying to imitate what might actually happen in the real world and provide enough randomness that -it will likely catch issues before they reach out to customers. - -## Work in progress - -Currently this package is still under development and may experience drastic changes. - -## Quick rundown - -Warning: As this package is rapidly changing, this section may very quickly become out of date. - -- The test starts at gcSweepTest.spec.ts - - Currently, it only runs one test - - It runs by creating a ContainerManager, HandleTracker, and FluidObjectTracker. - - Using these 3 objects, the test can get all the necessary objects to create all the different actions. -- Main Actions - - loadNewContainer - - closeRandomContainer - needs live containers - - createDataStoreForRandomContainer - needs live containers - - referenceRandomHandle - needs live containers - - unreferenceRandomHandle - needs live containers && stored handles -- HandleTracker - - Responsible for recording where handles are stored in the global document - - Needs to be manually updated - - Used when removing handles to find a DDS that actually has a handle that can be removed. -- FluidObjectTracker - - Responsible for tracking paths to DataStores and DDSes. - - Represents the state of the document - - Tracks where all the DDSes that can store handles are -- ContainerManager - - responsible for the lifetime of Containers. - - Instead of returning a container on random get, ContainerManager returns a ContainerDataObjectManager -- ContainerDataObjectManager - - responsible for creating DataObjects - - retrieving handles - - adding handles - - removing handles -- DataObjectWithManyDDSes extends BaseTestDataObject extends DataObject - - Responsible for adding a handle to its DDSes - - This is encapsulated in the HandleManager - - Exposing all its channel ids so they are known to the test - - Exposing all its channel ids that can process DDSes so they are known to the test -- HandleManager - - Responsible for adding and removing handles for channels in a DataObject - - Adds handles to a random DDS - - Removes handles from a specified DDS - - When removing a handle, it expects a handle to be removed, otherwise it throws. - - The specific logic to add and remove handles from a type of DDS is implemented as an IHandleOpManager -- IHandleOpManager - - Responsible for adding and removing handles for a specific type of channel. - - Adds a handle - may return a handle if adding replaces the handle. - - Removes a handle randomly - not always guaranteed to remove a specific handle i.e. a ConsensusQueue - -## Build and Run for this test package - -- `npm run test:build` diff --git a/packages/test/test-gc-sweep-tests/package.json b/packages/test/test-gc-sweep-tests/package.json deleted file mode 100644 index 00a163068c86..000000000000 --- a/packages/test/test-gc-sweep-tests/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "name": "@fluid-internal/test-gc-sweep-tests", - "version": "2.0.0-internal.5.1.0", - "private": true, - "description": "Long running GC Sweep tests", - "homepage": "https://fluidframework.com", - "repository": { - "type": "git", - "url": "https://github.com/microsoft/FluidFramework.git", - "directory": "packages/test/test-gc-sweep-tests" - }, - "license": "MIT", - "author": "Microsoft and contributors", - "sideEffects": false, - "scripts": { - "build": "fluid-build . --task build", - "build:compile": "fluid-build . --task compile", - "build:test": "tsc --project ./src/test/tsconfig.json", - "clean": "rimraf dist lib *.tsbuildinfo *.build.log", - "eslint": "eslint --format stylish src", - "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout", - "format": "npm run prettier:fix", - "lint": "npm run prettier && npm run eslint", - "lint:fix": "npm run prettier:fix && npm run eslint:fix", - "prettier": "prettier --check . --ignore-path ../../../.prettierignore", - "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore", - "test": "npm run test:mocha-not-in-ci:verbose -- -r node_modules/@fluidframework/mocha-test-setup --unhandled-rejections=strict", - "test:build": "npm run build && npm run test:mocha-not-in-ci", - "test:coverage": "nyc npm test -- --reporter xunit --reporter-option output=nyc/junit-report.xml", - "test:mocha-not-in-ci": "mocha --ignore 'dist/test/types/*' --recursive dist/test --exit", - "test:mocha-not-in-ci:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha", - "test:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test" - }, - "nyc": { - "all": true, - "cache-dir": "nyc/.cache", - "exclude": [ - "src/test/**/*.ts", - "dist/test/**/*.js" - ], - "exclude-after-remap": false, - "include": [ - "src/**/*.ts", - "dist/**/*.js" - ], - "report-dir": "nyc/report", - "reporter": [ - "cobertura", - "html", - "text" - ], - "temp-directory": "nyc/.nyc_output" - }, - "dependencies": { - "@fluid-internal/stochastic-test-utils": "workspace:~", - "@fluid-internal/test-version-utils": "workspace:~", - "@fluidframework/aqueduct": "workspace:~", - "@fluidframework/cell": "workspace:~", - "@fluidframework/common-definitions": "^0.20.1", - "@fluidframework/common-utils": "^1.1.1", - "@fluidframework/container-definitions": "workspace:~", - "@fluidframework/container-runtime": "workspace:~", - "@fluidframework/core-interfaces": "workspace:~", - "@fluidframework/counter": "workspace:~", - "@fluidframework/datastore-definitions": "workspace:~", - "@fluidframework/ink": "workspace:~", - "@fluidframework/map": "workspace:~", - "@fluidframework/matrix": "workspace:~", - "@fluidframework/ordered-collection": "workspace:~", - "@fluidframework/register-collection": "workspace:~", - "@fluidframework/runtime-definitions": "workspace:~", - "@fluidframework/runtime-utils": "workspace:~", - "@fluidframework/sequence": "workspace:~", - "@fluidframework/telemetry-utils": "workspace:~", - "@fluidframework/test-driver-definitions": "workspace:~", - "@fluidframework/test-utils": "workspace:~", - "mocha": "^10.2.0", - "random-js": "^1.0.8", - "uuid": "^8.3.1" - }, - "devDependencies": { - "@fluid-tools/build-cli": "^0.19.0-166151", - "@fluidframework/build-common": "^1.2.0", - "@fluidframework/eslint-config-fluid": "^2.0.0", - "@fluidframework/mocha-test-setup": "workspace:~", - "@types/mocha": "^9.1.1", - "@types/nock": "^9.3.0", - "@types/node": "^14.18.38", - "@types/uuid": "^8.3.0", - "concurrently": "^7.6.0", - "cross-env": "^7.0.3", - "eslint": "~8.6.0", - "nock": "^10.0.1", - "nyc": "^15.1.0", - "prettier": "~2.6.2", - "rimraf": "^4.4.0", - "typescript": "~4.5.5" - }, - "typeValidation": { - "disabled": true, - "broken": {} - } -} diff --git a/packages/test/test-gc-sweep-tests/prettier.config.cjs b/packages/test/test-gc-sweep-tests/prettier.config.cjs deleted file mode 100644 index d4870022599f..000000000000 --- a/packages/test/test-gc-sweep-tests/prettier.config.cjs +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -module.exports = { - ...require("@fluidframework/build-common/prettier.config.cjs"), -}; diff --git a/packages/test/test-gc-sweep-tests/src/containerManager.ts b/packages/test/test-gc-sweep-tests/src/containerManager.ts deleted file mode 100644 index 145b35026eaa..000000000000 --- a/packages/test/test-gc-sweep-tests/src/containerManager.ts +++ /dev/null @@ -1,66 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { strict as assert } from "assert"; -import { ContainerRuntimeFactoryWithDefaultDataStore } from "@fluidframework/aqueduct"; -import { IContainer } from "@fluidframework/container-definitions"; -import { IConfigProviderBase } from "@fluidframework/telemetry-utils"; -import { ITestObjectProvider } from "@fluidframework/test-utils"; -import { IRandom } from "@fluid-internal/stochastic-test-utils"; - -/** - * Responsible for tracking the lifetime of containers - * Responsible for retrieving, creating, and loading containers - * A container is connected if it is attached and not closed - * A container is closed if container.close is true - */ -export class ContainerManager { - private readonly connectedContainers: IContainer[] = []; - private readonly closedContainers: IContainer[] = []; - constructor( - public readonly runtimeFactory: ContainerRuntimeFactoryWithDefaultDataStore, - public readonly configProvider: IConfigProviderBase, - public readonly provider: ITestObjectProvider, - ) {} - - public async createContainer(): Promise { - const container = await this.provider.createContainer(this.runtimeFactory, { - configProvider: this.configProvider, - }); - this.trackContainer(container); - return container; - } - - public async loadContainer(): Promise { - const container = await this.provider.loadContainer(this.runtimeFactory, { - configProvider: this.configProvider, - }); - this.trackContainer(container); - return container; - } - - private trackContainer(container: IContainer): void { - container.on("closed", () => { - const index = this.connectedContainers.indexOf(container); - assert(index >= 0, "Expected container to have been added to connectedContainers"); - this.closedContainers.push(this.connectedContainers[index]); - this.connectedContainers.splice(index, 1); - }); - this.connectedContainers.push(container); - } - - public closeRandomContainer(random: IRandom): void { - assert(this.connectedContainers.length > 0, "Expected there to be connected containers!"); - random.pick(this.connectedContainers).close(); - } - - public hasConnectedContainers(): boolean { - return this.connectedContainers.length > 0; - } - - public get connectedContainerCount(): number { - return this.connectedContainers.length; - } -} diff --git a/packages/test/test-gc-sweep-tests/src/dataObjectWithChildDataObject.ts b/packages/test/test-gc-sweep-tests/src/dataObjectWithChildDataObject.ts deleted file mode 100644 index c857712cea96..000000000000 --- a/packages/test/test-gc-sweep-tests/src/dataObjectWithChildDataObject.ts +++ /dev/null @@ -1,91 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { makeRandom } from "@fluid-internal/stochastic-test-utils"; -import { DataObjectFactory } from "@fluidframework/aqueduct"; -import { assert, delay } from "@fluidframework/common-utils"; -import { SharedCounter } from "@fluidframework/counter"; -import { DataObjectWithCounter, dataObjectWithCounterFactory } from "./dataObjectWithCounter"; - -/** - * A root dataObject that repeatedly sends a series of ops, and then references a new child or - * unreferences a child. That child is unique to a particular client and a particular dataObject. - * For example, if there are two clients A and B, there will be one rootDataObject and 2 child - * data objects that can be potentially referenced at one point. - */ -export class RootDataObjectWithChildDataObject extends DataObjectWithCounter { - private child?: DataObjectWithCounter; - private readonly opsToWait = 1000; - private localOpsPerformed: number = 0; - private uniqueId?: string; - private get childKey(): string { - assert( - this.uniqueId !== undefined, - `A uniqueId needs to be defined to retrieve the child key!`, - ); - return `childKey:${this.uniqueId}`; - } - - public static get type(): string { - return "RootDataObjectWithChildDataObject"; - } - - protected async hasInitialized(): Promise { - await super.hasInitialized(); - this.uniqueId = makeRandom().uuid4(); - await this.createAndReferenceChild(); - this.start(); - } - - private unreferenceChild(): void { - assert(this.child !== undefined, `Child should be defined when unreferencing!`); - this.child.stop(); - this.root.delete(this.childKey); - } - - private async createAndReferenceChild(): Promise { - // If this assert is hit, we may potentially have a child that is running and we did not stop it. - assert(this.child === undefined, "A child should not exist!"); - this.child = await dataObjectWithCounterFactory.createInstance( - this.context.containerRuntime, - ); - this.root.set(this.childKey, this.child.handle); - this.child.start(); - } - - protected async run(): Promise { - assert(this.isRunning === true, "Should be running to send ops"); - - // The ideal loop is to send a number of counter ops, and then reference or unreference a child. - while (this.isRunning && !this.disposed) { - // Every this.opsToWait, we want to either reference or unreference a datastore. - if (this.localOpsPerformed % this.opsToWait === 0) { - // Reference the child if there is none, unreference if there is one. - // Referencing and unreferencing should automatically stop and start the child. - // TODO: potentially reference an old child - if (this.child === undefined) { - await this.createAndReferenceChild(); - } else { - this.unreferenceChild(); - } - } - - // Count total ops performed on the datastore. - this.counter.increment(1); - // This data is local and allows us to understand the number of changes a local client has created. - this.localOpsPerformed++; - - // This delay is const for now, potentially we would want to vary this value. - await delay(this.delayPerOpMs); - } - } -} - -export const rootDataObjectWithChildDataObjectFactory = new DataObjectFactory( - RootDataObjectWithChildDataObject.type, - RootDataObjectWithChildDataObject, - [SharedCounter.getFactory()], - {}, -); diff --git a/packages/test/test-gc-sweep-tests/src/dataObjectWithCounter.ts b/packages/test/test-gc-sweep-tests/src/dataObjectWithCounter.ts deleted file mode 100644 index 517bddd4e657..000000000000 --- a/packages/test/test-gc-sweep-tests/src/dataObjectWithCounter.ts +++ /dev/null @@ -1,65 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { DataObject, DataObjectFactory } from "@fluidframework/aqueduct"; -import { assert, delay } from "@fluidframework/common-utils"; -import { IFluidHandle } from "@fluidframework/core-interfaces"; -import { SharedCounter } from "@fluidframework/counter"; - -/** - * DataObjectWithCounter increments a SharedCounter as a way of sending ops. - * - * The SharedCounter is retrieved via handle - */ -const counterKey = "counter"; -export class DataObjectWithCounter extends DataObject { - private _counter?: SharedCounter; - protected isRunning: boolean = false; - protected readonly delayPerOpMs = 100; - public static get type(): string { - return "DataObjectWithCounter"; - } - - protected get counter(): SharedCounter { - assert(this._counter !== undefined, "Need counter to be defined before retreiving!"); - return this._counter; - } - - protected async initializingFirstTime(): Promise { - this.root.set(counterKey, SharedCounter.create(this.runtime).handle); - } - - protected async hasInitialized(): Promise { - const handle = this.root.get>(counterKey); - assert(handle !== undefined, `The counter handle should exist on initialization!`); - this._counter = await handle.get(); - } - - public stop(): void { - this.isRunning = false; - } - - public start(): void { - this.isRunning = true; - this.run().catch((error) => { - console.log(error); - }); - } - - protected async run(): Promise { - assert(this.isRunning === true, "Should be running to send ops"); - while (this.isRunning && !this.disposed) { - this.counter.increment(1); - await delay(this.delayPerOpMs); - } - } -} - -export const dataObjectWithCounterFactory = new DataObjectFactory( - DataObjectWithCounter.type, - DataObjectWithCounter, - [SharedCounter.getFactory()], - {}, -); diff --git a/packages/test/test-gc-sweep-tests/src/ignoreErrorLogger.ts b/packages/test/test-gc-sweep-tests/src/ignoreErrorLogger.ts deleted file mode 100644 index 9f39ab3e7479..000000000000 --- a/packages/test/test-gc-sweep-tests/src/ignoreErrorLogger.ts +++ /dev/null @@ -1,59 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import * as fs from "fs"; -import { EventAndErrorTrackingLogger } from "@fluidframework/test-utils"; -import { ITelemetryBaseEvent } from "@fluidframework/common-definitions"; -import { assert } from "@fluidframework/common-utils"; - -/** - * Ignores certain error types (does not pay attention to count) - * Potentially, we may want to raise the severity of telemetry as an error. i.e - inactiveObjectX telemetry - */ -export class IgnoreErrorLogger extends EventAndErrorTrackingLogger { - public readonly events: ITelemetryBaseEvent[] = []; - public readonly inactiveObjectEvents: ITelemetryBaseEvent[] = []; - public readonly errorEvents: ITelemetryBaseEvent[] = []; - public readonly errorEventStats: { [key: string]: number } = {}; - - public send(event: ITelemetryBaseEvent): void { - this.events.push(event); - if (event.eventName.includes("InactiveObject")) { - this.inactiveObjectEvents.push(event); - } - - // Ignore all errors, otherwise we only run one test. - if (event.category === "error") { - const count = this.errorEventStats[event.eventName] ?? 0; - this.errorEventStats[event.eventName] = count + 1; - this.errorEvents.push(event); - } - } - - public logEvents(seed: number): void { - fs.mkdirSync(`nyc/testData-${seed}`, { recursive: true }); - fs.writeFileSync(`nyc/testData-${seed}/events.json`, JSON.stringify(this.events)); - fs.writeFileSync( - `nyc/testData-${seed}/inactiveObjectEvents.json`, - JSON.stringify(this.inactiveObjectEvents), - ); - fs.writeFileSync(`nyc/testData-${seed}/errorEvents.json`, JSON.stringify(this.errorEvents)); - fs.writeFileSync( - `nyc/testData-${seed}/errorEventStats.json`, - JSON.stringify(this.errorEventStats), - ); - } - - public validateEvents(seed: number): void { - assert( - this.inactiveObjectEvents.length === 0, - `InactiveObject events occurred - look at nyc/testData-${seed}/inactiveObjectEvents.json`, - ); - assert( - this.errorEvents.length === 0, - `Error events occurred - look at nyc/testData-${seed}/errorEvents.json`, - ); - } -} diff --git a/packages/test/test-gc-sweep-tests/src/mockConfigProvider.ts b/packages/test/test-gc-sweep-tests/src/mockConfigProvider.ts deleted file mode 100644 index 40b94b5378d2..000000000000 --- a/packages/test/test-gc-sweep-tests/src/mockConfigProvider.ts +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { ConfigTypes, IConfigProviderBase } from "@fluidframework/telemetry-utils"; - -/** - * Generates a config provider that returns feature flag information. - * @param settings - Feature flags to set. - */ -export const mockConfigProvider = (settings: Record): IConfigProviderBase => { - return { - getRawConfig: (name: string): ConfigTypes => settings[name], - }; -}; diff --git a/packages/test/test-gc-sweep-tests/src/test/.mocharc.js b/packages/test/test-gc-sweep-tests/src/test/.mocharc.js deleted file mode 100644 index 7bb530ceecdb..000000000000 --- a/packages/test/test-gc-sweep-tests/src/test/.mocharc.js +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -"use strict"; - -const packageDir = `${__dirname}/../..`; - -const getFluidTestMochaConfig = require("@fluid-internal/test-version-utils/mocharc-common.js"); -const config = getFluidTestMochaConfig(packageDir); -module.exports = config; diff --git a/packages/test/test-gc-sweep-tests/src/test/autoRunTest.spec.ts b/packages/test/test-gc-sweep-tests/src/test/autoRunTest.spec.ts deleted file mode 100644 index 0b976653d9a0..000000000000 --- a/packages/test/test-gc-sweep-tests/src/test/autoRunTest.spec.ts +++ /dev/null @@ -1,125 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { assert } from "console"; -import { ContainerRuntimeFactoryWithDefaultDataStore } from "@fluidframework/aqueduct"; -import { IRequest, IResponse } from "@fluidframework/core-interfaces"; -import { ITestObjectProvider } from "@fluidframework/test-utils"; -import { describeNoCompat } from "@fluid-internal/test-version-utils"; -import { - DefaultSummaryConfiguration, - IContainerRuntimeOptions, - ISummaryConfigurationHeuristics, -} from "@fluidframework/container-runtime"; -import { IContainerRuntimeBase } from "@fluidframework/runtime-definitions"; -import { makeRandom } from "@fluid-internal/stochastic-test-utils"; -import { delay } from "@fluidframework/common-utils"; -import { mockConfigProvider } from "../mockConfigProvider"; -import { IgnoreErrorLogger } from "../ignoreErrorLogger"; -import { ContainerManager } from "../containerManager"; -import { rootDataObjectWithChildDataObjectFactory } from "../dataObjectWithChildDataObject"; -import { dataObjectWithCounterFactory } from "../dataObjectWithCounter"; - -describeNoCompat("GC InactiveObjectX tests", (getTestObjectProvider) => { - let provider: ITestObjectProvider; - - const summaryOptions = DefaultSummaryConfiguration as ISummaryConfigurationHeuristics; - // Summaries should run automatically - const runtimeOptions: IContainerRuntimeOptions = { - ...summaryOptions, - gcOptions: { - gcAllowed: true, - }, - }; - const innerRequestHandler = async ( - request: IRequest, - runtime: IContainerRuntimeBase, - ): Promise => runtime.IFluidHandleContext.resolveHandle(request); - const runtimeFactory = new ContainerRuntimeFactoryWithDefaultDataStore( - rootDataObjectWithChildDataObjectFactory, - [ - [ - rootDataObjectWithChildDataObjectFactory.type, - Promise.resolve(rootDataObjectWithChildDataObjectFactory), - ], - [dataObjectWithCounterFactory.type, Promise.resolve(dataObjectWithCounterFactory)], - ], - undefined, - [innerRequestHandler], - runtimeOptions, - ); - - // const sessionExpiryDurationMs = 3000; // 3 seconds - // TODO: create a config setup to allow for cohesive numbers - // This value needs to be cohesive with a bunch of other values, for now it's hard coded - const inactiveTimeoutMs = 10 * 1000; // 10 seconds - - // Set settings here, may be useful to put everything in the mockConfigProvider - const settings = { - // "Fluid.GarbageCollection.RunSessionExpiry": "true", - "Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs": inactiveTimeoutMs, - // "Fluid.GarbageCollection.TestOverride.SessionExpiryMs": sessionExpiryDurationMs, - }; - const configProvider = mockConfigProvider(settings); - - let overrideLogger: IgnoreErrorLogger; - - // Test timeout - const testTimeout = 5 * 60 * 1000; // 5 minutes - - // Currently for GC Sweep testing only, run with npm run test. Should not be running in CI - // Note: can run with npm run test:build to build and run the test - // TODO: have this configurable via mocha cmd arguments - // TODO: setup test to run in CI - const numberOfTestPasses = 1; - for (let i = 0; i < numberOfTestPasses; i++) { - const seed = Math.random(); - const liveContainers = 10; - const random = makeRandom(); - it(`GC Ops Test with Seed: ${seed}, Containers: ${liveContainers}`, async () => { - provider = getTestObjectProvider({ - syncSummarizer: true, - }); - - // Wrap the logger - overrideLogger = new IgnoreErrorLogger(provider.logger); - provider.logger = overrideLogger; - - // Create the containerManager responsible for retrieving, creating, loading, and tracking the lifetime of containers. - const containerManager = new ContainerManager(runtimeFactory, configProvider, provider); - await containerManager.createContainer(); - const testStart = Date.now(); - while (containerManager.connectedContainerCount < liveContainers) { - await containerManager.loadContainer(); - } - - while (Date.now() - testStart < testTimeout) { - if (containerManager.connectedContainerCount < liveContainers) { - await containerManager.loadContainer(); - } else { - containerManager.closeRandomContainer(random); - } - - // This delay timeout is temporary until we decide a reasonable set of waits. - await delay(inactiveTimeoutMs); - } - - // Cleanup/Close all active containers. - while (containerManager.hasConnectedContainers()) { - containerManager.closeRandomContainer(random); - } - - overrideLogger.logEvents(seed); - assert( - overrideLogger.inactiveObjectEvents.length === 0, - `InactiveObject events occurred - look at nyc/testData-${seed}/inactiveObjectEvents.json`, - ); - assert( - overrideLogger.errorEvents.length === 0, - `Error events occurred - look at nyc/testData-${seed}/errorEvents.json`, - ); - }).timeout(testTimeout + 40 * 1000); - } -}); diff --git a/packages/test/test-gc-sweep-tests/src/test/tsconfig.json b/packages/test/test-gc-sweep-tests/src/test/tsconfig.json deleted file mode 100644 index 8d9c997d58b7..000000000000 --- a/packages/test/test-gc-sweep-tests/src/test/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@fluidframework/build-common/ts-common-config.json", - "compilerOptions": { - "declaration": false, - "declarationMap": false, - "rootDir": "../", - "outDir": "../../dist", - "types": ["mocha", "@fluidframework/test-driver-definitions"], - }, - "include": ["./**/*", "../*"], -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd674c0f02bc..10ea58d9ce68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14761,133 +14761,6 @@ importers: specifier: ~4.5.5 version: 4.5.5 - packages/test/test-gc-sweep-tests: - dependencies: - '@fluid-internal/stochastic-test-utils': - specifier: workspace:~ - version: link:../stochastic-test-utils - '@fluid-internal/test-version-utils': - specifier: workspace:~ - version: link:../test-version-utils - '@fluidframework/aqueduct': - specifier: workspace:~ - version: link:../../framework/aqueduct - '@fluidframework/cell': - specifier: workspace:~ - version: link:../../dds/cell - '@fluidframework/common-definitions': - specifier: ^0.20.1 - version: 0.20.1 - '@fluidframework/common-utils': - specifier: ^1.1.1 - version: 1.1.1 - '@fluidframework/container-definitions': - specifier: workspace:~ - version: link:../../common/container-definitions - '@fluidframework/container-runtime': - specifier: workspace:~ - version: link:../../runtime/container-runtime - '@fluidframework/core-interfaces': - specifier: workspace:~ - version: link:../../common/core-interfaces - '@fluidframework/counter': - specifier: workspace:~ - version: link:../../dds/counter - '@fluidframework/datastore-definitions': - specifier: workspace:~ - version: link:../../runtime/datastore-definitions - '@fluidframework/ink': - specifier: workspace:~ - version: link:../../dds/ink - '@fluidframework/map': - specifier: workspace:~ - version: link:../../dds/map - '@fluidframework/matrix': - specifier: workspace:~ - version: link:../../dds/matrix - '@fluidframework/ordered-collection': - specifier: workspace:~ - version: link:../../dds/ordered-collection - '@fluidframework/register-collection': - specifier: workspace:~ - version: link:../../dds/register-collection - '@fluidframework/runtime-definitions': - specifier: workspace:~ - version: link:../../runtime/runtime-definitions - '@fluidframework/runtime-utils': - specifier: workspace:~ - version: link:../../runtime/runtime-utils - '@fluidframework/sequence': - specifier: workspace:~ - version: link:../../dds/sequence - '@fluidframework/telemetry-utils': - specifier: workspace:~ - version: link:../../utils/telemetry-utils - '@fluidframework/test-driver-definitions': - specifier: workspace:~ - version: link:../test-driver-definitions - '@fluidframework/test-utils': - specifier: workspace:~ - version: link:../test-utils - mocha: - specifier: ^10.2.0 - version: 10.2.0 - random-js: - specifier: ^1.0.8 - version: 1.0.8 - uuid: - specifier: ^8.3.1 - version: 8.3.2 - devDependencies: - '@fluid-tools/build-cli': - specifier: ^0.19.0-166151 - version: 0.19.0-166151(@types/node@14.18.47) - '@fluidframework/build-common': - specifier: ^1.2.0 - version: 1.2.0 - '@fluidframework/eslint-config-fluid': - specifier: ^2.0.0 - version: 2.0.0(eslint@8.6.0)(typescript@4.5.5) - '@fluidframework/mocha-test-setup': - specifier: workspace:~ - version: link:../mocha-test-setup - '@types/mocha': - specifier: ^9.1.1 - version: 9.1.1 - '@types/nock': - specifier: ^9.3.0 - version: 9.3.1 - '@types/node': - specifier: ^14.18.38 - version: 14.18.47 - '@types/uuid': - specifier: ^8.3.0 - version: 8.3.4 - concurrently: - specifier: ^7.6.0 - version: 7.6.0 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - eslint: - specifier: ~8.6.0 - version: 8.6.0 - nock: - specifier: ^10.0.1 - version: 10.0.6 - nyc: - specifier: ^15.1.0 - version: 15.1.0 - prettier: - specifier: ~2.6.2 - version: 2.6.2 - rimraf: - specifier: ^4.4.0 - version: 4.4.1 - typescript: - specifier: ~4.5.5 - version: 4.5.5 - packages/test/test-pairwise-generator: dependencies: '@fluidframework/common-utils':