diff options
author | uzhas <uzhas@ydb.tech> | 2023-11-16 16:04:50 +0300 |
---|---|---|
committer | uzhas <uzhas@ydb.tech> | 2023-11-16 17:46:46 +0300 |
commit | 46f0c0079bb50609d2eeb6586642bcf114fc5239 (patch) | |
tree | 84e4e4978d57fe5de321ba69bf9d0c290de60a66 /vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go | |
parent | 73045e389397816cc2bdd6cd7818b4bce427b265 (diff) | |
download | ydb-46f0c0079bb50609d2eeb6586642bcf114fc5239.tar.gz |
enable ya make for go projects
Diffstat (limited to 'vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go')
-rw-r--r-- | vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go b/vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go new file mode 100644 index 0000000000..4405de2c40 --- /dev/null +++ b/vendor/github.com/jackc/pgx/v5/internal/pgmock/pgmock_test.go @@ -0,0 +1,93 @@ +package pgmock_test + +import ( + "context" + "fmt" + "net" + "strings" + "testing" + "time" + + "github.com/jackc/pgx/v5/internal/pgmock" + "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgx/v5/pgproto3" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestScript(t *testing.T) { + script := &pgmock.Script{ + Steps: pgmock.AcceptUnauthenticatedConnRequestSteps(), + } + script.Steps = append(script.Steps, pgmock.ExpectMessage(&pgproto3.Query{String: "select 42"})) + script.Steps = append(script.Steps, pgmock.SendMessage(&pgproto3.RowDescription{ + Fields: []pgproto3.FieldDescription{ + { + Name: []byte("?column?"), + TableOID: 0, + TableAttributeNumber: 0, + DataTypeOID: 23, + DataTypeSize: 4, + TypeModifier: -1, + Format: 0, + }, + }, + })) + script.Steps = append(script.Steps, pgmock.SendMessage(&pgproto3.DataRow{ + Values: [][]byte{[]byte("42")}, + })) + script.Steps = append(script.Steps, pgmock.SendMessage(&pgproto3.CommandComplete{CommandTag: []byte("SELECT 1")})) + script.Steps = append(script.Steps, pgmock.SendMessage(&pgproto3.ReadyForQuery{TxStatus: 'I'})) + script.Steps = append(script.Steps, pgmock.ExpectMessage(&pgproto3.Terminate{})) + + ln, err := net.Listen("tcp", "127.0.0.1:") + require.NoError(t, err) + defer ln.Close() + + serverErrChan := make(chan error, 1) + go func() { + defer close(serverErrChan) + + conn, err := ln.Accept() + if err != nil { + serverErrChan <- err + return + } + defer conn.Close() + + err = conn.SetDeadline(time.Now().Add(time.Second)) + if err != nil { + serverErrChan <- err + return + } + + err = script.Run(pgproto3.NewBackend(conn, conn)) + if err != nil { + serverErrChan <- err + return + } + }() + + parts := strings.Split(ln.Addr().String(), ":") + host := parts[0] + port := parts[1] + connStr := fmt.Sprintf("sslmode=disable host=%s port=%s", host, port) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + pgConn, err := pgconn.Connect(ctx, connStr) + require.NoError(t, err) + results, err := pgConn.Exec(ctx, "select 42").ReadAll() + assert.NoError(t, err) + + assert.Len(t, results, 1) + assert.Nil(t, results[0].Err) + assert.Equal(t, "SELECT 1", results[0].CommandTag.String()) + assert.Len(t, results[0].Rows, 1) + assert.Equal(t, "42", string(results[0].Rows[0][0])) + + pgConn.Close(ctx) + + assert.NoError(t, <-serverErrChan) +} |