Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
946a752
chore: bump milaboratories.software-small-binaries to ^2.0.2
popoffvg Mar 13, 2026
f495158
fix: use busybox docker image and sh in logs.test.ts
popoffvg Mar 27, 2026
350cb9a
fix: pl-drivers test timeout too short for K8s job scheduling
popoffvg Mar 30, 2026
a209633
fix: pl-drivers tests time out with K8s Kueue scheduling
popoffvg Mar 30, 2026
9251bd9
fixup! fix: pl-drivers tests time out with K8s Kueue scheduling
popoffvg Mar 30, 2026
b4283e2
bump test deps
popoffvg Mar 30, 2026
073d561
fix: increase timeout for 'should get all logs' test
popoffvg Mar 30, 2026
81f0e5d
test: increase test timeout
popoffvg Mar 31, 2026
f54a312
fix: increase test timeout to 60 seconds
popoffvg Mar 31, 2026
ef477fe
fix: update test timeout to 60 seconds and ensure reporters are set
popoffvg Mar 31, 2026
3dc2d47
fix: increase timeout for blob-url-custom-protocol block test to 90 s…
popoffvg Mar 31, 2026
7e298f8
fix: update test configuration to set timeout for 'should get all log…
popoffvg Apr 7, 2026
f3b1070
fix: bump test docker images to published versions
popoffvg Apr 7, 2026
7b03070
fix: update software-test-utils version to 1.1.6
popoffvg Apr 9, 2026
8025b92
Merge branch 'main' into MILAB-5910-sh-not-found
popoffvg Apr 13, 2026
c3995df
feat: increase test timeout and conditionally set docker image tag
popoffvg Apr 13, 2026
5f473c4
fix: standardize string quotes in logs.test.ts
popoffvg Apr 13, 2026
a042478
fix: pass PL_TEST_USE_DOCKER through turbo env
popoffvg Apr 22, 2026
8ab4463
fix: release DownloadUrlDriver in tests to prevent vitest teardown er…
popoffvg Apr 22, 2026
d550a0c
Merge branch 'main' into MILAB-5933-e2e-tests
popoffvg Apr 22, 2026
c738dbd
fix: increase test timeout to 180 seconds for logs tests
popoffvg Apr 22, 2026
0b6a9c5
fix: update version specifier for software-test-utils to 1.1.6 in pnp…
popoffvg Apr 22, 2026
9a86778
MILAB-5933: use admin user in pl-client tests requiring elevated perm…
popoffvg Jun 22, 2026
37a6886
MILAB-5933: add PL_TEST_ADMIN_USER/PASSWORD to turbo passThroughEnv
popoffvg Jun 22, 2026
613f058
MILAB-5933: fix GetJWTToken to use ROLE_UNSPECIFIED so admin users ge…
popoffvg Jun 22, 2026
c230508
MILAB-5933: fix EnvironmentTeardownError in pl-drivers download_url test
popoffvg Jun 22, 2026
f20b189
MILAB-5933: raise workflow-tengo maxWorkers 2->4 to parallelize e2e s…
popoffvg Jun 23, 2026
9b41589
MILAB-5933: dial workflow-tengo maxWorkers 4->3 to avoid backend satu…
popoffvg Jun 23, 2026
9aacd7c
MILAB-5933: set workflow-tengo maxWorkers to 2 (proven-safe, no backe…
popoffvg Jun 23, 2026
6150096
MILAB-5933: pass PL_DOCKER_REGISTRY + PL_PKG_DEV through to turbo bui…
mike-ainsel Jun 26, 2026
677907c
MILAB-5933: keep k8s build in release mode (drop PL_PKG_DEV from buil…
mike-ainsel Jun 26, 2026
e07c7f2
MILAB-5933: route imageless exec commands to the local executor (ui-t…
mike-ainsel Jun 27, 2026
b368acf
Revert imageless->ui-tasks routing: driver is global per runner-type …
mike-ainsel Jun 27, 2026
0deda81
EXPERIMENT(MILAB-5933): default base image (ubuntu:22.04) for imagele…
mike-ainsel Jun 27, 2026
49739bb
Revert default-image experiment: validated (k8s docker-is-not-set 162…
mike-ainsel Jun 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/new-islands-rhyme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@platforma-sdk/workflow-tengo": patch
---

fix: xsv converter can be launched in k8s installations.
10 changes: 5 additions & 5 deletions lib/node/pl-client/src/core/client.test.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import { getTestClient, getTestClientConf } from "../test/test_config";
import { getTestAdminClient, getTestAdminClientConf } from "../test/test_config";
import { PlClient } from "./client";
import { PlDriver, PlDriverDefinition } from "./driver";
import { Dispatcher, request } from "undici";
import { GrpcClientProviderFactory } from "./grpc";
import { test, expect } from "vitest";

test("test client init", async () => {
await getTestClient(undefined);
await getTestAdminClient(undefined);
});
Comment on lines 8 to 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The initialized PlClient returned by getTestAdminClient is never closed, which leaks resources (such as connections or background workers) after the test completes. We should ensure the client is closed.

Suggested change
test("test client init", async () => {
await getTestClient(undefined);
await getTestAdminClient(undefined);
});
test("test client init", async () => {
const client = await getTestAdminClient(undefined);
await client.close();
});


test("test client alternative root init", async () => {
const aRootName = "test_root";
const { conf, auth } = await getTestClientConf();
const { conf, auth } = await getTestAdminClientConf();
await PlClient.init({ ...conf, alternativeRoot: aRootName }, auth);
const clientB = await PlClient.init(conf, auth);
const result = await clientB.deleteAlternativeRoot(aRootName);
expect(result).toBe(true);
});
Comment on lines 12 to 19

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Both PlClient instances initialized in this test are never closed, leading to resource leaks. We should wrap the test logic in a try...finally block to guarantee both clients are closed.

Suggested change
test("test client alternative root init", async () => {
const aRootName = "test_root";
const { conf, auth } = await getTestClientConf();
const { conf, auth } = await getTestAdminClientConf();
await PlClient.init({ ...conf, alternativeRoot: aRootName }, auth);
const clientB = await PlClient.init(conf, auth);
const result = await clientB.deleteAlternativeRoot(aRootName);
expect(result).toBe(true);
});
test("test client alternative root init", async () => {
const aRootName = "test_root";
const { conf, auth } = await getTestAdminClientConf();
const clientA = await PlClient.init({ ...conf, alternativeRoot: aRootName }, auth);
const clientB = await PlClient.init(conf, auth);
try {
const result = await clientB.deleteAlternativeRoot(aRootName);
expect(result).toBe(true);
} finally {
await Promise.all([clientA.close(), clientB.close()]);
}
});


test("test client init 2", async () => {
await getTestClient();
await getTestAdminClient();
});
Comment on lines 21 to 23

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The initialized PlClient returned by getTestAdminClient is never closed, which leaks resources. We should ensure the client is closed.

Suggested change
test("test client init 2", async () => {
await getTestClient();
await getTestAdminClient();
});
test("test client init 2", async () => {
const client = await getTestAdminClient();
await client.close();
});


interface SimpleDriver extends PlDriver {
Expand All @@ -46,7 +46,7 @@ const SimpleDriverDefinition: PlDriverDefinition<SimpleDriver> = {
};

test("test driver", async () => {
const client = await getTestClient();
const client = await getTestAdminClient();
const drv = client.getDriver(SimpleDriverDefinition);
expect(await drv.ping()).toEqual("pong");
});
Comment on lines 48 to 52

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The initialized PlClient is never closed, which leaks resources. We should wrap the test logic in a try...finally block to guarantee the client is closed.

Suggested change
test("test driver", async () => {
const client = await getTestClient();
const client = await getTestAdminClient();
const drv = client.getDriver(SimpleDriverDefinition);
expect(await drv.ping()).toEqual("pong");
});
test("test driver", async () => {
const client = await getTestAdminClient();
try {
const drv = client.getDriver(SimpleDriverDefinition);
expect(await drv.ping()).toEqual("pong");
} finally {
await client.close();
}
});

9 changes: 8 additions & 1 deletion lib/node/pl-client/src/core/ll_client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import {
getTestConfig,
plAddressToTestConfig,
getTestLLClient,
getTestAdminLLClient,
getTestAdminClient,
getTestClientConf,
} from "../test/test_config";
import { TxAPI_Open_Request_WritableTx } from "../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api";
Expand Down Expand Up @@ -144,7 +146,12 @@ test("test https call via proxy", async () => {
});

test("list user resources returns user root", async () => {
const client = await getTestLLClient();
// PlClient.init() creates the user root via the legacy path (requires admin role).
// After that, listUserResources returns it.
const plClient = await getTestAdminClient();
await plClient.close();

const client = await getTestAdminLLClient();
const responses = await client.listUserResources({ limit: 1 });

// First message is always the user root.
Expand Down
4 changes: 2 additions & 2 deletions lib/node/pl-client/src/core/ll_client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ export class LLPlClient implements WireClientProviderFactory {
await cl.getJWTToken(
{
expiration: { seconds: ttlSeconds, nanos: 0 },
requestedRole: AuthAPI_GetJWTToken_Role.USER,
requestedRole: AuthAPI_GetJWTToken_Role.ROLE_UNSPECIFIED,
},
{ meta },
).response
Expand All @@ -483,7 +483,7 @@ export class LLPlClient implements WireClientProviderFactory {
const headers: Record<string, string> = {};
if (options?.authorization) headers.authorization = options.authorization;
const resp = cl.POST("/v1/auth/jwt-token", {
body: { expiration: `${ttlSeconds}s`, requestedRole: AuthAPI_GetJWTToken_Role.USER },
body: { expiration: `${ttlSeconds}s`, requestedRole: AuthAPI_GetJWTToken_Role.ROLE_UNSPECIFIED },
headers,
});
return notEmpty((await resp).data, "REST: empty response for JWT token request").token;
Expand Down
6 changes: 3 additions & 3 deletions lib/node/pl-client/src/core/ll_transaction.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getTestLLClient } from "../test/test_config";
import { getTestLLClient, getTestAdminLLClient } from "../test/test_config";
import { TxAPI_Open_Request_WritableTx } from "../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api";
import { createLocalResourceId } from "./types";
import { test, expect } from "vitest";
Expand Down Expand Up @@ -79,7 +79,7 @@ test("check timeout error type (passive)", async () => {
});

test("check timeout error type (active)", async () => {
const client = await getTestLLClient();
const client = await getTestAdminLLClient();
const tx = client.createTx(true, { timeout: 500 });

try {
Expand Down Expand Up @@ -143,7 +143,7 @@ test("check timeout error type (active)", async () => {
});

test("check is abort error (active)", async () => {
const client = await getTestLLClient();
const client = await getTestAdminLLClient();
const tx = client.createTx(true, { abortSignal: AbortSignal.timeout(100) });

try {
Expand Down
12 changes: 6 additions & 6 deletions lib/node/pl-client/src/core/transaction.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { withTempRoot } from "../test/test_config";
import { withAdminTempRoot } from "../test/test_config";
import { StructTestResource, ValueTestResource } from "../helpers/pl";
import { field, toGlobalFieldId, toGlobalResourceId } from "./transaction";
import { RecoverablePlError } from "./errors";
Expand All @@ -7,7 +7,7 @@ import { test, expect } from "vitest";
import { StatefulPromise } from "./StatefulPromise";

test("get field", async () => {
await withTempRoot(async (pl) => {
await withAdminTempRoot(async (pl) => {
const [rr0, theField1] = await pl.withWriteTx("resource1", async (tx) => {
const r0 = tx.createStruct(StructTestResource);
const r1 = tx.createStruct(StructTestResource);
Expand Down Expand Up @@ -54,7 +54,7 @@ test("get field", async () => {
});

test("handle absent resource error", async () => {
await withTempRoot(async (pl) => {
await withAdminTempRoot(async (pl) => {
const [rr0, ff0] = await pl.withWriteTx("testCreateResource", async (tx) => {
const r0 = tx.createStruct(StructTestResource);
const f0 = { resourceId: tx.clientRoot, fieldName: "test0" };
Expand Down Expand Up @@ -114,7 +114,7 @@ test("handle absent resource error", async () => {
});

test("handle KV storage", async () => {
await withTempRoot(async (pl) => {
await withAdminTempRoot(async (pl) => {
await pl.withWriteTx("writeKV", async (tx) => {
tx.setKValue(tx.clientRoot, "a", "a");
tx.setKValue(tx.clientRoot, "b", "b");
Expand Down Expand Up @@ -151,15 +151,15 @@ test("handle KV storage", async () => {
});

test("handle empty KV storage", async () => {
await withTempRoot(async (pl) => {
await withAdminTempRoot(async (pl) => {
await pl.withReadTx("testReadIndividualAndList", async (tx) => {
expect(await tx.listKeyValuesString(tx.clientRoot)).toEqual([]);
});
});
});

test("handle KV storage 2", async () => {
await withTempRoot(async (pl) => {
await withAdminTempRoot(async (pl) => {
const r1 = await pl.withWriteTx("writeKV", async (tx) => {
const rr1 = tx.createEphemeral(StructTestResource);
tx.createField(field(rr1, "a"), "Dynamic", rr1);
Expand Down
71 changes: 71 additions & 0 deletions lib/node/pl-client/src/test/test_config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ export interface TestConfig {
test_proxy?: string;
test_user?: string;
test_password?: string;
test_admin_user?: string;
test_admin_password?: string;
}

const CONFIG_FILE = "test_config.json";
Expand All @@ -44,6 +46,11 @@ export function getTestConfig(): TestConfig {

if (process.env.PL_TEST_PROXY !== undefined) conf.test_proxy = process.env.PL_TEST_PROXY;

if (process.env.PL_TEST_ADMIN_USER !== undefined) conf.test_admin_user = process.env.PL_TEST_ADMIN_USER;

if (process.env.PL_TEST_ADMIN_PASSWORD !== undefined)
conf.test_admin_password = process.env.PL_TEST_ADMIN_PASSWORD;

if (conf.address === undefined)
throw new Error(
`can't resolve platform address (checked ${CONFIG_FILE} file and PL_ADDRESS environment var)`,
Expand Down Expand Up @@ -157,6 +164,70 @@ export async function getTestLLClient(confOverrides: Partial<PlClientConfig> = {
return await LLPlClient.build({ ...conf, ...confOverrides }, { auth });
}

export async function getTestAdminClientConf(): Promise<{ conf: PlClientConfig; auth: AuthOps }> {
const tConf = getTestConfig();

if (tConf.test_admin_user === undefined || tConf.test_admin_password === undefined)
throw new Error(
`No admin auth found in config (${CONFIG_FILE}) or env vars: PL_TEST_ADMIN_USER, PL_TEST_ADMIN_PASSWORD`,
);

const plConf = plAddressToTestConfig(tConf.address);
const uClient = await UnauthenticatedPlClient.build(plConf);
const authInformation = await uClient.login(tConf.test_admin_user, tConf.test_admin_password);

return {
conf: plConf,
auth: {
authInformation,
onUpdate: () => {},
onAuthError: () => {},
onUpdateError: () => {},
},
};
}
Comment on lines +167 to +188

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 requireAuth() guard absent from getTestAdminClientConf

getTestClientConf calls await uClient.requireAuth() and emits clear errors when credentials are supplied to an auth-disabled server (or omitted on an auth-enabled one). getTestAdminClientConf skips that check entirely and goes straight to uClient.login(). On a dev server that has auth disabled but where PL_TEST_ADMIN_USER/PASSWORD happen to be set (e.g. copied from a CI env file), login() will throw a server-side error rather than the familiar "server requires no auth" message, making the failure harder to diagnose. Worth adding the same guard even if the "strict security mode" assumption makes it an unlikely path in practice.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/node/pl-client/src/test/test_config.ts
Line: 167-188

Comment:
**`requireAuth()` guard absent from `getTestAdminClientConf`**

`getTestClientConf` calls `await uClient.requireAuth()` and emits clear errors when credentials are supplied to an auth-disabled server (or omitted on an auth-enabled one). `getTestAdminClientConf` skips that check entirely and goes straight to `uClient.login()`. On a dev server that has auth disabled but where `PL_TEST_ADMIN_USER`/`PASSWORD` happen to be set (e.g. copied from a CI env file), `login()` will throw a server-side error rather than the familiar "server requires no auth" message, making the failure harder to diagnose. Worth adding the same guard even if the "strict security mode" assumption makes it an unlikely path in practice.

How can I resolve this? If you propose a fix, please make it concise.

Fix in Claude Code


export async function getTestAdminLLClient(confOverrides: Partial<PlClientConfig> = {}) {
const { conf, auth } = await getTestAdminClientConf();
return await LLPlClient.build({ ...conf, ...confOverrides }, { auth });
}

export async function getTestAdminClient(
alternativeRoot?: string,
confOverrides: Partial<PlClientConfig> = {},
) {
const { conf, auth } = await getTestAdminClientConf();
if (alternativeRoot !== undefined && conf.alternativeRoot !== undefined)
throw new Error("test pl address configured with alternative root");
return await PlClient.init({ ...conf, ...confOverrides, alternativeRoot }, auth);
}

export async function withAdminTempRoot<T>(body: (pl: PlClient) => Promise<T>): Promise<T | void> {
const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;
let altRootId: OptionalResourceId = NullResourceId;
try {
const client = await getTestAdminClient(alternativeRoot);
altRootId = client.clientRoot;
try {
const value = await body(client);
const rawClient = await getTestAdminClient();
try {
await rawClient.deleteAlternativeRoot(alternativeRoot);
} catch (cleanupErr: any) {
console.warn(`Failed to clean up alternative root ${alternativeRoot}:`, cleanupErr.message);
} finally {
await rawClient.close();
}
return value;
} finally {
await client.close();
}
} catch (err: any) {
console.log(`ALTERNATIVE ROOT: ${alternativeRoot} (${resourceIdToString(altRootId)})`);
throw err;
}
}
Comment on lines +205 to +229

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

In withAdminTempRoot, if body(client) throws an error (which is common when a test fails), the inner try block is aborted, and the execution goes straight to the outer finally block (await client.close()). As a result, the cleanup code that deletes the alternative root (rawClient.deleteAlternativeRoot(alternativeRoot)) is never executed. This causes alternative roots to be leaked on test failures.

We should restructure the try...finally blocks to guarantee that the alternative root is always deleted and both clients are closed properly, regardless of whether the test body succeeds or fails.

export async function withAdminTempRoot<T>(body: (pl: PlClient) => Promise<T>): Promise<T> {
  const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;
  let altRootId: OptionalResourceId = NullResourceId;
  const client = await getTestAdminClient(alternativeRoot);
  altRootId = client.clientRoot;
  try {
    return await body(client);
  } catch (err: any) {
    console.log(`ALTERNATIVE ROOT: ${alternativeRoot} (${resourceIdToString(altRootId)})`);
    throw err;
  } finally {
    try {
      const rawClient = await getTestAdminClient();
      try {
        await rawClient.deleteAlternativeRoot(alternativeRoot);
      } catch (cleanupErr: any) {
        console.warn(`Failed to clean up alternative root ${alternativeRoot}:`, cleanupErr.message);
      } finally {
        await rawClient.close();
      }
    } finally {
      await client.close();
    }
  }
}

Comment on lines +205 to +229

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Alternative root not cleaned up on body failure

When body(client) throws, execution jumps straight to the outer catch (via client.close() in the inner finally) and the alternative root is logged but never deleted. The same pattern exists in withTempRoot, so this is consistent, but withAdminTempRoot does not have the TCP-proxy path that can explicitly return early — every non-error exit goes through rawClient.deleteAlternativeRoot. If tests are repeatedly flaky under load the leaked roots accumulate. A best-effort cleanup attempt in the outer catch (mirroring the console.warn pattern used for cleanupErr) would make the admin variant more robust than withTempRoot.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/node/pl-client/src/test/test_config.ts
Line: 205-229

Comment:
**Alternative root not cleaned up on `body` failure**

When `body(client)` throws, execution jumps straight to the outer `catch` (via `client.close()` in the inner `finally`) and the alternative root is logged but never deleted. The same pattern exists in `withTempRoot`, so this is consistent, but `withAdminTempRoot` does not have the TCP-proxy path that can explicitly `return` early — every non-error exit goes through `rawClient.deleteAlternativeRoot`. If tests are repeatedly flaky under load the leaked roots accumulate. A best-effort cleanup attempt in the outer catch (mirroring the `console.warn` pattern used for `cleanupErr`) would make the admin variant more robust than `withTempRoot`.

How can I resolve this? If you propose a fix, please make it concise.

Fix in Claude Code


export async function getTestClient(
alternativeRoot?: string,
confOverrides: Partial<PlClientConfig> = {},
Expand Down
16 changes: 12 additions & 4 deletions lib/node/pl-drivers/src/drivers/download_url/driver.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { TestHelpers } from "@milaboratories/pl-client";
import { ConsoleLoggerAdapter, HmacSha256Signer } from "@milaboratories/ts-helpers";
import { HmacSha256Signer } from "@milaboratories/ts-helpers";
import type { MiLogger } from "@milaboratories/ts-helpers";
import * as os from "node:os";
import { text } from "node:stream/consumers";
import { Readable } from "node:stream";
Expand All @@ -10,9 +11,13 @@ import { DownloadUrlDriver } from "./driver";
import { test, expect } from "vitest";
import { TestTags } from "@milaboratories/build-configs";

// ponytail: noop logger prevents background TaskProcessor workers from triggering
// vitest's onUserConsoleLog RPC after test ends, which causes EnvironmentTeardownError
const noopLogger: MiLogger = { info: () => {}, warn: () => {}, error: () => {} };
Comment on lines +14 to +16

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using a completely silent noopLogger to prevent EnvironmentTeardownError is a workaround that hides actual errors during test execution, making debugging extremely difficult.

The root cause of the EnvironmentTeardownError is that driver.releaseAll() is not guaranteed to run if an assertion fails before it is reached. Instead of silencing the logger, we should wrap the test bodies in try...finally blocks to guarantee driver.releaseAll() is always called, and keep using a real logger (like ConsoleLoggerAdapter) so that errors are visible.


test("should download a tar archive and extracts its content and then deleted", async () => {
await TestHelpers.withTempRoot(async (client) => {
const logger = new ConsoleLoggerAdapter();
const logger = noopLogger;
const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test1-"));
const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner());

Expand Down Expand Up @@ -41,6 +46,7 @@ test("should download a tar archive and extracts its content and then deleted",
expect(indexJsCode).toContain("use strict");

c.resetState();
await driver.releaseAll();
await c.awaitChange();
});
}, 45000);
Expand All @@ -50,7 +56,7 @@ test(
{ tag: [TestTags.Flaky] },
async () => {
await TestHelpers.withTempRoot(async (client) => {
const logger = new ConsoleLoggerAdapter();
const logger = noopLogger;
const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test1-"));
const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner());

Expand All @@ -69,14 +75,15 @@ test(
expect(url2).not.toBeUndefined();
expect(url2?.error).not.toBeUndefined();
expect(url2?.url).toBeUndefined();
await driver.releaseAll();
});
},
60000,
);

test("should abort a downloading process when we reset a state of a computable", async () => {
await TestHelpers.withTempRoot(async (client) => {
const logger = new ConsoleLoggerAdapter();
const logger = noopLogger;
const dir = await fsp.mkdtemp(path.join(os.tmpdir(), "test2-"));
const driver = new DownloadUrlDriver(logger, client.httpDispatcher, dir, genSigner());

Expand All @@ -94,6 +101,7 @@ test("should abort a downloading process when we reset a state of a computable",

const url2 = await c.getValue();
expect(url2).toBeUndefined();
await driver.releaseAll();
});
});

Expand Down
2 changes: 1 addition & 1 deletion lib/node/pl-drivers/src/drivers/logs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const downloadDriverOps = {
const useDocker = process.env.PL_TEST_USE_DOCKER === "true";

vi.setConfig({
testTimeout: 90000,
testTimeout: 180000,
});

test("should get all logs", async () => {
Expand Down
Loading