From 812e8dd023b06051499946a93aec2ca43dcdf20f Mon Sep 17 00:00:00 2001 From: Henry Tsai Date: Tue, 2 Jul 2024 08:17:35 -0700 Subject: [PATCH 1/2] Added poller to a reusmable task store test to increase reliability --- package-lock.json | 4 ++-- package.json | 2 +- tests/features/resumable-tasks.spec.ts | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index c601094fd..c1c57815f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tbd54566975/dwn-sdk-js", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tbd54566975/dwn-sdk-js", - "version": "0.4.0", + "version": "0.4.1", "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "9.0.3", diff --git a/package.json b/package.json index c3a1c47c2..d670202d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tbd54566975/dwn-sdk-js", - "version": "0.4.0", + "version": "0.4.1", "description": "A reference implementation of https://identity.foundation/decentralized-web-node/spec/", "repository": { "type": "git", diff --git a/tests/features/resumable-tasks.spec.ts b/tests/features/resumable-tasks.spec.ts index fa828d151..2c8a501ca 100644 --- a/tests/features/resumable-tasks.spec.ts +++ b/tests/features/resumable-tasks.spec.ts @@ -12,6 +12,7 @@ import chai, { expect } from 'chai'; import { DataStream } from '../../src/utils/data-stream.js'; import { Dwn } from '../../src/dwn.js'; import { Jws } from '../../src/utils/jws.js'; +import { Poller } from '../utils/poller.js'; import { RecordsRead } from '../../src/interfaces/records-read.js'; import { RecordsWrite } from '../../src/interfaces/records-write.js'; import { TestDataGenerator } from '../utils/test-data-generator.js'; @@ -367,14 +368,17 @@ export function testResumableTasks(): void { await clock.tickAsync(ResumableTaskManager.timeoutExtensionFrequencyInSeconds * 2 * 1000); // advancing time up to 2 extension cycles // IMPORTANT: This call ensures all scheduled timers are executed // In theory calling `tickAsync()` or `runToLastAsync()` alone should execute all scheduled timers - // but for some reason this behavior does not happen ONLY in Safari. I found 2o workarounds: + // but for some reason this behavior does not happen ONLY in Safari. I found 2 workarounds: // 1. call BOTH `tickAsync()` and `runToLastAsync()`. // 2. call `tickAsync()` with a longer time. // Chose the first workaround because it is should be the more reliable of the two. await clock.runToLastAsync(); - let latestResumableTaskState = await resumableTaskStore.read(initialResumableTaskState.id); - expect(latestResumableTaskState!.timeout).to.be.greaterThan(initialResumableTaskState.timeout); + let latestResumableTaskState; + await Poller.pollUntilSuccessOrTimeout(async () => { + latestResumableTaskState = await resumableTaskStore.read(initialResumableTaskState.id); + expect(latestResumableTaskState!.timeout).to.be.greaterThan(initialResumableTaskState.timeout); + }); // 5. Signal the mocked code to complete the `RecordsDelete`. completeDeleteSignal.emit('complete-delete'); From 467015ca03ae2e5de9d2524e8184a16104022b8a Mon Sep 17 00:00:00 2001 From: Henry Tsai Date: Tue, 2 Jul 2024 08:40:35 -0700 Subject: [PATCH 2/2] one more --- tests/features/resumable-tasks.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/features/resumable-tasks.spec.ts b/tests/features/resumable-tasks.spec.ts index 2c8a501ca..c90d090fc 100644 --- a/tests/features/resumable-tasks.spec.ts +++ b/tests/features/resumable-tasks.spec.ts @@ -391,8 +391,10 @@ export function testResumableTasks(): void { expect(clearTimeoutExtensionTimerSpy.calledOnce).to.be.true; // 7. Verify that the resumable task is deleted. - latestResumableTaskState = await resumableTaskStore.read(initialResumableTaskState.id); - expect(latestResumableTaskState).to.be.undefined; + await Poller.pollUntilSuccessOrTimeout(async () => { + latestResumableTaskState = await resumableTaskStore.read(initialResumableTaskState.id); + expect(latestResumableTaskState).to.be.undefined; + }); }); }); }