From dd7b3ef2fd6ab80e374f47a0bbc76a174454848e Mon Sep 17 00:00:00 2001 From: Michael McGuinness Date: Mon, 23 Dec 2024 12:56:47 +0000 Subject: [PATCH] basicintegrationsetup --- cmd/grpc/main.go | 1 - scripts/docker.yml | 4 +- test/integration/grpc/container_test.go | 24 ++++++++- test/integration/grpc/name_test.go | 15 +----- test/integration/queue/container_test.go | 42 +++++++++++++++ test/integration/queue/name_test.go | 54 ------------------- test/integration/queue/querysync_test.go | 36 +++++++++++++ .../internal/jsonextractor/process_test.go | 30 +++++++++++ 8 files changed, 134 insertions(+), 72 deletions(-) delete mode 100644 test/integration/queue/name_test.go create mode 100644 test/integration/queue/querysync_test.go diff --git a/cmd/grpc/main.go b/cmd/grpc/main.go index 2876c354..1a089f9a 100644 --- a/cmd/grpc/main.go +++ b/cmd/grpc/main.go @@ -6,7 +6,6 @@ import ( "gotemplate/api/grpc/spec" "gotemplate/internal/database" "gotemplate/internal/database/repository" - "gotemplate/internal/name" "gotemplate/internal/otel" "log" "net" diff --git a/scripts/docker.yml b/scripts/docker.yml index f5d13ef8..7179aa28 100644 --- a/scripts/docker.yml +++ b/scripts/docker.yml @@ -8,9 +8,9 @@ vars: tasks: lint: cmds: - - godolint {{.DOCKERFILE_DIR_WITH_CONTEXT}}/grpc/Dockerfile + #- godolint {{.DOCKERFILE_DIR_WITH_CONTEXT}}/grpc/Dockerfile - godolint {{.DOCKERFILE_DIR_WITH_CONTEXT}}/queue/Dockerfile build: cmds: - - docker build -t {{.IMAGE_NAME}}_grpc -f {{.DOCKERFILE_DIR_WITH_CONTEXT}}/grpc/Dockerfile {{.CONTEXT}} + #- docker build -t {{.IMAGE_NAME}}_grpc -f {{.DOCKERFILE_DIR_WITH_CONTEXT}}/grpc/Dockerfile {{.CONTEXT}} - docker build -t {{.IMAGE_NAME}}_queue -f {{.DOCKERFILE_DIR_WITH_CONTEXT}}/queue/Dockerfile {{.CONTEXT}} \ No newline at end of file diff --git a/test/integration/grpc/container_test.go b/test/integration/grpc/container_test.go index 7721905f..f11f5b40 100644 --- a/test/integration/grpc/container_test.go +++ b/test/integration/grpc/container_test.go @@ -19,7 +19,7 @@ type containerConfig struct { Network *testcontainers.DockerNetwork } -func createContainer(t *testing.T, ctx context.Context, config *containerConfig) (*grpc.ClientConn, testcontainers.Container) { +func createContainer(t *testing.T, ctx context.Context, config *containerConfig) (*grpc.ClientConn, func()) { port, err := nat.NewPort("tcp", "8080") if err != nil { t.Fatalf("Failed to create port: %v", err) @@ -70,7 +70,9 @@ func createContainer(t *testing.T, ctx context.Context, config *containerConfig) t.Fatalf("Failed to connect to gRPC server: %v", err) } - return conn, container + return conn, func() { + container.Terminate(ctx) + } } type dbConfig struct { @@ -130,3 +132,21 @@ func createNetwork(t *testing.T, ctx context.Context) *testcontainers.DockerNetw return network } + +func createDependencies(t *testing.T, ctx context.Context) (*grpc.ClientConn, func()) { + network := createNetwork(t, ctx) + + dbconfig, dbContainer := createDB(t, ctx, network) + + conn, containerCleanup := createContainer(t, ctx, &containerConfig{ + DB: *dbconfig, + Network: network, + }) + + return conn, func() { + testcontainers.CleanupNetwork(t, network) + dbContainer.Terminate(ctx) + containerCleanup() + conn.Close() + } +} diff --git a/test/integration/grpc/name_test.go b/test/integration/grpc/name_test.go index 2e9bdc96..1de0a6d2 100644 --- a/test/integration/grpc/name_test.go +++ b/test/integration/grpc/name_test.go @@ -7,24 +7,13 @@ import ( "gotemplate/api/grpc/spec" "github.com/stretchr/testify/assert" - "github.com/testcontainers/testcontainers-go" ) func TestName(t *testing.T) { ctx := context.Background() - network := createNetwork(t, ctx) - defer testcontainers.CleanupNetwork(t, network) - - dbconfig, dbContainer := createDB(t, ctx, network) - defer dbContainer.Terminate(ctx) - - conn, container := createContainer(t, ctx, &containerConfig{ - DB: *dbconfig, - Network: network, - }) - defer container.Terminate(ctx) - defer conn.Close() + conn, cleanup := createDependencies(t, ctx) + defer cleanup() client := spec.NewNameClient(conn) diff --git a/test/integration/queue/container_test.go b/test/integration/queue/container_test.go index e648841f..3ee3918c 100644 --- a/test/integration/queue/container_test.go +++ b/test/integration/queue/container_test.go @@ -5,6 +5,7 @@ import ( "fmt" "strconv" "testing" + "time" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" @@ -12,6 +13,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/docker/go-connections/nat" + "github.com/stretchr/testify/assert" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/network" "github.com/testcontainers/testcontainers-go/wait" @@ -236,3 +238,43 @@ func sendMessage(t *testing.T, ctx context.Context, queue *sqs.Client, message m t.Fatalf("Failed to send message: %v", err) } } + +func assertMessageWait(t *testing.T, ctx context.Context, queue *queue, msgType string) { + time.Sleep(time.Second) + + result, err := queue.Client.ReceiveMessage(ctx, &sqs.ReceiveMessageInput{ + QueueUrl: &queue.Config.URL, + MaxNumberOfMessages: 1, + WaitTimeSeconds: 5, + VisibilityTimeout: 2, + MessageAttributeNames: []string{ + "type", + }, + }) + + assert.Nil(t, err) + for _, message := range result.Messages { + assert.Equal(t, msgType, *message.MessageAttributes["type"].StringValue) + } +} + +func createDependencies(t *testing.T, ctx context.Context) (*queue, func()) { + network := createNetwork(t, ctx) + + dbconfig, dbContainer := createDB(t, ctx, network) + + queue := createQueue(t, ctx, network) + + container := createContainer(t, ctx, containerConfig{ + Queue: *queue.Config, + DB: dbconfig, + Network: network, + }) + + return queue, func() { + testcontainers.CleanupNetwork(t, network) + dbContainer.Terminate(ctx) + (*queue.Container).Terminate(ctx) + container.Terminate(ctx) + } +} diff --git a/test/integration/queue/name_test.go b/test/integration/queue/name_test.go deleted file mode 100644 index f6776bb8..00000000 --- a/test/integration/queue/name_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package queue_test - -import ( - "context" - "testing" - "time" - - "github.com/aws/aws-sdk-go-v2/service/sqs" - "github.com/stretchr/testify/assert" - "github.com/testcontainers/testcontainers-go" -) - -func TestName(t *testing.T) { - ctx := context.Background() - - network := createNetwork(t, ctx) - defer testcontainers.CleanupNetwork(t, network) - - dbconfig, dbContainer := createDB(t, ctx, network) - defer dbContainer.Terminate(ctx) - - queue := createQueue(t, ctx, network) - defer (*queue.Container).Terminate(ctx) - - container := createContainer(t, ctx, containerConfig{ - Queue: *queue.Config, - DB: dbconfig, - Network: network, - }) - defer container.Terminate(ctx) - - sendMessage(t, ctx, queue.Client, message{ - URL: queue.Config.URL, - Type: "CREATE_NAME", - Body: "{\"name\":\"Doczy.ai\"}", - }) - - time.Sleep(time.Second) - - result, err := queue.Client.ReceiveMessage(ctx, &sqs.ReceiveMessageInput{ - QueueUrl: &queue.Config.URL, - MaxNumberOfMessages: 1, - WaitTimeSeconds: 5, - VisibilityTimeout: 2, - MessageAttributeNames: []string{ - "type", - }, - }) - - assert.Nil(t, err) - for _, message := range result.Messages { - assert.Equal(t, "CREATE_NAME_SUCCESS", *message.MessageAttributes["type"].StringValue) - } -} diff --git a/test/integration/queue/querysync_test.go b/test/integration/queue/querysync_test.go new file mode 100644 index 00000000..93c9a649 --- /dev/null +++ b/test/integration/queue/querysync_test.go @@ -0,0 +1,36 @@ +package queue_test + +import ( + "context" + "encoding/json" + "gotemplate/internal/document" + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" +) + +func TestName(t *testing.T) { + ctx := context.Background() + + queue, cleanup := createDependencies(t, ctx) + defer cleanup() + + document := document.Document{ + ID: uuid.New(), + JobID: uuid.New(), + Name: "document_name", + CleanVersion: int32(1), + TextVersion: int32(1), + } + docJson, err := json.Marshal(document) + assert.Nil(t, err) + + sendMessage(t, ctx, queue.Client, message{ + URL: queue.Config.URL, + Type: "DOCTEXT", + Body: string(docJson), + }) + + assertMessageWait(t, ctx, queue, "DOCQUERY") +} diff --git a/test/unit/internal/jsonextractor/process_test.go b/test/unit/internal/jsonextractor/process_test.go index a201d9e8..3d0f410c 100644 --- a/test/unit/internal/jsonextractor/process_test.go +++ b/test/unit/internal/jsonextractor/process_test.go @@ -48,6 +48,36 @@ func TestJSONProcess(t *testing.T) { value, err := extractor.Process(ctx, queryID, queryVersion, values) assert.Nil(t, err) assert.Equal(t, entryValue, value) + + entryValue = "" + jsonString = fmt.Sprintf("{\"key\": \"%s\"}", entryValue) + values = &[]result.Value{ + {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + } + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryID), queryVersion). + WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(config)), + ) + + value, err = extractor.Process(ctx, queryID, queryVersion, values) + assert.Nil(t, err) + assert.Equal(t, entryValue, value) + + entryValue = "1" + jsonString = fmt.Sprintf("{\"key\": %s", entryValue) + values = &[]result.Value{ + {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + } + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryID), queryVersion). + WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(config)), + ) + + value, err = extractor.Process(ctx, queryID, queryVersion, values) + assert.Nil(t, err) + assert.Equal(t, entryValue, value) } func TestJSONProcessJSON(t *testing.T) {