Files
orbit/internal/storage/mysql/db_test.go

39 lines
1.1 KiB
Go

package mysql
import (
"context"
"errors"
"fmt"
"testing"
driver "github.com/go-sql-driver/mysql"
)
func TestRetryableTransactionErrorOnlyMatchesPreCommitLockFailures(t *testing.T) {
tests := []struct {
name string
err error
want bool
}{
{name: "deadlock", err: &driver.MySQLError{Number: 1213}, want: true},
{name: "lock wait timeout", err: fmt.Errorf("wrapped: %w", &driver.MySQLError{Number: 1205}), want: true},
{name: "duplicate key", err: &driver.MySQLError{Number: 1062}, want: false},
{name: "application error", err: errors.New("validation failed"), want: false},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := retryableTransactionError(test.err); got != test.want {
t.Fatalf("retryableTransactionError()=%v want %v", got, test.want)
}
})
}
}
func TestWaitTransactionRetryHonorsCancellation(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel()
if err := waitTransactionRetry(ctx, 0); !errors.Is(err, context.Canceled) {
t.Fatalf("waitTransactionRetry()=%v want context canceled", err)
}
}