@fluidframework/azure-end-to-end-tests 2.101.1 → 2.102.0

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/eslint.config.mts +4 -0
  3. package/lib/packageVersion.js +9 -0
  4. package/lib/packageVersion.js.map +1 -0
  5. package/lib/test/AzureClientFactory.js.map +1 -1
  6. package/lib/test/audience.spec.js +16 -16
  7. package/lib/test/audience.spec.js.map +1 -1
  8. package/lib/test/containerCreate.spec.js +27 -24
  9. package/lib/test/containerCreate.spec.js.map +1 -1
  10. package/lib/test/ddsTests.spec.js +17 -17
  11. package/lib/test/ddsTests.spec.js.map +1 -1
  12. package/lib/test/multiprocess/childClient.tool.js +3 -2
  13. package/lib/test/multiprocess/childClient.tool.js.map +1 -1
  14. package/lib/test/signals.spec.js +4 -4
  15. package/lib/test/signals.spec.js.map +1 -1
  16. package/lib/test/tree.spec.js +8 -8
  17. package/lib/test/tree.spec.js.map +1 -1
  18. package/lib/test/utils.js +3 -0
  19. package/lib/test/utils.js.map +1 -1
  20. package/lib/test/viewContainerVersion.spec.js +9 -9
  21. package/lib/test/viewContainerVersion.spec.js.map +1 -1
  22. package/package.json +29 -27
  23. package/src/packageVersion.ts +9 -0
  24. package/src/test/.mocharc.js +15 -0
  25. package/src/test/AzureClientFactory.ts +4 -3
  26. package/src/test/audience.spec.ts +36 -16
  27. package/src/test/containerCreate.spec.ts +31 -24
  28. package/src/test/ddsTests.spec.ts +29 -17
  29. package/src/test/multiprocess/childClient.tool.ts +7 -2
  30. package/src/test/signals.spec.ts +12 -4
  31. package/src/test/tree.spec.ts +8 -8
  32. package/src/test/tsconfig.json +6 -3
  33. package/src/test/utils.ts +4 -0
  34. package/src/test/viewContainerVersion.spec.ts +9 -9
  35. package/src/test/.mocharc.cjs +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"containerCreate.spec.js","sourceRoot":"","sources":["../../src/test/containerCreate.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EACN,WAAW,GAEX,MAAM,2CAA2C,CAAC;AACnD,4GAA4G;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAEN,iCAAiC,GAEjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,iCAAiC,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,cAAc,GAAG,CAAC,QAAqC,EAAuB,EAAE,CAAC,CAAC;IACvF,YAAY,EAAE,CAAC,IAAY,EAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;AACnC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,+BAA+B,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC;QAChC,IAAI,MAAmB,CAAC;QACxB,IAAI,MAAuB,CAAC;QAC5B,MAAM,WAAW,GAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;QAE1D,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE;YACpC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC7B,MAAM,GAAG;gBACR,cAAc,EAAE;oBACf,IAAI,EAAE,SAAS;iBACf;aACD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;;;WAMG;QACH,EAAE,CAAC,+BAA+B,EAAE,KAAK;YACxC,gFAAgF;YAChF,yGAAyG;YACzG,yGAAyG;YACzG,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,8BAA8B,CAC9B,CAAC;YAEF,2BAA2B;YAC3B,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,OAAO,WAAW,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACvC,IAAI,WAAmB,CAAC;YACxB,IAAI,SAA0B,CAAC;YAC/B,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,iBAAiB,GAAG,MAAM,0BAA0B,CACzD,qBAAqB,CAAC,kBAAkB,EACxC,gBAAgB,EAChB,kBAAkB,CAClB,CAAC;gBACF,WAAW,GAAG,iCAAiC,CAAC,iBAAiB,CAAC,CAAC;gBACnE,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACP,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5D,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YACxC,CAAC;YAED,IAAI,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC7D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBAC/E,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,WAAW,CAAC,OAAO,WAAW,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;YACtF,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,kDAAkD,CAClD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,WAAmB,CAAC;YACxB,IAAI,SAA0B,CAAC;YAC/B,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,iBAAiB,GAAG,MAAM,0BAA0B,CACzD,qBAAqB,CAAC,0BAA0B,EAChD,gBAAgB,EAChB,kBAAkB,CAClB,CAAC;gBACF,WAAW,GAAG,iCAAiC,CAAC,iBAAiB,CAAC,CAAC;gBACnE,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACP,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5D,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YACxC,CAAC;YAED,IAAI,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC7D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBAC/E,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,WAAW,CAAC,OAAO,WAAW,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;YACtF,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,8CAA8C,CAC9C,CAAC;YACF,MAAM,MAAM,CAAC,OAAO,CACnB,SAAS,CAAC,MAAM,EAAE,EAClB,GAAG,EAAE,CAAC,IAAI,EACV,mCAAmC,CACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC/E,IAAI,WAAmB,CAAC;YACxB,IAAI,YAA6B,CAAC;YAClC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,iBAAiB,GAAG,MAAM,0BAA0B,CACzD,qBAAqB,CAAC,4BAA4B,EAClD,gBAAgB,EAChB,kBAAkB,CAClB,CAAC;gBACF,WAAW,GAAG,iCAAiC,CAAC,iBAAiB,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACP,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1E,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;gBAE1C,IAAI,YAAY,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;oBAChE,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;wBAClF,UAAU,EAAE,gBAAgB;wBAC5B,QAAQ,EAAE,6BAA6B;qBACvC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,MAAM,CAAC,aAAa,CACzB,SAAS,EACT,GAAG,EAAE,CAAC,IAAI,EACV,sDAAsD,CACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;;;WAMG;QACH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAChG,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;YACrC,OAAO,CAAC,KAAK,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;YAC/B,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAElF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAW,EAAE;gBACzC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,iCAAiC,CAAC,CAAC;gBACnF,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;oBAC1C,MAAM,CAAC,MAAM,CACZ,WAAW,IAAI,KAAK;wBACnB,KAAK,CAAC,SAAS,KAAK,iCAAiC;wBACrD,YAAY,IAAI,KAAK;wBACrB,KAAK,CAAC,UAAU,KAAK,GAAG,EACzB,qBAAqB,KAAK,CAAC,OAAO,EAAE,CACpC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,CAAC;gBACD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CACnB,qBAAqB,EACrB,OAAO,EACP,gDAAgD,CAChD,CAAC;YACF,kDAAkD;YAClD,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wCAAwC,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE;QAC1E,IAAI,MAAmB,CAAC;QACxB,IAAI,MAAuB,CAAC;QAC5B,IAAI,UAAsB,CAAC;QAC3B,MAAM,WAAW,GAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;QAE1D,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE;YACpC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YACjF,MAAM,GAAG;gBACR,cAAc,EAAE;oBACf,IAAI,EAAE,SAAS;iBACf;aACD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,EAAE,CAAC,0CAA0C,EAAE,KAAK;YACnD,4FAA4F;YAC5F,6DAA6D;YAC7D,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;YACD,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,uCAAuC,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAsB,CAAC;YAClD,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,CAAC,yCAAyC,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE;QAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC;QAChC,MAAM,gBAAgB,GAAG,MAAM,CAAC;QAChC,MAAM,WAAW,GAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1D,IAAI,aAA0B,CAAC;QAC/B,IAAI,YAA+B,CAAC;QACpC,MAAM,aAAa,GAAG;YACrB,cAAc,EAAE;gBACf,IAAI,EAAE,SAAS;aACf;SACyB,CAAC;QAE5B,MAAM,YAAY,GAAG;YACpB,cAAc,EAAE;gBACf,IAAI,EAAE,eAAe;aACrB;SACD,CAAC;QAEF,UAAU,CAAC,oBAAoB,EAAE;YAChC,aAAa,GAAG,iBAAiB,EAAE,CAAC;YACpC,YAAY,GAAG,uBAAuB,EAAE,CAAC;YACzC,IAAI,WAAW,EAAE,CAAC;gBACjB,2DAA2D;gBAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;QACF,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,KAAK,MAAM,iBAAiB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;YACrD,EAAE,CAAC,+BAA+B,iBAAiB,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAChH,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GACnC,MAAM,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC;gBAEnD,IAAI,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;oBACnE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAC/D;wBACC,UAAU,EAAE,gBAAgB;wBAC5B,QAAQ,EAAE,mCAAmC;qBAC7C,CACD,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,cAAc,CAC/B,CAAC,OAAO,EAAE,EAAE;oBACX,MAAM,eAAe,GAAG,GAAS,EAAE;wBAClC,IACE,eAAe,CAAC,cAAc,CAAC,IAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,OAAO,EAC9E,CAAC;4BACF,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;4BAC9C,OAAO,EAAE,CAAC;wBACX,CAAC;oBACF,CAAC,CAAC;oBACF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC9C,CAAC,EACD;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,kBAAkB;iBAC5B,CACD,CAAC;gBACD,eAAe,CAAC,cAAc,CAAC,IAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAE7E,wFAAwF;gBACxF,MAAM,SAAS,CAAC;gBAEhB,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;oBAC/B,sFAAsF;oBACtF,gCAAgC;oBAChC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC3B,CAAC;gBAED,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAC3C,WAAW,EACX,aAAa,EACb,iBAAiB,CACjB,CAAC;gBACF,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;gBAEnF,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,SAAS,CAAC;gBAExD,IAAI,gBAAgB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;oBACpE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAChE;wBACC,UAAU,EAAE,gBAAgB;wBAC5B,QAAQ,EAAE,oCAAoC;qBAC9C,CACD,CAAC;gBACH,CAAC;gBAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAS,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,CAAC,0CAA0C,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE;QAC5E,MAAM,gBAAgB,GAAG,MAAM,CAAC;QAChC,MAAM,WAAW,GAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1D,IAAI,cAA2B,CAAC;QAChC,IAAI,cAA2B,CAAC;QAChC,IAAI,YAA+B,CAAC;QACpC,IAAI,OAAqB,CAAC;QAE1B,MAAM,aAAa,GAAG;YACrB,cAAc,EAAE;gBACf,IAAI,EAAE,SAAS;aACf;SACyB,CAAC;QAE5B,MAAM,YAAY,GAAG;YACpB,cAAc,EAAE;gBACf,IAAI,EAAE,eAAe;aACrB;SACD,CAAC;QAEF,MAAM,CAAC;YACN,OAAO,GAAG,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,oBAAoB,EAAE;YAChC,cAAc,GAAG,iBAAiB,EAAE,CAAC;YACrC,cAAc,GAAG,iBAAiB,EAAE,CAAC;YACrC,YAAY,GAAG,uBAAuB,EAAE,CAAC;YACzC,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC;YACT,OAAO,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,cAAc,CAAC,eAAe,CAC3E,aAAa;YACb,0FAA0F;YAC1F,GAAG,CACH,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAEpD,IAAI,gBAAgB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACpE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAChE;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,oCAAoC;iBAC9C,CACD,CAAC;YACH,CAAC;YAED,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEzD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvE,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YAEnF,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,SAAS,CAAC;YACvD,IAAI,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACnE,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBACrF,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,mCAAmC;iBAC7C,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAI,eAAe,CAAC,cAAc,CAAC,IAAwB,CAAC,GAAG,CAC1E,KAAK,CACL,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;YAC1G,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,cAAc,CAAC,eAAe,CAC5E,aAAa,EACb,GAAG,CACH,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAErD,IAAI,iBAAiB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACrE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EACjE;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,qCAAqC;iBAC/C,CACD,CAAC;YACH,CAAC;YAED,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;YAC/E,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YAEnF,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,SAAS,CAAC;YACzD,IAAI,iBAAiB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACrE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EACjE;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,qCAAqC;iBAC/C,CACD,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAS,KAAK,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;YAC1G,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,cAAc,CAAC,eAAe,CAC5E,aAAa,EACb,GAAG,CACH,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAErD,IAAI,iBAAiB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACrE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EACjE;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,qCAAqC;iBAC/C,CACD,CAAC;YACH,CAAC;YAED,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;YAC/E,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YAEnF,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,SAAS,CAAC;YACzD,IAAI,iBAAiB,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACrE,MAAM,cAAc,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EACjE;oBACC,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,qCAAqC;iBAC/C,CACD,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAS,KAAK,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,cAAc,CAAC,eAAe,CACrE,aAAa,EACb,GAAG,CACH,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAE9C,IAAI,UAAU,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC9D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBAChF,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG;YACtC,0GAA0G;YACzG,UAAkB,CAAC,SAAS,EAC7B,sBAAsB,CACtB,CAAC;YAEF,oDAAoD;YACpD,6IAA6I;YAC5I,UAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE;gBAC7D,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,YAAY,CAAC,YAAY,CACrE,WAAW,EACX,YAAY,CACZ,CAAC;YACF,IAAI,eAAe,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACnE,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;oBACrF,UAAU,EAAE,gBAAgB;oBAC5B,QAAQ,EAAE,mCAAmC;iBAC7C,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,eAAe,CAAC,cAAc,CAAC,IAAuB,CAAC;YAEzE,iDAAiD;YACjD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1C,2BAA2B;YAC3B,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAqC,CAAC;gBAC3D,IACC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS;oBACrC,OAAO,CAAC,QAA6B,CAAC,IAAI,KAAK,cAAc,EAC7D,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBAC9C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,iBAAiB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;YACrD,EAAE,CAAC,qDAAqD,iBAAiB,GAAG,EAAE,KAAK,IAAI,EAAE;gBACxF,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,cAAc,CAAC,eAAe,CACrE,aAAa,EACb,iBAAiB,CACjB,CAAC;gBACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;gBAE9C,IAAI,UAAU,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;oBAC9D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;wBAChF,UAAU,EAAE,gBAAgB;wBAC5B,QAAQ,EAAE,6BAA6B;qBACvC,CAAC,CAAC;gBACJ,CAAC;gBAED,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG;gBACtC,0GAA0G;gBACzG,UAAkB,CAAC,SAAS,EAC7B,sBAAsB,CACtB,CAAC;gBAEF,oDAAoD;gBACpD,6IAA6I;gBAC5I,UAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE;oBAC7D,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,cAAc,CAAC,YAAY,CAClE,WAAW,EACX,aAAa,EACb,iBAAiB,CACjB,CAAC;gBACF,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC;gBAE5C,kCAAkC;gBAClC,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEhD,2BAA2B;gBAC3B,IAAI,iBAAiB,GAAG,CAAC,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACnD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAqC,CAAC;oBAC3D,IACC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS;wBACtC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;wBACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAwB,CAAC,IAAI,KAAK,cAAc,EAC3E,CAAC;wBACF,iBAAiB,EAAE,CAAC;oBACrB,CAAC;gBACF,CAAC;gBAED,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;oBAC/B,MAAM,CAAC,WAAW,CACjB,iBAAiB,EACjB,CAAC,EACD,8CAA8C,CAC9C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,WAAW,CACjB,iBAAiB,EACjB,CAAC,EACD,2CAA2C,CAC3C,CAAC;gBACH,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACnD,MAAM,yBAAyB,GAC9B,iEAAiE,CAAC;IACnE,SAAS,YAAY;QACpB,OAAO,iBAAiB,CACvB,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,iCAAiC,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACzE,CAAC,CACD,CAAC;IACH,CAAC;IACD,EAAE,CAAC,iCAAiC,EAAE,KAAK;QAC1C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG;YACd,cAAc,EAAE;gBACf,IAAI,EAAE,UAAU;aAChB;SACD,CAAC;QACF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEhE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK;QAClD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG;YACd,cAAc,EAAE;gBACf,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,SAAS;aACd;SACD,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CACnB,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,CAAC,KAAc,EAAE,EAAE;YAClB,MAAM,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACb,CAAC,EACD,mDAAmD,CACnD,CAAC;IACH,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 \"node:assert\";\n\nimport type { AzureClient } from \"@fluidframework/azure-client\";\nimport type { AzureClient as AzureClientLegacy } from \"@fluidframework/azure-client-legacy\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport {\n\tMessageType,\n\ttype ISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/legacy\";\n// eslint-disable-next-line import-x/no-internal-modules -- TODO consider a test exposure to avoid /internal\nimport { isTreeContainerSchema } from \"@fluidframework/fluid-static/internal\";\nimport {\n\ttype ContainerSchema,\n\tcreateTreeContainerRuntimeFactory,\n\ttype IFluidContainer,\n} from \"@fluidframework/fluid-static/legacy\";\nimport { SharedMap } from \"@fluidframework/map/legacy\";\nimport { SharedMap as SharedMapLegacy } from \"@fluidframework/map-legacy\";\nimport { MockLogger, UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\nimport { SharedTree } from \"@fluidframework/tree/legacy\";\nimport type { SinonSandbox } from \"sinon\";\nimport { createSandbox } from \"sinon\";\n\nimport {\n\tcreateAzureClient,\n\tcreateAzureClientLegacy,\n\tcreateContainerFromPayload,\n\tgetContainerIdFromPayloadResponse,\n} from \"./AzureClientFactory.js\";\nimport * as ephemeralSummaryTrees from \"./ephemeralSummaryTrees.js\";\nimport { getTestMatrix, mapWait } from \"./utils.js\";\n\nconst configProvider = (settings: Record<string, ConfigTypes>): IConfigProviderBase => ({\n\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n});\n\nconst testMatrix = getTestMatrix();\nfor (const testOpts of testMatrix) {\n\tdescribe(`Container create scenarios (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tlet client: AzureClient;\n\t\tlet schema: ContainerSchema;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tclient = createAzureClient();\n\t\t\tschema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test when an Azure Client container is created,\n\t\t * it is initially detached.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"Created container is detached\", async function () {\n\t\t\t// We currently don't have API surface to create a detached ephemeral container.\n\t\t\t// Instead, ephemeral containers are created indirectly using the test util createContainerFromPayload().\n\t\t\t// Once we add ephemeral container API surface to AzureClient, we can enable this test for ephemeral too.\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tconst { container } = await client.createContainer(schema, \"2\");\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Detached,\n\t\t\t\t\"Container should be detached\",\n\t\t\t);\n\n\t\t\t// Make sure we can attach.\n\t\t\tconst containerId = await container.attach();\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test attaching a container.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can attach a container\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.canAttachContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Attached,\n\t\t\t\t\"Container is not attached after attach is called\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test if attaching a container twice fails.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"cannot attach a container twice\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.cannotAttachContainerTwice,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Attached,\n\t\t\t\t\"Container is attached after attach is called\",\n\t\t\t);\n\t\t\tawait assert.rejects(\n\t\t\t\tcontainer.attach(),\n\t\t\t\t() => true,\n\t\t\t\t\"Container should not attach twice\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if Azure Client can get an existing container.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can retrieve existing Azure Fluid Relay container successfully\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet newContainer: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.retrieveExistingAFRContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t} else {\n\t\t\t\t({ container: newContainer } = await client.createContainer(schema, \"2\"));\n\t\t\t\tcontainerId = await newContainer.attach();\n\n\t\t\t\tif (newContainer.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => newContainer.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resources = client.getContainer(containerId, schema, \"2\");\n\t\t\tawait assert.doesNotReject(\n\t\t\t\tresources,\n\t\t\t\t() => true,\n\t\t\t\t\"container cannot be retrieved from Azure Fluid Relay\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if Azure Client can get a non-exiting container.\n\t\t *\n\t\t * Expected behavior: an error should be thrown when trying to get a non-existent container.\n\t\t *\n\t\t * Note: This test is currently skipped because it is failing when ran against tinylicious (azure-local-service).\n\t\t */\n\t\tit(\"cannot load improperly created container (cannot load a non-existent container)\", async () => {\n\t\t\tconst consoleErrorFn = console.error;\n\t\t\tconsole.error = (): void => {};\n\t\t\tconst containerAndServicesP = client.getContainer(\"containerConfig\", schema, \"2\");\n\n\t\t\tconst errorFn = (error: Error): boolean => {\n\t\t\t\tassert.notStrictEqual(error.message, undefined, \"Azure Client error is undefined\");\n\t\t\t\t// AFR gives R11s fetch error, T9s gives 0x8e4\n\t\t\t\tif (process.env.FLUID_CLIENT === \"azure\") {\n\t\t\t\t\tassert.strict(\n\t\t\t\t\t\t\"errorType\" in error &&\n\t\t\t\t\t\t\terror.errorType === \"fileNotFoundOrAccessDeniedError\" &&\n\t\t\t\t\t\t\t\"statusCode\" in error &&\n\t\t\t\t\t\t\terror.statusCode === 404,\n\t\t\t\t\t\t`Unexpected error: ${error.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tassert.strict(error.message === \"0x8e4\", `Unexpected error: ${error.message}`);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tawait assert.rejects(\n\t\t\t\tcontainerAndServicesP,\n\t\t\t\terrorFn,\n\t\t\t\t\"Azure Client can load a non-existent container\",\n\t\t\t);\n\t\t\t// eslint-disable-next-line require-atomic-updates\n\t\t\tconsole.error = consoleErrorFn;\n\t\t});\n\t});\n\n\tdescribe(`Container create with feature flags (${testOpts.variant})`, () => {\n\t\tlet client: AzureClient;\n\t\tlet schema: ContainerSchema;\n\t\tlet mockLogger: MockLogger;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tmockLogger = new MockLogger();\n\t\t\tclient = createAzureClient(undefined, undefined, mockLogger, configProvider({}));\n\t\t\tschema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test if AzureClient can create a container with feature gates.\n\t\t *\n\t\t * Expected behavior: An error should not be thrown and the logger should have logged the enabled feature gates.\n\t\t */\n\t\tit(\"can create containers with feature gates\", async function () {\n\t\t\t// Ephemeral containers are currently not created with the AzureClient, and therefore do not\n\t\t\t// have an attached mockLogger which is needed for this test.\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tawait client.createContainer(schema, \"2\");\n\t\t\tconst event = mockLogger.events.find((e) => e.eventName.endsWith(\"ContainerLoadStats\"));\n\t\t\tassert(event !== undefined, \"ContainerLoadStats event should exist\");\n\t\t\tconst featureGates = event.featureGates as string;\n\t\t\tassert(featureGates.length > 0);\n\t\t});\n\t});\n\n\t/**\n\t * Testing scenarios for creating/loading containers with the legacy (LTS) version of AzureClient.\n\t */\n\tdescribe(`Container create with legacy version (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tconst valueSetTimoutMs = 10_000;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\t\tlet clientCurrent: AzureClient;\n\t\tlet clientLegacy: AzureClientLegacy;\n\t\tconst schemaCurrent = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\n\t\tconst schemaLegacy = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMapLegacy,\n\t\t\t},\n\t\t};\n\n\t\tbeforeEach(\"createAzureClients\", function () {\n\t\t\tclientCurrent = createAzureClient();\n\t\t\tclientLegacy = createAzureClientLegacy();\n\t\t\tif (isEphemeral) {\n\t\t\t\t// TODO: Should we skip ephemeral tests for legacy clients?\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient can get a container made by a legacy AzureClient.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tfor (const compatibilityMode of [\"1\", \"2\"] as const) {\n\t\t\tit(`Current AzureClient (mode: \"${compatibilityMode}\") can get container made by legacy AzureClient`, async () => {\n\t\t\t\tconst { container: containerLegacy } =\n\t\t\t\t\tawait clientLegacy.createContainer(schemaLegacy);\n\t\t\t\tconst containerId = await containerLegacy.attach();\n\n\t\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t\t(resolve) => containerLegacy.once(\"connected\", () => resolve()),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst valueSetP = timeoutPromise(\n\t\t\t\t\t(resolve) => {\n\t\t\t\t\t\tconst confirmValueSet = (): void => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(containerLegacy.initialObjects.map1 as SharedMapLegacy).get(\"key\") === \"value\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcontainerLegacy.off(\"saved\", confirmValueSet);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontainerLegacy.on(\"saved\", confirmValueSet);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: valueSetTimoutMs,\n\t\t\t\t\t\terrorMsg: \"valueSet timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\t(containerLegacy.initialObjects.map1 as SharedMapLegacy).set(\"key\", \"value\");\n\n\t\t\t\t// Await the value being saved, especially important if we dispose the legacy container.\n\t\t\t\tawait valueSetP;\n\n\t\t\t\tif (compatibilityMode === \"2\") {\n\t\t\t\t\t// We don't support interop between legacy containers and \"2\" mode, dispose the legacy\n\t\t\t\t\t// container to avoid this case.\n\t\t\t\t\tcontainerLegacy.dispose();\n\t\t\t\t}\n\n\t\t\t\tconst resources = clientCurrent.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\t\tconst { container: containerCurrent } = await resources;\n\n\t\t\t\tif (containerCurrent.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t\t(resolve) => containerCurrent.once(\"connected\", () => resolve()),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\t\terrorMsg: \"containerCurrent connect() timeout\",\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst result = containerCurrent.initialObjects.map1.get<string>(\"key\");\n\t\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t\t});\n\t\t}\n\t});\n\n\t/**\n\t * Testing creating/loading containers between the compatibility modes.\n\t */\n\tdescribe(`Container create with current version (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\t\tlet clientCurrent1: AzureClient;\n\t\tlet clientCurrent2: AzureClient;\n\t\tlet clientLegacy: AzureClientLegacy;\n\t\tlet sandbox: SinonSandbox;\n\n\t\tconst schemaCurrent = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\n\t\tconst schemaLegacy = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMapLegacy,\n\t\t\t},\n\t\t};\n\n\t\tbefore(function () {\n\t\t\tsandbox = createSandbox();\n\t\t});\n\n\t\tbeforeEach(\"createAzureClients\", function () {\n\t\t\tclientCurrent1 = createAzureClient();\n\t\t\tclientCurrent2 = createAzureClient();\n\t\t\tclientLegacy = createAzureClientLegacy();\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tsandbox.restore();\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a legacy AzureClient can get a container made by the current AzureClient.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(`Legacy AzureClient can get container made by current AzureClient (mode: \"1\")`, async () => {\n\t\t\tconst { container: containerCurrent } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t// Note: Only containers created in compatibility mode \"1\" may be loaded by legacy client.\n\t\t\t\t\"1\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent.attach();\n\n\t\t\tif (containerCurrent.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientLegacy.getContainer(containerId, schemaLegacy);\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerLegacy } = await resources;\n\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => containerLegacy.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = (containerLegacy.initialObjects.map1 as SharedMapLegacy).get<string>(\n\t\t\t\t\"key\",\n\t\t\t);\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient in compatibility mode \"2\" can get a container made by the current AzureClient in mode \"1\".\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise be returned.\n\t\t */\n\t\tit(`Current AzureClient (mode: \"2\") can get container made by current AzureClient (mode: \"1\")`, async () => {\n\t\t\tconst { container: containerCurrent1 } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"1\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent1.attach();\n\n\t\t\tif (containerCurrent1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent1.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent1 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent1.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientCurrent2.getContainer(containerId, schemaCurrent, \"2\");\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerCurrent2 } = await resources;\n\t\t\tif (containerCurrent2.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent2.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent2 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = containerCurrent2.initialObjects.map1.get<string>(\"key\");\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient in compatibility mode \"1\" can get a container made by the current AzureClient in mode \"2\".\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise be returned.\n\t\t */\n\t\tit(`Current AzureClient (mode: \"1\") can get container made by current AzureClient (mode: \"2\")`, async () => {\n\t\t\tconst { container: containerCurrent2 } = await clientCurrent2.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"2\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent2.attach();\n\n\t\t\tif (containerCurrent2.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent2.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent2 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent2.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientCurrent1.getContainer(containerId, schemaCurrent, \"1\");\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerCurrent1 } = await resources;\n\t\t\tif (containerCurrent1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent1.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent1 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = containerCurrent1.initialObjects.map1.get<string>(\"key\");\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\tit(\"op grouping disabled as expected for 1.x clients\", async () => {\n\t\t\tconst { container: container1 } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"1\",\n\t\t\t);\n\t\t\tconst containerId = await container1.attach();\n\n\t\t\tif (container1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container1.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst containerProcessSpy = sandbox.spy(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\t\t\t\t(container1 as any).container,\n\t\t\t\t\"processRemoteMessage\",\n\t\t\t);\n\n\t\t\t// Explicitly force ops sent to be in the same batch\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t(container1 as any).container._runtime.orderSequentially(() => {\n\t\t\t\tconst map1 = container1.initialObjects.map1;\n\t\t\t\tmap1.set(\"1\", 1);\n\t\t\t\tmap1.set(\"2\", 2);\n\t\t\t\tmap1.set(\"3\", 3);\n\t\t\t});\n\n\t\t\tconst { container: containerLegacy } = await clientLegacy.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tschemaLegacy,\n\t\t\t);\n\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => containerLegacy.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst legacyMap = containerLegacy.initialObjects.map1 as SharedMapLegacy;\n\n\t\t\t// Verify ops are processed by legacy AzureClient\n\t\t\tassert.strictEqual(legacyMap.get(\"1\"), 1);\n\t\t\tassert.strictEqual(legacyMap.get(\"2\"), 2);\n\t\t\tassert.strictEqual(legacyMap.get(\"3\"), 3);\n\n\t\t\t// Inspect the incoming ops\n\t\t\tfor (const call of containerProcessSpy.getCalls()) {\n\t\t\t\tconst message = call.firstArg as ISequencedDocumentMessage;\n\t\t\t\tif (\n\t\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t\t(message.contents as { type: string }).type === \"groupedBatch\"\n\t\t\t\t) {\n\t\t\t\t\tassert.fail(\"unexpected groupedBatch found\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfor (const compatibilityMode of [\"1\", \"2\"] as const) {\n\t\t\tit(`op grouping works as expected (compatibilityMode: ${compatibilityMode})`, async () => {\n\t\t\t\tconst { container: container1 } = await clientCurrent1.createContainer(\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tconst containerId = await container1.attach();\n\n\t\t\t\tif (container1.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => container1.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst containerProcessSpy = sandbox.spy(\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(container1 as any).container,\n\t\t\t\t\t\"processRemoteMessage\",\n\t\t\t\t);\n\n\t\t\t\t// Explicitly force ops sent to be in the same batch\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t\t(container1 as any).container._runtime.orderSequentially(() => {\n\t\t\t\t\tconst map1 = container1.initialObjects.map1;\n\t\t\t\t\tmap1.set(\"1\", 1);\n\t\t\t\t\tmap1.set(\"2\", 2);\n\t\t\t\t\tmap1.set(\"3\", 3);\n\t\t\t\t});\n\n\t\t\t\tconst { container: container2 } = await clientCurrent1.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tconst map2 = container2.initialObjects.map1;\n\n\t\t\t\t// Process ops coming from service\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"1\"), 1);\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"2\"), 2);\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"3\"), 3);\n\n\t\t\t\t// Inspect the incoming ops\n\t\t\t\tlet groupedBatchCount = 0;\n\t\t\t\tfor (const call of containerProcessSpy.getCalls()) {\n\t\t\t\t\tconst message = call.firstArg as ISequencedDocumentMessage;\n\t\t\t\t\tif (\n\t\t\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t\t\ttypeof message.contents === \"string\" &&\n\t\t\t\t\t\t(JSON.parse(message.contents) as { type?: unknown }).type === \"groupedBatch\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tgroupedBatchCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (compatibilityMode === \"1\") {\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tgroupedBatchCount,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t\"expect no op grouping in compatibilityMode 1\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tgroupedBatchCount,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t\"expect op grouping in compatibilityMode 2\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\n/**\n * Testing creating/loading containers with a tree-based root data object.\n */\ndescribe(\"Container create in tree-only mode\", () => {\n\tconst invalidSchemaErrorMessage =\n\t\t\"Tree-only mode requires exactly 1 SharedTree in initialObjects.\";\n\tfunction createClient(): AzureClient {\n\t\treturn createAzureClient(\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t({ schema, compatibilityMode }) => {\n\t\t\t\tif (!isTreeContainerSchema(schema)) {\n\t\t\t\t\tthrow new UsageError(invalidSchemaErrorMessage);\n\t\t\t\t}\n\t\t\t\treturn createTreeContainerRuntimeFactory({ schema, compatibilityMode });\n\t\t\t},\n\t\t);\n\t}\n\tit(\"can create tree-based container\", async function () {\n\t\tconst client = createClient();\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\ttree: SharedTree,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(schema, \"2\");\n\n\t\tassert(SharedTree.is(container.initialObjects.tree));\n\t});\n\n\tit(\"throws if invalid schema is encountered\", async function () {\n\t\tconst client = createClient();\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\ttree: SharedTree,\n\t\t\t\tmap: SharedMap,\n\t\t\t},\n\t\t};\n\n\t\tawait assert.rejects(\n\t\t\tclient.createContainer(schema, \"2\"),\n\t\t\t(error: unknown) => {\n\t\t\t\tassert(error instanceof UsageError);\n\t\t\t\tassert.strictEqual(error.message, invalidSchemaErrorMessage);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t\"Expected an error to be thrown for invalid schema\",\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"containerCreate.spec.js","sourceRoot":"","sources":["../../src/test/containerCreate.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 \"node:assert\";\n\nimport type { AzureClient } from \"@fluidframework/azure-client\";\nimport type { AzureClient as AzureClientLegacy } from \"@fluidframework/azure-client-legacy\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport {\n\tMessageType,\n\ttype ISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/legacy\";\n// eslint-disable-next-line import-x/no-internal-modules -- TODO consider a test exposure to avoid /internal\nimport { isTreeContainerSchema } from \"@fluidframework/fluid-static/internal\";\nimport {\n\ttype ContainerSchema,\n\tcreateTreeContainerRuntimeFactory,\n\ttype IFluidContainer,\n} from \"@fluidframework/fluid-static/legacy\";\nimport { SharedMap } from \"@fluidframework/map/legacy\";\nimport { SharedMap as SharedMapLegacy } from \"@fluidframework/map-legacy\";\nimport { MockLogger, UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\nimport { SharedTree } from \"@fluidframework/tree/legacy\";\nimport type { SinonSandbox } from \"sinon\";\nimport { createSandbox } from \"sinon\";\n\nimport {\n\tcreateAzureClient,\n\tcreateAzureClientLegacy,\n\tcreateContainerFromPayload,\n\tgetContainerIdFromPayloadResponse,\n} from \"./AzureClientFactory.js\";\nimport * as ephemeralSummaryTrees from \"./ephemeralSummaryTrees.js\";\nimport { getTestMatrix, mapWait, currentVersion } from \"./utils.js\";\n\nconst configProvider = (settings: Record<string, ConfigTypes>): IConfigProviderBase => ({\n\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n});\n\nconst testMatrix = getTestMatrix();\nfor (const testOpts of testMatrix) {\n\tdescribe(`Container create scenarios (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tlet client: AzureClient;\n\t\tlet schema: ContainerSchema;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tclient = createAzureClient();\n\t\t\tschema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test when an Azure Client container is created,\n\t\t * it is initially detached.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"Created container is detached\", async function () {\n\t\t\t// We currently don't have API surface to create a detached ephemeral container.\n\t\t\t// Instead, ephemeral containers are created indirectly using the test util createContainerFromPayload().\n\t\t\t// Once we add ephemeral container API surface to AzureClient, we can enable this test for ephemeral too.\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tconst { container } = await client.createContainer(schema, currentVersion);\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Detached,\n\t\t\t\t\"Container should be detached\",\n\t\t\t);\n\n\t\t\t// Make sure we can attach.\n\t\t\tconst containerId = await container.attach();\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test attaching a container.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can attach a container\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.canAttachContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, currentVersion));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Attached,\n\t\t\t\t\"Container is not attached after attach is called\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test if attaching a container twice fails.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"cannot attach a container twice\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.cannotAttachContainerTwice,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, currentVersion));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\t\tassert.strictEqual(\n\t\t\t\tcontainer.attachState,\n\t\t\t\tAttachState.Attached,\n\t\t\t\t\"Container is attached after attach is called\",\n\t\t\t);\n\t\t\tawait assert.rejects(\n\t\t\t\tcontainer.attach(),\n\t\t\t\t() => true,\n\t\t\t\t\"Container should not attach twice\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if Azure Client can get an existing container.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can retrieve existing Azure Fluid Relay container successfully\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet newContainer: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.retrieveExistingAFRContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t} else {\n\t\t\t\t({ container: newContainer } = await client.createContainer(schema, currentVersion));\n\t\t\t\tcontainerId = await newContainer.attach();\n\n\t\t\t\tif (newContainer.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => newContainer.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resources = client.getContainer(containerId, schema, currentVersion);\n\t\t\tawait assert.doesNotReject(\n\t\t\t\tresources,\n\t\t\t\t() => true,\n\t\t\t\t\"container cannot be retrieved from Azure Fluid Relay\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if Azure Client can get a non-exiting container.\n\t\t *\n\t\t * Expected behavior: an error should be thrown when trying to get a non-existent container.\n\t\t *\n\t\t * Note: This test is currently skipped because it is failing when ran against tinylicious (azure-local-service).\n\t\t */\n\t\tit(\"cannot load improperly created container (cannot load a non-existent container)\", async () => {\n\t\t\tconst consoleErrorFn = console.error;\n\t\t\tconsole.error = (): void => {};\n\t\t\tconst containerAndServicesP = client.getContainer(\n\t\t\t\t\"containerConfig\",\n\t\t\t\tschema,\n\t\t\t\tcurrentVersion,\n\t\t\t);\n\n\t\t\tconst errorFn = (error: Error): boolean => {\n\t\t\t\tassert.notStrictEqual(error.message, undefined, \"Azure Client error is undefined\");\n\t\t\t\t// AFR gives R11s fetch error, T9s gives 0x8e4\n\t\t\t\tif (process.env.FLUID_CLIENT === \"azure\") {\n\t\t\t\t\tassert.strict(\n\t\t\t\t\t\t\"errorType\" in error &&\n\t\t\t\t\t\t\terror.errorType === \"fileNotFoundOrAccessDeniedError\" &&\n\t\t\t\t\t\t\t\"statusCode\" in error &&\n\t\t\t\t\t\t\terror.statusCode === 404,\n\t\t\t\t\t\t`Unexpected error: ${error.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tassert.strict(error.message === \"0x8e4\", `Unexpected error: ${error.message}`);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tawait assert.rejects(\n\t\t\t\tcontainerAndServicesP,\n\t\t\t\terrorFn,\n\t\t\t\t\"Azure Client can load a non-existent container\",\n\t\t\t);\n\t\t\t// eslint-disable-next-line require-atomic-updates\n\t\t\tconsole.error = consoleErrorFn;\n\t\t});\n\t});\n\n\tdescribe(`Container create with feature flags (${testOpts.variant})`, () => {\n\t\tlet client: AzureClient;\n\t\tlet schema: ContainerSchema;\n\t\tlet mockLogger: MockLogger;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tmockLogger = new MockLogger();\n\t\t\tclient = createAzureClient(undefined, undefined, mockLogger, configProvider({}));\n\t\t\tschema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\t/**\n\t\t * Scenario: Test if AzureClient can create a container with feature gates.\n\t\t *\n\t\t * Expected behavior: An error should not be thrown and the logger should have logged the enabled feature gates.\n\t\t */\n\t\tit(\"can create containers with feature gates\", async function () {\n\t\t\t// Ephemeral containers are currently not created with the AzureClient, and therefore do not\n\t\t\t// have an attached mockLogger which is needed for this test.\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tawait client.createContainer(schema, currentVersion);\n\t\t\tconst event = mockLogger.events.find((e) => e.eventName.endsWith(\"ContainerLoadStats\"));\n\t\t\tassert(event !== undefined, \"ContainerLoadStats event should exist\");\n\t\t\tconst featureGates = event.featureGates as string;\n\t\t\tassert(featureGates.length > 0);\n\t\t});\n\t});\n\n\t/**\n\t * Testing scenarios for creating/loading containers with the legacy (LTS) version of AzureClient.\n\t */\n\tdescribe(`Container create with legacy version (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tconst valueSetTimoutMs = 10_000;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\t\tlet clientCurrent: AzureClient;\n\t\tlet clientLegacy: AzureClientLegacy;\n\t\tconst schemaCurrent = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\n\t\tconst schemaLegacy = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMapLegacy,\n\t\t\t},\n\t\t};\n\n\t\tbeforeEach(\"createAzureClients\", function () {\n\t\t\tclientCurrent = createAzureClient();\n\t\t\tclientLegacy = createAzureClientLegacy();\n\t\t\tif (isEphemeral) {\n\t\t\t\t// TODO: Should we skip ephemeral tests for legacy clients?\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient can get a container made by a legacy AzureClient.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tfor (const compatibilityMode of [\"1.0.0\", \"2.0.0\"] as const) {\n\t\t\tit(`Current AzureClient (mode: \"${compatibilityMode}\") can get container made by legacy AzureClient`, async () => {\n\t\t\t\tconst { container: containerLegacy } =\n\t\t\t\t\tawait clientLegacy.createContainer(schemaLegacy);\n\t\t\t\tconst containerId = await containerLegacy.attach();\n\n\t\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t\t(resolve) => containerLegacy.once(\"connected\", () => resolve()),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst valueSetP = timeoutPromise(\n\t\t\t\t\t(resolve) => {\n\t\t\t\t\t\tconst confirmValueSet = (): void => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(containerLegacy.initialObjects.map1 as SharedMapLegacy).get(\"key\") === \"value\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcontainerLegacy.off(\"saved\", confirmValueSet);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontainerLegacy.on(\"saved\", confirmValueSet);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: valueSetTimoutMs,\n\t\t\t\t\t\terrorMsg: \"valueSet timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\t(containerLegacy.initialObjects.map1 as SharedMapLegacy).set(\"key\", \"value\");\n\n\t\t\t\t// Await the value being saved, especially important if we dispose the legacy container.\n\t\t\t\tawait valueSetP;\n\n\t\t\t\tif (compatibilityMode === \"2.0.0\") {\n\t\t\t\t\t// We don't support interop between legacy containers and \"2\" mode, dispose the legacy\n\t\t\t\t\t// container to avoid this case.\n\t\t\t\t\tcontainerLegacy.dispose();\n\t\t\t\t}\n\n\t\t\t\tconst resources = clientCurrent.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\t\tconst { container: containerCurrent } = await resources;\n\n\t\t\t\tif (containerCurrent.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t\t(resolve) => containerCurrent.once(\"connected\", () => resolve()),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\t\terrorMsg: \"containerCurrent connect() timeout\",\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst result = containerCurrent.initialObjects.map1.get<string>(\"key\");\n\t\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t\t});\n\t\t}\n\t});\n\n\t/**\n\t * Testing creating/loading containers between the compatibility modes.\n\t */\n\tdescribe(`Container create with current version (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\t\tlet clientCurrent1: AzureClient;\n\t\tlet clientCurrent2: AzureClient;\n\t\tlet clientLegacy: AzureClientLegacy;\n\t\tlet sandbox: SinonSandbox;\n\n\t\tconst schemaCurrent = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\n\t\tconst schemaLegacy = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMapLegacy,\n\t\t\t},\n\t\t};\n\n\t\tbefore(function () {\n\t\t\tsandbox = createSandbox();\n\t\t});\n\n\t\tbeforeEach(\"createAzureClients\", function () {\n\t\t\tclientCurrent1 = createAzureClient();\n\t\t\tclientCurrent2 = createAzureClient();\n\t\t\tclientLegacy = createAzureClientLegacy();\n\t\t\tif (isEphemeral) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tsandbox.restore();\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a legacy AzureClient can get a container made by the current AzureClient.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(`Legacy AzureClient can get container made by current AzureClient (mode: \"1\")`, async () => {\n\t\t\tconst { container: containerCurrent } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t// Note: Only containers created in compatibility mode \"1\" may be loaded by legacy client.\n\t\t\t\t\"1.0.0\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent.attach();\n\n\t\t\tif (containerCurrent.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientLegacy.getContainer(containerId, schemaLegacy);\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerLegacy } = await resources;\n\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => containerLegacy.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = (containerLegacy.initialObjects.map1 as SharedMapLegacy).get<string>(\n\t\t\t\t\"key\",\n\t\t\t);\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient in compatibility mode \"2\" can get a container made by the current AzureClient in mode \"1\".\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise be returned.\n\t\t */\n\t\tit(`Current AzureClient (mode: \"2\") can get container made by current AzureClient (mode: \"1\")`, async () => {\n\t\t\tconst { container: containerCurrent1 } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"1.0.0\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent1.attach();\n\n\t\t\tif (containerCurrent1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent1.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent1 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent1.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientCurrent2.getContainer(containerId, schemaCurrent, \"2.0.0\");\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerCurrent2 } = await resources;\n\t\t\tif (containerCurrent2.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent2.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent2 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = containerCurrent2.initialObjects.map1.get<string>(\"key\");\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if a current AzureClient in compatibility mode \"1\" can get a container made by the current AzureClient in mode \"2\".\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise be returned.\n\t\t */\n\t\tit(`Current AzureClient (mode: \"1\") can get container made by current AzureClient (mode: \"2\")`, async () => {\n\t\t\tconst { container: containerCurrent2 } = await clientCurrent2.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"2.0.0\",\n\t\t\t);\n\t\t\tconst containerId = await containerCurrent2.attach();\n\n\t\t\tif (containerCurrent2.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent2.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent2 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcontainerCurrent2.initialObjects.map1.set(\"key\", \"value\");\n\n\t\t\tconst resources = clientCurrent1.getContainer(containerId, schemaCurrent, \"1.0.0\");\n\t\t\tawait assert.doesNotReject(resources, () => true, \"container could not be loaded\");\n\n\t\t\tconst { container: containerCurrent1 } = await resources;\n\t\t\tif (containerCurrent1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise(\n\t\t\t\t\t(resolve) => containerCurrent1.once(\"connected\", () => resolve()),\n\t\t\t\t\t{\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"containerCurrent1 connect() timeout\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = containerCurrent1.initialObjects.map1.get<string>(\"key\");\n\t\t\tassert.strictEqual(result, \"value\", \"Value not found in copied container\");\n\t\t});\n\n\t\tit(\"op grouping disabled as expected for 1.x clients\", async () => {\n\t\t\tconst { container: container1 } = await clientCurrent1.createContainer(\n\t\t\t\tschemaCurrent,\n\t\t\t\t\"1.0.0\",\n\t\t\t);\n\t\t\tconst containerId = await container1.attach();\n\n\t\t\tif (container1.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container1.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst containerProcessSpy = sandbox.spy(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\t\t\t\t(container1 as any).container,\n\t\t\t\t\"processRemoteMessage\",\n\t\t\t);\n\n\t\t\t// Explicitly force ops sent to be in the same batch\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t(container1 as any).container._runtime.orderSequentially(() => {\n\t\t\t\tconst map1 = container1.initialObjects.map1;\n\t\t\t\tmap1.set(\"1\", 1);\n\t\t\t\tmap1.set(\"2\", 2);\n\t\t\t\tmap1.set(\"3\", 3);\n\t\t\t});\n\n\t\t\tconst { container: containerLegacy } = await clientLegacy.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tschemaLegacy,\n\t\t\t);\n\t\t\tif (containerLegacy.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => containerLegacy.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"containerLegacy connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst legacyMap = containerLegacy.initialObjects.map1 as SharedMapLegacy;\n\n\t\t\t// Verify ops are processed by legacy AzureClient\n\t\t\tassert.strictEqual(legacyMap.get(\"1\"), 1);\n\t\t\tassert.strictEqual(legacyMap.get(\"2\"), 2);\n\t\t\tassert.strictEqual(legacyMap.get(\"3\"), 3);\n\n\t\t\t// Inspect the incoming ops\n\t\t\tfor (const call of containerProcessSpy.getCalls()) {\n\t\t\t\tconst message = call.firstArg as ISequencedDocumentMessage;\n\t\t\t\tif (\n\t\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t\t(message.contents as { type: string }).type === \"groupedBatch\"\n\t\t\t\t) {\n\t\t\t\t\tassert.fail(\"unexpected groupedBatch found\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfor (const compatibilityMode of [\"1.0.0\", \"2.0.0\"] as const) {\n\t\t\tit(`op grouping works as expected (compatibilityMode: ${compatibilityMode})`, async () => {\n\t\t\t\tconst { container: container1 } = await clientCurrent1.createContainer(\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tconst containerId = await container1.attach();\n\n\t\t\t\tif (container1.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => container1.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst containerProcessSpy = sandbox.spy(\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(container1 as any).container,\n\t\t\t\t\t\"processRemoteMessage\",\n\t\t\t\t);\n\n\t\t\t\t// Explicitly force ops sent to be in the same batch\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t\t(container1 as any).container._runtime.orderSequentially(() => {\n\t\t\t\t\tconst map1 = container1.initialObjects.map1;\n\t\t\t\t\tmap1.set(\"1\", 1);\n\t\t\t\t\tmap1.set(\"2\", 2);\n\t\t\t\t\tmap1.set(\"3\", 3);\n\t\t\t\t});\n\n\t\t\t\tconst { container: container2 } = await clientCurrent1.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tschemaCurrent,\n\t\t\t\t\tcompatibilityMode,\n\t\t\t\t);\n\t\t\t\tconst map2 = container2.initialObjects.map1;\n\n\t\t\t\t// Process ops coming from service\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"1\"), 1);\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"2\"), 2);\n\t\t\t\tassert.strictEqual(await mapWait(map2, \"3\"), 3);\n\n\t\t\t\t// Inspect the incoming ops\n\t\t\t\tlet groupedBatchCount = 0;\n\t\t\t\tfor (const call of containerProcessSpy.getCalls()) {\n\t\t\t\t\tconst message = call.firstArg as ISequencedDocumentMessage;\n\t\t\t\t\tif (\n\t\t\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t\t\ttypeof message.contents === \"string\" &&\n\t\t\t\t\t\t(JSON.parse(message.contents) as { type?: unknown }).type === \"groupedBatch\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tgroupedBatchCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (compatibilityMode === \"1.0.0\") {\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tgroupedBatchCount,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t\"expect no op grouping in compatibilityMode 1\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tgroupedBatchCount,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t\"expect op grouping in compatibilityMode 2\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\n/**\n * Testing creating/loading containers with a tree-based root data object.\n */\ndescribe(\"Container create in tree-only mode\", () => {\n\tconst invalidSchemaErrorMessage =\n\t\t\"Tree-only mode requires exactly 1 SharedTree in initialObjects.\";\n\tfunction createClient(): AzureClient {\n\t\treturn createAzureClient(\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t({ schema, minVersionForCollaboration }) => {\n\t\t\t\tif (!isTreeContainerSchema(schema)) {\n\t\t\t\t\tthrow new UsageError(invalidSchemaErrorMessage);\n\t\t\t\t}\n\t\t\t\treturn createTreeContainerRuntimeFactory({\n\t\t\t\t\tschema,\n\t\t\t\t\tminVersionForCollaboration,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\tit(\"can create tree-based container\", async function () {\n\t\tconst client = createClient();\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\ttree: SharedTree,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(schema, currentVersion);\n\n\t\tassert(SharedTree.is(container.initialObjects.tree));\n\t});\n\n\tit(\"throws if invalid schema is encountered\", async function () {\n\t\tconst client = createClient();\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\ttree: SharedTree,\n\t\t\t\tmap: SharedMap,\n\t\t\t},\n\t\t};\n\n\t\tawait assert.rejects(\n\t\t\tclient.createContainer(schema, currentVersion),\n\t\t\t(error: unknown) => {\n\t\t\t\tassert(error instanceof UsageError);\n\t\t\t\tassert.strictEqual(error.message, invalidSchemaErrorMessage);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t\"Expected an error to be thrown for invalid schema\",\n\t\t);\n\t});\n});\n"]}
@@ -9,7 +9,7 @@ import { timeoutPromise } from "@fluidframework/test-utils/internal";
9
9
  import { createAzureClient, createContainerFromPayload, getContainerIdFromPayloadResponse, } from "./AzureClientFactory.js";
10
10
  import { CounterTestDataObject, TestDataObject } from "./TestDataObject.js";
11
11
  import * as ephemeralSummaryTrees from "./ephemeralSummaryTrees.js";
12
- import { getTestMatrix, mapWait } from "./utils.js";
12
+ import { getTestMatrix, mapWait, currentVersion } from "./utils.js";
13
13
  const testMatrix = getTestMatrix();
14
14
  for (const testOpts of testMatrix) {
15
15
  describe(`Fluid data updates (${testOpts.variant})`, () => {
@@ -37,10 +37,10 @@ for (const testOpts of testMatrix) {
37
37
  if (isEphemeral) {
38
38
  const containerResponse = await createContainerFromPayload(ephemeralSummaryTrees.setDDSesAsInitialObjectsForContainer, "test-user-id-1", "test-user-name-1");
39
39
  containerId = getContainerIdFromPayloadResponse(containerResponse);
40
- ({ container: newContainer } = await client.getContainer(containerId, schema, "2"));
40
+ ({ container: newContainer } = await client.getContainer(containerId, schema, currentVersion));
41
41
  }
42
42
  else {
43
- ({ container: newContainer } = await client.createContainer(schema, "2"));
43
+ ({ container: newContainer } = await client.createContainer(schema, currentVersion));
44
44
  containerId = await newContainer.attach();
45
45
  }
46
46
  if (newContainer.connectionState !== ConnectionState.Connected) {
@@ -49,7 +49,7 @@ for (const testOpts of testMatrix) {
49
49
  errorMsg: "container connect() timeout",
50
50
  });
51
51
  }
52
- const resources = client.getContainer(containerId, schema, "2");
52
+ const resources = client.getContainer(containerId, schema, currentVersion);
53
53
  await assert.doesNotReject(resources, () => true, "container cannot be retrieved from Azure Fluid Relay");
54
54
  const { container } = await resources;
55
55
  assert.deepStrictEqual(Object.keys(container.initialObjects), Object.keys(schema.initialObjects));
@@ -66,10 +66,10 @@ for (const testOpts of testMatrix) {
66
66
  if (isEphemeral) {
67
67
  const containerResponse = await createContainerFromPayload(ephemeralSummaryTrees.changeDDSesWithinInitialObjectsValue, "test-user-id-1", "test-user-name-1");
68
68
  containerId = getContainerIdFromPayloadResponse(containerResponse);
69
- ({ container } = await client.getContainer(containerId, schema, "2"));
69
+ ({ container } = await client.getContainer(containerId, schema, currentVersion));
70
70
  }
71
71
  else {
72
- ({ container } = await client.createContainer(schema, "2"));
72
+ ({ container } = await client.createContainer(schema, currentVersion));
73
73
  containerId = await container.attach();
74
74
  }
75
75
  if (container.connectionState !== ConnectionState.Connected) {
@@ -82,7 +82,7 @@ for (const testOpts of testMatrix) {
82
82
  const map1Create = initialObjectsCreate.map1;
83
83
  map1Create.set("new-key", "new-value");
84
84
  const valueCreate = map1Create.get("new-key");
85
- const { container: containerGet } = await client.getContainer(containerId, schema, "2");
85
+ const { container: containerGet } = await client.getContainer(containerId, schema, currentVersion);
86
86
  const map1Get = containerGet.initialObjects.map1;
87
87
  const valueGet = await mapWait(map1Get, "new-key");
88
88
  assert.strictEqual(valueGet, valueCreate, "container can't change initial objects");
@@ -104,10 +104,10 @@ for (const testOpts of testMatrix) {
104
104
  if (isEphemeral) {
105
105
  const containerResponse = await createContainerFromPayload(ephemeralSummaryTrees.setDataObjectsAsInitialObjectsForContainer, "test-user-id-1", "test-user-name-1");
106
106
  containerId = getContainerIdFromPayloadResponse(containerResponse);
107
- ({ container } = await client.getContainer(containerId, doSchema, "2"));
107
+ ({ container } = await client.getContainer(containerId, doSchema, currentVersion));
108
108
  }
109
109
  else {
110
- ({ container } = await client.createContainer(doSchema, "2"));
110
+ ({ container } = await client.createContainer(doSchema, currentVersion));
111
111
  containerId = await container.attach();
112
112
  }
113
113
  if (container.connectionState !== ConnectionState.Connected) {
@@ -119,7 +119,7 @@ for (const testOpts of testMatrix) {
119
119
  const initialObjectsCreate = container.initialObjects;
120
120
  assert(initialObjectsCreate.mdo1 instanceof TestDataObject, "container returns the wrong type for mdo1");
121
121
  assert(initialObjectsCreate.mdo2 instanceof CounterTestDataObject, "container returns the wrong type for mdo2");
122
- const { container: containerGet } = await client.getContainer(containerId, doSchema, "2");
122
+ const { container: containerGet } = await client.getContainer(containerId, doSchema, currentVersion);
123
123
  const initialObjectsGet = containerGet.initialObjects;
124
124
  assert(initialObjectsGet.mdo1 instanceof TestDataObject, "container returns the wrong type for mdo1");
125
125
  assert(initialObjectsCreate.mdo2 instanceof CounterTestDataObject, "container returns the wrong type for mdo2");
@@ -144,10 +144,10 @@ for (const testOpts of testMatrix) {
144
144
  if (isEphemeral) {
145
145
  const containerResponse = await createContainerFromPayload(ephemeralSummaryTrees.useMultipleDataObjectsOfSameType, "test-user-id-1", "test-user-name-1");
146
146
  containerId = getContainerIdFromPayloadResponse(containerResponse);
147
- ({ container } = await client.getContainer(containerId, doSchema, "2"));
147
+ ({ container } = await client.getContainer(containerId, doSchema, currentVersion));
148
148
  }
149
149
  else {
150
- ({ container } = await client.createContainer(doSchema, "2"));
150
+ ({ container } = await client.createContainer(doSchema, currentVersion));
151
151
  containerId = await container.attach();
152
152
  }
153
153
  if (container.connectionState !== ConnectionState.Connected) {
@@ -160,7 +160,7 @@ for (const testOpts of testMatrix) {
160
160
  assert(initialObjectsCreate.mdo1 instanceof TestDataObject, "container returns the wrong type for mdo1");
161
161
  assert(initialObjectsCreate.mdo2 instanceof CounterTestDataObject, "container returns the wrong type for mdo2");
162
162
  assert(initialObjectsCreate.mdo3 instanceof CounterTestDataObject, "container returns the wrong type for mdo3");
163
- const { container: containerGet } = await client.getContainer(containerId, doSchema, "2");
163
+ const { container: containerGet } = await client.getContainer(containerId, doSchema, currentVersion);
164
164
  const initialObjectsGet = containerGet.initialObjects;
165
165
  assert(initialObjectsGet.mdo1 instanceof TestDataObject, "container returns the wrong type for mdo1");
166
166
  assert(initialObjectsCreate.mdo2 instanceof CounterTestDataObject, "container returns the wrong type for mdo2");
@@ -185,7 +185,7 @@ for (const testOpts of testMatrix) {
185
185
  containerId = getContainerIdFromPayloadResponse(containerResponse);
186
186
  }
187
187
  else {
188
- ({ container } = await client.createContainer(doSchema, "2"));
188
+ ({ container } = await client.createContainer(doSchema, currentVersion));
189
189
  const initialObjectsCreate = container.initialObjects;
190
190
  const mdo2 = initialObjectsCreate.mdo2;
191
191
  mdo2.increment();
@@ -200,7 +200,7 @@ for (const testOpts of testMatrix) {
200
200
  });
201
201
  }
202
202
  }
203
- const { container: containerGet } = await client.getContainer(containerId, doSchema, "2");
203
+ const { container: containerGet } = await client.getContainer(containerId, doSchema, currentVersion);
204
204
  const initialObjectsGet = containerGet.initialObjects;
205
205
  const mdo2get = initialObjectsGet.mdo2;
206
206
  assert.strictEqual(mdo2get.value, 3);
@@ -228,10 +228,10 @@ for (const testOpts of testMatrix) {
228
228
  if (isEphemeral) {
229
229
  const containerResponse = await createContainerFromPayload(ephemeralSummaryTrees.createAddLoadableObjectsDynamically, "test-user-id-1", "test-user-name-1");
230
230
  containerId = getContainerIdFromPayloadResponse(containerResponse);
231
- ({ container } = await client.getContainer(containerId, dynamicSchema, "2"));
231
+ ({ container } = await client.getContainer(containerId, dynamicSchema, currentVersion));
232
232
  }
233
233
  else {
234
- ({ container } = await client.createContainer(dynamicSchema, "2"));
234
+ ({ container } = await client.createContainer(dynamicSchema, currentVersion));
235
235
  containerId = await container.attach();
236
236
  }
237
237
  const newDo = await container.create(TestDataObject);
@@ -1 +1 @@
1
- {"version":3,"file":"ddsTests.spec.js","sourceRoot":"","sources":["../../src/test/ddsTests.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 \"node:assert\";\n\nimport type { AzureClient } from \"@fluidframework/azure-client\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport type { ContainerSchema, IFluidContainer } from \"@fluidframework/fluid-static\";\nimport { type ISharedMap, SharedMap } from \"@fluidframework/map/legacy\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport {\n\tcreateAzureClient,\n\tcreateContainerFromPayload,\n\tgetContainerIdFromPayloadResponse,\n} from \"./AzureClientFactory.js\";\nimport { CounterTestDataObject, TestDataObject } from \"./TestDataObject.js\";\nimport * as ephemeralSummaryTrees from \"./ephemeralSummaryTrees.js\";\nimport { getTestMatrix, mapWait } from \"./utils.js\";\n\nconst testMatrix = getTestMatrix();\nfor (const testOpts of testMatrix) {\n\tdescribe(`Fluid data updates (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tlet client: AzureClient;\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tclient = createAzureClient();\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test when an Azure Client container is created,\n\t\t * it can set the initial objects.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can set DDSes as initial objects for a container\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet newContainer: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.setDDSesAsInitialObjectsForContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container: newContainer } = await client.getContainer(containerId, schema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container: newContainer } = await client.createContainer(schema, \"2\"));\n\t\t\t\tcontainerId = await newContainer.attach();\n\t\t\t}\n\n\t\t\tif (newContainer.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => newContainer.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst resources = client.getContainer(containerId, schema, \"2\");\n\t\t\tawait assert.doesNotReject(\n\t\t\t\tresources,\n\t\t\t\t() => true,\n\t\t\t\t\"container cannot be retrieved from Azure Fluid Relay\",\n\t\t\t);\n\n\t\t\tconst { container } = await resources;\n\t\t\tassert.deepStrictEqual(\n\t\t\t\tObject.keys(container.initialObjects),\n\t\t\t\tObject.keys(schema.initialObjects),\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if initialObjects passed into the container functions correctly.\n\t\t *\n\t\t * Expected behavior: initialObjects value loaded in two different containers should mirror\n\t\t * each other after value is changed.\n\t\t */\n\t\tit(\"can change DDSes within initialObjects value\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.changeDDSesWithinInitialObjectsValue,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tconst map1Create = initialObjectsCreate.map1 as SharedMap;\n\t\t\tmap1Create.set(\"new-key\", \"new-value\");\n\t\t\tconst valueCreate: string | undefined = map1Create.get(\"new-key\");\n\n\t\t\tconst { container: containerGet } = await client.getContainer(containerId, schema, \"2\");\n\t\t\tconst map1Get = containerGet.initialObjects.map1;\n\t\t\tconst valueGet: string | undefined = await mapWait(map1Get, \"new-key\");\n\t\t\tassert.strictEqual(valueGet, valueCreate, \"container can't change initial objects\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can create DataObjects through initialObjects schema.\n\t\t *\n\t\t * Expected behavior: DataObjects can be retrieved from the original and loaded container.\n\t\t */\n\t\tit(\"can set DataObjects as initial objects for a container\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.setDataObjectsAsInitialObjectsForContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, doSchema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\t\"2\",\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can create multiple DataObjects of the same type\n\t\t *\n\t\t * Expected behavior: DataObjects of the same type can be retrieved from the\n\t\t * original and loaded container.\n\t\t * TODO: Known bug that needs to be re-tested once fixed.\n\t\t */\n\t\tit(\"can use multiple DataObjects of the same type\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t\tmdo3: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.useMultipleDataObjectsOfSameType,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, doSchema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo3\",\n\t\t\t);\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\t\"2\",\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo3\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can change DataObject value contained within initialObjects\n\t\t *\n\t\t * Expected behavior: DataObject changes are correctly reflected on original and loaded containers\n\t\t */\n\t\tit(\"can change DataObjects within initialObjects value\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.changeDataObjectsWithinInitialObjectsValue,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, \"2\"));\n\n\t\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\t\tconst mdo2 = initialObjectsCreate.mdo2 as CounterTestDataObject;\n\t\t\t\tmdo2.increment();\n\t\t\t\tmdo2.increment();\n\t\t\t\tmdo2.increment();\n\n\t\t\t\tassert.strictEqual(mdo2.value, 3);\n\n\t\t\t\tcontainerId = await container.attach();\n\n\t\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\t\"2\",\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tconst mdo2get = initialObjectsGet.mdo2 as CounterTestDataObject;\n\n\t\t\tassert.strictEqual(mdo2get.value, 3);\n\n\t\t\tmdo2get.increment();\n\t\t\tmdo2get.increment();\n\t\t\tassert.strictEqual(mdo2get.value, 5);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if the optional schema parameter, dynamicObjectTypes (custom data objects),\n\t\t * can be added during runtime and be returned by the container.\n\t\t *\n\t\t * Expected behavior: added loadable object can be retrieved from the container. Loadable\n\t\t * object's id and container config ID should be identical since it's now attached to\n\t\t * the container.\n\t\t */\n\t\tit(\"can create/add loadable objects (custom data object) dynamically during runtime\", async () => {\n\t\t\tconst dynamicSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t\tdynamicObjectTypes: [TestDataObject],\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.createAddLoadableObjectsDynamically,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, dynamicSchema, \"2\"));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(dynamicSchema, \"2\"));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tconst newDo = await container.create(TestDataObject);\n\t\t\tassert.ok(newDo?.handle);\n\n\t\t\tconst map1 = container.initialObjects.map1 as ISharedMap;\n\t\t\tmap1.set(\"new-pair-id\", newDo.handle);\n\t\t\tconst handle: IFluidHandle | undefined = await map1.get(\"new-pair-id\");\n\t\t\tconst obj: unknown = await handle?.get();\n\t\t\tassert.ok(obj, \"container added dynamic objects incorrectly\");\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"ddsTests.spec.js","sourceRoot":"","sources":["../../src/test/ddsTests.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 \"node:assert\";\n\nimport type { AzureClient } from \"@fluidframework/azure-client\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport type { ContainerSchema, IFluidContainer } from \"@fluidframework/fluid-static\";\nimport { type ISharedMap, SharedMap } from \"@fluidframework/map/legacy\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport {\n\tcreateAzureClient,\n\tcreateContainerFromPayload,\n\tgetContainerIdFromPayloadResponse,\n} from \"./AzureClientFactory.js\";\nimport { CounterTestDataObject, TestDataObject } from \"./TestDataObject.js\";\nimport * as ephemeralSummaryTrees from \"./ephemeralSummaryTrees.js\";\nimport { getTestMatrix, mapWait, currentVersion } from \"./utils.js\";\n\nconst testMatrix = getTestMatrix();\nfor (const testOpts of testMatrix) {\n\tdescribe(`Fluid data updates (${testOpts.variant})`, () => {\n\t\tconst connectTimeoutMs = 10_000;\n\t\tlet client: AzureClient;\n\t\tconst schema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\t\tconst isEphemeral: boolean = testOpts.options.isEphemeral;\n\n\t\tbeforeEach(\"createAzureClient\", () => {\n\t\t\tclient = createAzureClient();\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test when an Azure Client container is created,\n\t\t * it can set the initial objects.\n\t\t *\n\t\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t\t * be returned.\n\t\t */\n\t\tit(\"can set DDSes as initial objects for a container\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet newContainer: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.setDDSesAsInitialObjectsForContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container: newContainer } = await client.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tschema,\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t));\n\t\t\t} else {\n\t\t\t\t({ container: newContainer } = await client.createContainer(schema, currentVersion));\n\t\t\t\tcontainerId = await newContainer.attach();\n\t\t\t}\n\n\t\t\tif (newContainer.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => newContainer.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst resources = client.getContainer(containerId, schema, currentVersion);\n\t\t\tawait assert.doesNotReject(\n\t\t\t\tresources,\n\t\t\t\t() => true,\n\t\t\t\t\"container cannot be retrieved from Azure Fluid Relay\",\n\t\t\t);\n\n\t\t\tconst { container } = await resources;\n\t\t\tassert.deepStrictEqual(\n\t\t\t\tObject.keys(container.initialObjects),\n\t\t\t\tObject.keys(schema.initialObjects),\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if initialObjects passed into the container functions correctly.\n\t\t *\n\t\t * Expected behavior: initialObjects value loaded in two different containers should mirror\n\t\t * each other after value is changed.\n\t\t */\n\t\tit(\"can change DDSes within initialObjects value\", async () => {\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.changeDDSesWithinInitialObjectsValue,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, schema, currentVersion));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(schema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tconst map1Create = initialObjectsCreate.map1 as SharedMap;\n\t\t\tmap1Create.set(\"new-key\", \"new-value\");\n\t\t\tconst valueCreate: string | undefined = map1Create.get(\"new-key\");\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tschema,\n\t\t\t\tcurrentVersion,\n\t\t\t);\n\t\t\tconst map1Get = containerGet.initialObjects.map1;\n\t\t\tconst valueGet: string | undefined = await mapWait(map1Get, \"new-key\");\n\t\t\tassert.strictEqual(valueGet, valueCreate, \"container can't change initial objects\");\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can create DataObjects through initialObjects schema.\n\t\t *\n\t\t * Expected behavior: DataObjects can be retrieved from the original and loaded container.\n\t\t */\n\t\tit(\"can set DataObjects as initial objects for a container\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.setDataObjectsAsInitialObjectsForContainer,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, doSchema, currentVersion));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\tcurrentVersion,\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can create multiple DataObjects of the same type\n\t\t *\n\t\t * Expected behavior: DataObjects of the same type can be retrieved from the\n\t\t * original and loaded container.\n\t\t * TODO: Known bug that needs to be re-tested once fixed.\n\t\t */\n\t\tit(\"can use multiple DataObjects of the same type\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t\tmdo3: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.useMultipleDataObjectsOfSameType,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(containerId, doSchema, currentVersion));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo3\",\n\t\t\t);\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\tcurrentVersion,\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tassert(\n\t\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo1\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo2\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\t\"container returns the wrong type for mdo3\",\n\t\t\t);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if we can change DataObject value contained within initialObjects\n\t\t *\n\t\t * Expected behavior: DataObject changes are correctly reflected on original and loaded containers\n\t\t */\n\t\tit(\"can change DataObjects within initialObjects value\", async () => {\n\t\t\tconst doSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmdo1: TestDataObject,\n\t\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\t},\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.changeDataObjectsWithinInitialObjectsValue,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(doSchema, currentVersion));\n\n\t\t\t\tconst initialObjectsCreate = container.initialObjects;\n\t\t\t\tconst mdo2 = initialObjectsCreate.mdo2 as CounterTestDataObject;\n\t\t\t\tmdo2.increment();\n\t\t\t\tmdo2.increment();\n\t\t\t\tmdo2.increment();\n\n\t\t\t\tassert.strictEqual(mdo2.value, 3);\n\n\t\t\t\tcontainerId = await container.attach();\n\n\t\t\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { container: containerGet } = await client.getContainer(\n\t\t\t\tcontainerId,\n\t\t\t\tdoSchema,\n\t\t\t\tcurrentVersion,\n\t\t\t);\n\t\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\t\tconst mdo2get = initialObjectsGet.mdo2 as CounterTestDataObject;\n\n\t\t\tassert.strictEqual(mdo2get.value, 3);\n\n\t\t\tmdo2get.increment();\n\t\t\tmdo2get.increment();\n\t\t\tassert.strictEqual(mdo2get.value, 5);\n\t\t});\n\n\t\t/**\n\t\t * Scenario: test if the optional schema parameter, dynamicObjectTypes (custom data objects),\n\t\t * can be added during runtime and be returned by the container.\n\t\t *\n\t\t * Expected behavior: added loadable object can be retrieved from the container. Loadable\n\t\t * object's id and container config ID should be identical since it's now attached to\n\t\t * the container.\n\t\t */\n\t\tit(\"can create/add loadable objects (custom data object) dynamically during runtime\", async () => {\n\t\t\tconst dynamicSchema: ContainerSchema = {\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap1: SharedMap,\n\t\t\t\t},\n\t\t\t\tdynamicObjectTypes: [TestDataObject],\n\t\t\t};\n\t\t\tlet containerId: string;\n\t\t\tlet container: IFluidContainer;\n\t\t\tif (isEphemeral) {\n\t\t\t\tconst containerResponse = await createContainerFromPayload(\n\t\t\t\t\tephemeralSummaryTrees.createAddLoadableObjectsDynamically,\n\t\t\t\t\t\"test-user-id-1\",\n\t\t\t\t\t\"test-user-name-1\",\n\t\t\t\t);\n\t\t\t\tcontainerId = getContainerIdFromPayloadResponse(containerResponse);\n\t\t\t\t({ container } = await client.getContainer(\n\t\t\t\t\tcontainerId,\n\t\t\t\t\tdynamicSchema,\n\t\t\t\t\tcurrentVersion,\n\t\t\t\t));\n\t\t\t} else {\n\t\t\t\t({ container } = await client.createContainer(dynamicSchema, currentVersion));\n\t\t\t\tcontainerId = await container.attach();\n\t\t\t}\n\n\t\t\tconst newDo = await container.create(TestDataObject);\n\t\t\tassert.ok(newDo?.handle);\n\n\t\t\tconst map1 = container.initialObjects.map1 as ISharedMap;\n\t\t\tmap1.set(\"new-pair-id\", newDo.handle);\n\t\t\tconst handle: IFluidHandle | undefined = await map1.get(\"new-pair-id\");\n\t\t\tconst obj: unknown = await handle?.get();\n\t\t\tassert.ok(obj, \"container added dynamic objects incorrectly\");\n\t\t});\n\t});\n}\n"]}
@@ -12,6 +12,7 @@ import { InsecureTokenProvider } from "@fluidframework/test-runtime-utils/intern
12
12
  import { timeoutPromise } from "@fluidframework/test-utils/internal";
13
13
  import { createAzureTokenProvider } from "../AzureTokenFactory.js";
14
14
  import { TestDataObject } from "../TestDataObject.js";
15
+ import { currentVersion } from "../utils.js";
15
16
  const testLabel = process.argv[2];
16
17
  // Identifier given to child process
17
18
  const process_id = process.argv[3];
@@ -91,11 +92,11 @@ const getOrCreateContainer = async (params) => {
91
92
  });
92
93
  let services;
93
94
  if (containerId === undefined) {
94
- ({ container, services } = await client.createContainer(containerSchema, "2"));
95
+ ({ container, services } = await client.createContainer(containerSchema, currentVersion));
95
96
  containerId = await container.attach();
96
97
  }
97
98
  else {
98
- ({ container, services } = await client.getContainer(containerId, containerSchema, "2"));
99
+ ({ container, services } = await client.getContainer(containerId, containerSchema, currentVersion));
99
100
  }
100
101
  container.on("disconnected", onDisconnected);
101
102
  const connected = container.connectionState === ConnectionState.Connected