Skip to content

Commit

Permalink
feat: Add testTxMulti function for executing multiple transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan-gang committed Jun 12, 2024
1 parent 08ac41d commit 5f7be75
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 0 deletions.
80 changes: 80 additions & 0 deletions internal/test_txn_11.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package internal

import (
"github.com/codecrafters-io/redis-tester/internal/redis_executable"
resp_connection "github.com/codecrafters-io/redis-tester/internal/resp/connection"
resp_value "github.com/codecrafters-io/redis-tester/internal/resp/value"
"github.com/codecrafters-io/redis-tester/internal/resp_assertions"

"github.com/codecrafters-io/redis-tester/internal/instrumented_resp_connection"
"github.com/codecrafters-io/redis-tester/internal/test_cases"
"github.com/codecrafters-io/tester-utils/test_case_harness"
)

func testTxMulti(stageHarness *test_case_harness.TestCaseHarness) error {
b := redis_executable.NewRedisExecutable(stageHarness)
if err := b.Run(); err != nil {
return err
}

logger := stageHarness.Logger

var clients []*resp_connection.RespConnection

for i := 0; i < 3; i++ {
client, err := instrumented_resp_connection.NewFromAddr(stageHarness, "localhost:6379", "client1")
if err != nil {
logFriendlyError(logger, err)
return err
}
clients = append(clients, client)
defer client.Close()
}

for i, client := range clients {
commandTestCase := test_cases.SendCommandTestCase{
Command: "SET",
Args: []string{"bar", "7"},
Assertion: resp_assertions.NewStringAssertion("OK"),
}

if err := commandTestCase.Run(client, logger); err != nil {
return err
}

commandTestCase = test_cases.SendCommandTestCase{
Command: "INCR",
Args: []string{"foo"},
Assertion: resp_assertions.NewIntegerAssertion(i + 1),
}

if err := commandTestCase.Run(client, logger); err != nil {
return err
}
}

for _, client := range clients {
transactionTestCase := test_cases.TransactionTestCase{
CommandQueue: [][]string{
{"INCR", "foo"},
{"INCR", "bar"},
},
ResultArray: []resp_value.Value{},
}
if err := transactionTestCase.RunAll(client, logger); err != nil {
return err
}
}

for i, client := range clients {
transactionTestCase := test_cases.TransactionTestCase{
CommandQueue: [][]string{},
ResultArray: []resp_value.Value{resp_value.NewIntegerValue(4 + i), resp_value.NewIntegerValue(8 + i)},
}
if err := transactionTestCase.RunExec(client, logger); err != nil {
return err
}
}

return nil
}
4 changes: 4 additions & 0 deletions internal/tester_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,5 +200,9 @@ var testerDefinition = tester_definition.TesterDefinition{
Slug: "jy1",
TestFunc: testTxErr,
},
{
Slug: "fg4",
TestFunc: testTxMulti,
},
},
}

0 comments on commit 5f7be75

Please sign in to comment.