From 52c02ecd651b67135a4a8ed048ce8ea35e31dc99 Mon Sep 17 00:00:00 2001 From: Avi Fenesh <55848801+avifenesh@users.noreply.github.com> Date: Tue, 4 Jun 2024 21:34:17 +0300 Subject: [PATCH] fixed testing (#1522) * fixed testing * Update test comments for SET Signed-off-by: Andrew Carbonetto --------- Signed-off-by: Andrew Carbonetto Co-authored-by: Andrew Carbonetto --- node/tests/RedisClusterClient.test.ts | 2 +- node/tests/SharedTests.ts | 114 +++++++++++++++----------- 2 files changed, 66 insertions(+), 50 deletions(-) diff --git a/node/tests/RedisClusterClient.test.ts b/node/tests/RedisClusterClient.test.ts index 2d39839945..4ab7c49e1c 100644 --- a/node/tests/RedisClusterClient.test.ts +++ b/node/tests/RedisClusterClient.test.ts @@ -32,7 +32,7 @@ type Context = { client: RedisClusterClient; }; -const TIMEOUT = 10000; +const TIMEOUT = 50000; describe("RedisClusterClient", () => { let testsFailed = 0; diff --git a/node/tests/SharedTests.ts b/node/tests/SharedTests.ts index ec80c31a6d..389e0b7e89 100644 --- a/node/tests/SharedTests.ts +++ b/node/tests/SharedTests.ts @@ -2499,7 +2499,7 @@ export function runBaseTests(config: { const setWithUnixSec = await client.set(key, value, { expiry: { type: "unixSeconds", - count: 1, + count: Math.floor(Date.now() / 1000) + 1, }, }); expect(setWithUnixSec).toEqual("OK"); @@ -2513,20 +2513,21 @@ export function runBaseTests(config: { const getResWithExpiryKeep = await client.get(key); expect(getResWithExpiryKeep).toEqual(value); // wait for the key to expire base on the previous set - setTimeout(() => {}, 1000); + let sleep = new Promise((resolve) => setTimeout(resolve, 1000)); + await sleep; const getResExpire = await client.get(key); // key should have expired expect(getResExpire).toEqual(null); - const setResWithExpiryWithUmilli = await client.set(key, value, { expiry: { type: "unixMilliseconds", - count: 2, + count: Date.now() + 1000, }, }); expect(setResWithExpiryWithUmilli).toEqual("OK"); // wait for the key to expire - setTimeout(() => {}, 3); + sleep = new Promise((resolve) => setTimeout(resolve, 1001)); + await sleep; const getResWithExpiryWithUmilli = await client.get(key); // key should have expired expect(getResWithExpiryWithUmilli).toEqual(null); @@ -2535,6 +2536,10 @@ export function runBaseTests(config: { async function setWithOnlyIfExistOptions(client: BaseClient) { const key = uuidv4(); const value = uuidv4(); + const setKey = await client.set(key, value); + expect(setKey).toEqual("OK"); + const getRes = await client.get(key); + expect(getRes).toEqual(value); const setExistingKeyRes = await client.set(key, value, { conditionalSet: "onlyIfExists", }); @@ -2542,12 +2547,12 @@ export function runBaseTests(config: { const getExistingKeyRes = await client.get(key); expect(getExistingKeyRes).toEqual(value); - const notExistingKeyRes = await client.set(key, value + "1", { + const notExistingKeyRes = await client.set(key + 1, value, { conditionalSet: "onlyIfExists", }); // key does not exist, so it should not be set expect(notExistingKeyRes).toEqual(null); - const getNotExistingKey = await client.get(key); + const getNotExistingKey = await client.get(key + 1); // key should not have been set expect(getNotExistingKey).toEqual(null); } @@ -2601,70 +2606,81 @@ export function runBaseTests(config: { const key = uuidv4(); const value = uuidv4(); + // set with multiple options: + // * only apply SET if the key already exists + // * expires after 1 second + // * returns the old value const setResWithAllOptions = await client.set(key, value, { expiry: { type: "unixSeconds", - count: 1, + count: Math.floor(Date.now() / 1000) + 1, }, conditionalSet: "onlyIfExists", returnOldValue: true, }); // key does not exist, so old value should be null expect(setResWithAllOptions).toEqual(null); - // key should have been set - const getResWithAllOptions = await client.get(key); - expect(getResWithAllOptions).toEqual(value); - - // wait for the key to expire - setTimeout(() => {}, 1000); - // key should have expired - const gettResWithAllOptions = await client.get(key); - expect(gettResWithAllOptions).toEqual(null); + // key does not exist, so SET should not have applied + expect(await client.get(key)).toEqual(null); } async function testSetWithAllCombination(client: BaseClient) { const key = uuidv4(); const value = uuidv4(); - const count = 1; + const count = 2; const expiryCombination = [ - "keepExisting", { type: "seconds", count }, - { type: "milliseconds", count }, { type: "unixSeconds", count }, { type: "unixMilliseconds", count }, - undefined, - ]; - const conditionalSetCombination = [ - "onlyIfExists", - "onlyIfDoesNotExist", - undefined, + { type: "milliseconds", count }, + "keepExisting", ]; - const returnOldValueCombination = [true, false, undefined]; + let exist = false; for (const expiryVal of expiryCombination) { - for (const conditionalSetVal of conditionalSetCombination) { - for (const returnOldValueVal of returnOldValueCombination) { - const setRes = await client.set(key, value, { - expiry: expiryVal as - | "keepExisting" - | { - type: - | "seconds" - | "milliseconds" - | "unixSeconds" - | "unixMilliseconds"; - count: number; - } - | undefined, - conditionalSet: conditionalSetVal as - | "onlyIfExists" - | "onlyIfDoesNotExist" - | undefined, - returnOldValue: returnOldValueVal, - }); - expect(setRes).not.toBeNull(); - } + const setRes = await client.set(key, value, { + expiry: expiryVal as + | "keepExisting" + | { + type: + | "seconds" + | "milliseconds" + | "unixSeconds" + | "unixMilliseconds"; + count: number; + }, + conditionalSet: "onlyIfDoesNotExist", + }); + + if (exist == false) { + expect(setRes).toEqual("OK"); + exist = true; + } else { + expect(setRes).toEqual(null); } + + const getRes = await client.get(key); + expect(getRes).toEqual(value); + } + + for (const expiryVal of expiryCombination) { + const setRes = await client.set(key, value, { + expiry: expiryVal as + | "keepExisting" + | { + type: + | "seconds" + | "milliseconds" + | "unixSeconds" + | "unixMilliseconds"; + count: number; + }, + + conditionalSet: "onlyIfExists", + returnOldValue: true, + }); + + expect(setRes).toBeDefined(); } }