valkey-io / valkey-glide

An open source Valkey client library that supports Valkey and Redis open source 6.2, 7.0 and 7.2. Valkey GLIDE is designed for reliability, optimized performance, and high-availability, for Valkey and Redis OSS based applications. GLIDE is a multi language client library, written in Rust with programming language bindings, such as Java and Python
Apache License 2.0
214 stars 46 forks source link

Node: Rework transaction IT. #2010

Closed Yury-Fridlyand closed 1 month ago

Yury-Fridlyand commented 1 month ago

Make failure of transaction IT readable. Also fix checking numbers in the transaction response (they were just ignored).

Failure before: https://github.com/valkey-io/valkey-glide/actions/runs/10069186874/job/27835788398?pr=2007#step:5:25100

  ● GlideClient › can send transactions_1

    expect(received).toEqual(expected) // deep equality

    Expected: "OKOKOKOK0.00OKbarOKembstrstring03184ec2-47a1-4617-9415-a9122ed3610cnullbarbazOKbarbaz3.001.001.001.0003184ec2-47a1-4617-9415-a9122ed3610c03184ec2-47a1-4617-9415-a9122ed3610c1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b03184ec2-47a1-4617-9415-a9122ed3610c1.00null4.001367dc0b-fa35-4902-8e8a-ac9cb4b05b8b43.001.00OKOK1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b21367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b20.003.001367dc0b-fa35-4902-8e8a-ac9cb4b05b8b11367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b21367dc0b-fa35-4902-8e8a-ac9cb4b05b8b10.000.005.001.001.002.002.00barfoobarfoo2.001.002.002.001.001.00barbar0.005.000.000.001.000.000.005.003.001.004.003.00member2member3member4member5member23.00member33.50member44.00member55.002.003.00threethree3.500.002.001.002.004.00member23.00member55.001.001.002.000.000.00{key}362226fb-2335-40d3-b311-4a3ee3e2c435two2.00{key}362226fb-2335-40d3-b311-4a3ee3e2c435one1.000-10-20-33.00{key}17589b48-bb5f-4ae0-82b5-929169f6698a0-2fieldvalue20-3fieldvalue31.00OK1.001.003.00{key}9de9af26-5907-44c3-bf3b-5ba94f78b8ac1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b3{key}9de9af26-5907-44c3-bf3b-5ba94f78b8ac1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b10.001.00OK26.06.0017.01.003.002.0013.438.115.137.51.66e+5166sqc8b49rny0sqdtr74hyu0nullPalermoCataniaPalermoCataniaPalermo0.003.48e+1513.438.1Catania1663.48e+1515.137.5Catania56.43.48e+1515.137.5Palermo1903.48e+1513.438.1mylib1C461cfa718d9a4089b56e47e593c4b3b0mylib1C461cfa718d9a4089b56e47e593c4b3b0OKOKOKOKOK"
    Received: "OKOKOKOK0.00OKbarOKembstrstring03184ec2-47a1-4617-9415-a9122ed3610cnullbarbazOKbarbaz3.001.001.001.0003184ec2-47a1-4617-9415-a9122ed3610c03184ec2-47a1-4617-9415-a9122ed3610c1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b03184ec2-47a1-4617-9415-a9122ed3610c1.00null4.001367dc0b-fa35-4902-8e8a-ac9cb4b05b8b43.001.00OKOK1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b21367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b20.003.001367dc0b-fa35-4902-8e8a-ac9cb4b05b8b11367dc0b-fa35-4902-8e8a-ac9cb4b05b8b31367dc0b-fa35-4902-8e8a-ac9cb4b05b8b21367dc0b-fa35-4902-8e8a-ac9cb4b05b8b10.000.005.001.001.002.002.00barfoobarfoo2.001.002.002.001.001.00barbar0.005.000.000.001.000.000.005.003.001.004.003.00member2member3member4member5member23.00member33.50member44.00member55.002.003.00threethree3.500.002.001.000.004.00member23.00member55.001.001.002.000.000.00{key}362226fb-2335-40d3-b311-4a3ee3e2c435two2.00{key}362226fb-2335-40d3-b311-4a3ee3e2c435one1.000-10-20-33.00{key}17589b48-bb5f-4ae0-82b5-929169f6698a0-2fieldvalue20-3fieldvalue31.00OK1.001.003.00{key}9de9af26-5907-44c3-bf3b-5ba94f78b8ac1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b3{key}9de9af26-5907-44c3-bf3b-5ba94f78b8ac1367dc0b-fa35-4902-8e8a-ac9cb4b05b8b10.001.00OK26.06.0017.01.003.002.0013.438.115.137.51.66e+5166sqc8b49rny0sqdtr74hyu0nullPalermoCataniaPalermoCataniaPalermo0.003.48e+1513.438.1Catania1663.48e+1515.137.5Catania56.43.48e+1515.137.5Palermo1903.48e+1513.438.1mylib1C461cfa718d9a4089b56e47e593c4b3b0mylib1C461cfa718d9a4089b56e47e593c4b3b0OKOKOKOKOK"

      169 |             const result = await client.exec(transaction);
      170 |             expectedRes.push("OK");
    > 171 |             expect(intoString(result)).toEqual(intoString(expectedRes));
          |                                        ^
      172 |         },
      173 |     );
      174 |

      at tests/RedisClient.test.ts:171:40
      at fulfilled (tests/RedisClient.test.ts:8:58)
          at runMicrotasks (<anonymous>)

Failure now:

  ● GlideClusterClient › can send transactions_0

    Checks failed in transaction response:
    zdiff([key13, key12]) failed, expected <["three"]>, actual <[]>
    zdiffWithScores([key13, key12]) failed, expected <{"three":3.5}>, actual <{}>

      357 |     }
      358 |     if (failedChecks.length > 0) {
    > 359 |         throw new Error("Checks failed in transaction response:\n" + failedChecks.join("\n"));
          |               ^
      360 |     }
      361 | }
      362 |

      at validateTransactionResponse (tests/TestUtilities.ts:359:15)
      at tests/RedisClusterClient.test.ts:247:40
      at fulfilled (tests/RedisClusterClient.test.ts:8:58)

image

Yury-Fridlyand commented 1 month ago

A transaction object has private fields and no getters. I can't access commands stored there.