diff --git a/internal/pkg/gorm_postgres/repository/gorm_generic_repository_test.go b/internal/pkg/gorm_postgres/repository/gorm_generic_repository_test.go index cd3ae778..2846bb06 100644 --- a/internal/pkg/gorm_postgres/repository/gorm_generic_repository_test.go +++ b/internal/pkg/gorm_postgres/repository/gorm_generic_repository_test.go @@ -8,6 +8,7 @@ import ( "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/core/data" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/core/data/specification" customErrors "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/http/http_errors/custom_errors" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/mapper" gorm2 "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/testcontainer/gorm" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/utils" @@ -429,7 +430,9 @@ func setupGenericGormRepositoryWithDataModel( ctx context.Context, t *testing.T, ) (data.GenericRepositoryWithDataModel[*ProductGorm, *Product], error) { - db, err := gorm2.NewGormTestContainers().Start(ctx, t) + defaultLogger.SetupDefaultLogger() + + db, err := gorm2.NewGormTestContainers(defaultLogger.Logger).Start(ctx, t) if err != nil { return nil, err } @@ -443,7 +446,9 @@ func setupGenericGormRepositoryWithDataModel( } func setupGenericGormRepository(ctx context.Context, t *testing.T) (data.GenericRepository[*ProductGorm], error) { - db, err := gorm2.NewGormTestContainers().Start(ctx, t) + defaultLogger.SetupDefaultLogger() + + db, err := gorm2.NewGormTestContainers(defaultLogger.Logger).Start(ctx, t) err = seedAndMigration(ctx, db) if err != nil { diff --git a/internal/pkg/mongodb/repository/mongo_generic_repository_test.go b/internal/pkg/mongodb/repository/mongo_generic_repository_test.go index 198bcc69..7837d708 100644 --- a/internal/pkg/mongodb/repository/mongo_generic_repository_test.go +++ b/internal/pkg/mongodb/repository/mongo_generic_repository_test.go @@ -8,6 +8,7 @@ import ( "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/core/data" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/core/data/specification" customErrors "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/http/http_errors/custom_errors" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/mapper" mongo2 "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/testcontainer/mongo" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/utils" @@ -537,7 +538,9 @@ func setupGenericMongoRepositoryWithDataModel( ctx context.Context, t *testing.T, ) (data.GenericRepositoryWithDataModel[*ProductMongo, *Product], error) { - db, err := mongo2.NewMongoTestContainers().Start(ctx, t) + defaultLogger.SetupDefaultLogger() + + db, err := mongo2.NewMongoTestContainers(defaultLogger.Logger).Start(ctx, t) if err != nil { return nil, err } @@ -551,7 +554,9 @@ func setupGenericMongoRepositoryWithDataModel( } func setupGenericMongoRepository(ctx context.Context, t *testing.T) (data.GenericRepository[*ProductMongo], error) { - db, err := mongo2.NewMongoTestContainers().Start(ctx, t) + defaultLogger.SetupDefaultLogger() + + db, err := mongo2.NewMongoTestContainers(defaultLogger.Logger).Start(ctx, t) if err != nil { return nil, err } diff --git a/internal/pkg/test/containers/contracts/rabbitmq_container.go b/internal/pkg/test/containers/contracts/rabbitmq_container.go index 6d786c1c..268ef396 100644 --- a/internal/pkg/test/containers/contracts/rabbitmq_container.go +++ b/internal/pkg/test/containers/contracts/rabbitmq_container.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/core/serializer" - "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/messaging/bus" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/rabbitmq/config" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/rabbitmq/configurations" @@ -28,7 +27,6 @@ type RabbitMQContainer interface { Start(ctx context.Context, t *testing.T, serializer serializer.EventSerializer, - logger logger.Logger, rabbitmqBuilderFunc configurations.RabbitMQConfigurationBuilderFuc, options ...*RabbitMQContainerOptions) (bus.Bus, error) diff --git a/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container.go b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container.go index 4e686692..423412df 100644 --- a/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container.go +++ b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container.go @@ -18,15 +18,17 @@ import ( "github.com/ory/dockertest/v3" "github.com/ory/dockertest/v3/docker" + "github.com/rabbitmq/amqp091-go" ) type rabbitmqDockerTest struct { resource *dockertest.Resource defaultOptions *contracts.RabbitMQContainerOptions pool *dockertest.Pool + logger logger.Logger } -func NewRabbitMQDockerTest() contracts.RabbitMQContainer { +func NewRabbitMQDockerTest(logger logger.Logger) contracts.RabbitMQContainer { pool, err := dockertest.NewPool("") if err != nil { log.Fatalf("Could not connect to docker: %s", err) @@ -43,7 +45,8 @@ func NewRabbitMQDockerTest() contracts.RabbitMQContainer { ImageName: "rabbitmq", Name: "rabbitmq-dockertest", }, - pool: pool, + logger: logger, + pool: pool, } } @@ -74,16 +77,27 @@ func (g *rabbitmqDockerTest) CreatingContainerOptions( hostPort, err := strconv.Atoi( resource.GetPort(fmt.Sprintf("%s/tcp", g.defaultOptions.Ports[0])), ) // 5672 + httpPort, err := strconv.Atoi( + resource.GetPort(fmt.Sprintf("%s/tcp", g.defaultOptions.Ports[1])), + ) // 15672 + g.defaultOptions.HostPort = hostPort + g.defaultOptions.HttpPort = httpPort t.Cleanup(func() { _ = resource.Close() }) + isConnectable := isConnectable(g.logger, g.defaultOptions) + if !isConnectable { + return g.CreatingContainerOptions(context.Background(), t, options...) + } + opt := &config.RabbitmqHostOptions{ UserName: g.defaultOptions.UserName, Password: g.defaultOptions.Password, HostName: g.defaultOptions.Host, VirtualHost: g.defaultOptions.VirtualHost, Port: g.defaultOptions.HostPort, + HttpPort: g.defaultOptions.HttpPort, } return opt, nil @@ -93,7 +107,6 @@ func (g *rabbitmqDockerTest) Start( ctx context.Context, t *testing.T, serializer serializer.EventSerializer, - logger logger.Logger, rabbitmqBuilderFunc configurations.RabbitMQConfigurationBuilderFuc, options ...*contracts.RabbitMQContainerOptions, ) (bus.Bus, error) { @@ -115,7 +128,7 @@ func (g *rabbitmqDockerTest) Start( mqBus, err = bus2.NewRabbitmqBus( config, serializer, - logger, + g.logger, conn, rabbitmqBuilderFunc) if err != nil { @@ -124,7 +137,7 @@ func (g *rabbitmqDockerTest) Start( return nil }); err != nil { - log.Fatalf("Could not connect to docker: %s", err) + g.logger.Errorf("Could not connect to docker: %s", err) return nil, err } @@ -173,3 +186,38 @@ func (g *rabbitmqDockerTest) getRunOptions( return runOptions } + +func isConnectable(logger logger.Logger, options *contracts.RabbitMQContainerOptions) bool { + conn, err := amqp091.Dial( + fmt.Sprintf("amqp://%s:%s@%s:%d", options.UserName, options.Password, options.Host, options.HostPort), + ) + if err != nil { + logError(logger, options.UserName, options.Password, options.Host, options.HostPort) + + return false + } + + defer conn.Close() + + if err != nil || (conn != nil && conn.IsClosed()) { + logError(logger, options.UserName, options.Password, options.Host, options.HostPort) + + return false + } + logger.Infof( + "Opened rabbitmq connection on host: %s", + fmt.Sprintf("amqp://%s:%s@%s:%d", options.UserName, options.Password, options.Host, options.HostPort), + ) + + return true +} + +func logError(logger logger.Logger, userName string, password string, host string, hostPort int) { + // we should not use `t.Error` or `t.Errorf` for logging errors because it will `fail` our test at the end and, we just should use logs without error like log.Error (not log.Fatal) + logger.Errorf( + fmt.Sprintf( + "Error in creating rabbitmq connection with %s", + fmt.Sprintf("amqp://%s:%s@%s:%d", userName, password, host, hostPort), + ), + ) +} diff --git a/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container_test.go b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container_test.go index 4f814e9f..954ccf0d 100644 --- a/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container_test.go +++ b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container_test.go @@ -25,7 +25,9 @@ func Test_RabbitMQ_Container(t *testing.T) { defaultLogger.SetupDefaultLogger() eventSerializer := serializer.NewDefaultEventSerializer(json.NewDefaultSerializer()) - rabbitmq, err := NewRabbitMQDockerTest().Start(ctx, t, eventSerializer, defaultLogger.Logger, func(builder rabbitmqConfigurations.RabbitMQConfigurationBuilder) { + rabbitmq, err := NewRabbitMQDockerTest( + defaultLogger.Logger, + ).Start(ctx, t, eventSerializer, func(builder rabbitmqConfigurations.RabbitMQConfigurationBuilder) { builder.AddConsumer(ProducerConsumerMessage{}, func(consumerBuilder consumerConfigurations.RabbitMQConsumerConfigurationBuilder) { consumerBuilder.WithHandlers( diff --git a/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_fx.go b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_fx.go new file mode 100644 index 00000000..7cf7af6b --- /dev/null +++ b/internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_fx.go @@ -0,0 +1,18 @@ +package rabbitmq + +import ( + "context" + "testing" + + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/rabbitmq/config" +) + +var RabbitmqDockerTestContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { + return func(c *config.RabbitmqOptions, logger logger.Logger) (*config.RabbitmqOptions, error) { + rabbitmqHostOptions, err := NewRabbitMQDockerTest(logger).CreatingContainerOptions(ctx, t) + c.RabbitmqHostOptions = rabbitmqHostOptions + + return c, err + } +} diff --git a/internal/pkg/test/containers/testcontainer/eventstoredb/eveentstoredb_container_test.go b/internal/pkg/test/containers/testcontainer/eventstoredb/eveentstoredb_container_test.go index ab57cfbf..e85211d0 100644 --- a/internal/pkg/test/containers/testcontainer/eventstoredb/eveentstoredb_container_test.go +++ b/internal/pkg/test/containers/testcontainer/eventstoredb/eveentstoredb_container_test.go @@ -4,12 +4,16 @@ import ( "context" "testing" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func Test_Custom_EventStoreDB_Container(t *testing.T) { - esdbInstance, err := NewEventstoreDBTestContainers().Start(context.Background(), t) + defaultLogger.SetupDefaultLogger() + + esdbInstance, err := NewEventstoreDBTestContainers(defaultLogger.Logger).Start(context.Background(), t) require.NoError(t, err) assert.NotNil(t, esdbInstance) diff --git a/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_container.go b/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_container.go index 6f054889..6c71df30 100644 --- a/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_container.go +++ b/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_container.go @@ -8,6 +8,7 @@ import ( "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/eventstroredb" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/eventstroredb/config" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" "emperror.dev/errors" @@ -20,9 +21,10 @@ import ( type eventstoredbTestContainers struct { container testcontainers.Container defaultOptions *contracts.EventstoreDBContainerOptions + logger logger.Logger } -func NewEventstoreDBTestContainers() contracts.EventstoreDBContainer { +func NewEventstoreDBTestContainers(l logger.Logger) contracts.EventstoreDBContainer { return &eventstoredbTestContainers{ defaultOptions: &contracts.EventstoreDBContainerOptions{ Ports: []string{"2113/tcp", "1113/tcp"}, @@ -34,6 +36,7 @@ func NewEventstoreDBTestContainers() contracts.EventstoreDBContainer { ImageName: "eventstore/eventstore", Name: "eventstoredb-testcontainers", }, + logger: l, } } @@ -68,7 +71,7 @@ func (g *eventstoredbTestContainers) CreatingContainerOptions( return nil, err } g.defaultOptions.HttpPort = httpPort.Int() - t.Logf("eventstoredb http and grpc port is: %d", httpPort.Int()) + g.logger.Infof("eventstoredb http and grpc port is: %d", httpPort.Int()) // get a free random host port for tcp port eventstoredb tcpPort, err := dbContainer.MappedPort(ctx, nat.Port(g.defaultOptions.Ports[1])) diff --git a/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_fx.go b/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_fx.go index ae433423..42a4ae09 100644 --- a/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_fx.go +++ b/internal/pkg/test/containers/testcontainer/eventstoredb/eventstoredb_fx.go @@ -5,11 +5,12 @@ import ( "testing" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/eventstroredb/config" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" ) var EventstoreDBContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *config.EventStoreDbOptions) (*config.EventStoreDbOptions, error) { - newOption, err := NewEventstoreDBTestContainers().CreatingContainerOptions(ctx, t) + return func(c *config.EventStoreDbOptions, logger logger.Logger) (*config.EventStoreDbOptions, error) { + newOption, err := NewEventstoreDBTestContainers(logger).CreatingContainerOptions(ctx, t) if err != nil { return nil, err } @@ -19,8 +20,8 @@ var EventstoreDBContainerOptionsDecorator = func(t *testing.T, ctx context.Conte } } -var ReplaceEventStoreContainerOptions = func(t *testing.T, options *config.EventStoreDbOptions, ctx context.Context) error { - newOption, err := NewEventstoreDBTestContainers().CreatingContainerOptions(ctx, t) +var ReplaceEventStoreContainerOptions = func(t *testing.T, options *config.EventStoreDbOptions, ctx context.Context, logger logger.Logger) error { + newOption, err := NewEventstoreDBTestContainers(logger).CreatingContainerOptions(ctx, t) if err != nil { return err } diff --git a/internal/pkg/test/containers/testcontainer/gorm/gorm_container.go b/internal/pkg/test/containers/testcontainer/gorm/gorm_container.go index 0e523e80..7b601369 100644 --- a/internal/pkg/test/containers/testcontainer/gorm/gorm_container.go +++ b/internal/pkg/test/containers/testcontainer/gorm/gorm_container.go @@ -7,9 +7,11 @@ import ( "time" gormPostgres "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/gorm_postgres" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" "emperror.dev/errors" + "github.com/docker/docker/api/types/container" "github.com/docker/go-connections/nat" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" @@ -22,9 +24,10 @@ import ( type gormTestContainers struct { container testcontainers.Container defaultOptions *contracts.PostgresContainerOptions + logger logger.Logger } -func NewGormTestContainers() contracts.GormContainer { +func NewGormTestContainers(l logger.Logger) contracts.GormContainer { return &gormTestContainers{ defaultOptions: &contracts.PostgresContainerOptions{ Database: "test_db", @@ -36,6 +39,7 @@ func NewGormTestContainers() contracts.GormContainer { ImageName: "postgres", Name: "postgresql-testcontainer", }, + logger: l, } } @@ -79,7 +83,7 @@ func (g *gormTestContainers) CreatingContainerOptions( return nil, err } - isConnectable := isConnectable(ctx, t, g.defaultOptions) + isConnectable := isConnectable(ctx, g.logger, g.defaultOptions) if !isConnectable { return g.CreatingContainerOptions(context.Background(), t, options...) } @@ -154,6 +158,9 @@ func (g *gormTestContainers) getRunOptions( ExposedPorts: []string{g.defaultOptions.Port}, WaitingFor: wait.ForAll(strategies...).WithDeadline(deadline), Cmd: []string{"postgres", "-c", "fsync=off"}, + HostConfigModifier: func(hostConfig *container.HostConfig) { + hostConfig.AutoRemove = true + }, Env: map[string]string{ "POSTGRES_DB": g.defaultOptions.Database, "POSTGRES_PASSWORD": g.defaultOptions.Password, @@ -164,9 +171,11 @@ func (g *gormTestContainers) getRunOptions( return containerReq } -func isConnectable(ctx context.Context, t *testing.T, postgresOptions *contracts.PostgresContainerOptions) bool { - t.Helper() - +func isConnectable( + ctx context.Context, + logger logger.Logger, + postgresOptions *contracts.PostgresContainerOptions, +) bool { orm, err := gorm.Open( postgres.Open( fmt.Sprintf( @@ -184,14 +193,14 @@ func isConnectable(ctx context.Context, t *testing.T, postgresOptions *contracts }, ) if err != nil { - logError(t, postgresOptions.Host, postgresOptions.HostPort) + logError(logger, postgresOptions.Host, postgresOptions.HostPort) return false } db, err := orm.DB() if err != nil { - logError(t, postgresOptions.Host, postgresOptions.HostPort) + logError(logger, postgresOptions.Host, postgresOptions.HostPort) return false } @@ -200,24 +209,18 @@ func isConnectable(ctx context.Context, t *testing.T, postgresOptions *contracts err = db.PingContext(ctx) if err != nil { - logError(t, postgresOptions.Host, postgresOptions.HostPort) + logError(logger, postgresOptions.Host, postgresOptions.HostPort) return false } - t.Logf( - "Opened postgres connection on host: %s", - fmt.Sprintf("%s:%d", postgresOptions.Host, postgresOptions.HostPort), - ) + + logger.Infof( + "Opened postgres connection on host: %s:%d", postgresOptions.Host, postgresOptions.HostPort) return true } -func logError(t *testing.T, host string, hostPort int) { - t.Helper() - t.Errorf( - fmt.Sprintf( - "Error in creating postgres connection with %s", - fmt.Sprintf("%s:%d", host, hostPort), - ), - ) +func logError(logger logger.Logger, host string, hostPort int) { + // we should not use `t.Error` or `t.Errorf` for logging errors because it will `fail` our test at the end and, we just should use logs without error like log.Error (not log.Fatal) + logger.Errorf("Error in creating postgres connection with %s:%d", host, hostPort) } diff --git a/internal/pkg/test/containers/testcontainer/gorm/gorm_container_test.go b/internal/pkg/test/containers/testcontainer/gorm/gorm_container_test.go index a70a82df..e394f8ff 100644 --- a/internal/pkg/test/containers/testcontainer/gorm/gorm_container_test.go +++ b/internal/pkg/test/containers/testcontainer/gorm/gorm_container_test.go @@ -6,6 +6,7 @@ import ( "time" gormPostgres "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/gorm_postgres" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" "github.com/docker/go-connections/nat" "github.com/stretchr/testify/assert" @@ -17,8 +18,9 @@ import ( func Test_Custom_Gorm_Container(t *testing.T) { ctx := context.Background() + defaultLogger.SetupDefaultLogger() - gorm, err := NewGormTestContainers().Start(ctx, t) + gorm, err := NewGormTestContainers(defaultLogger.Logger).Start(ctx, t) require.NoError(t, err) assert.NotNil(t, gorm) diff --git a/internal/pkg/test/containers/testcontainer/gorm/gorm_fx.go b/internal/pkg/test/containers/testcontainer/gorm/gorm_fx.go index f319c9cb..237f61fe 100644 --- a/internal/pkg/test/containers/testcontainer/gorm/gorm_fx.go +++ b/internal/pkg/test/containers/testcontainer/gorm/gorm_fx.go @@ -5,10 +5,11 @@ import ( "testing" gormPostgres "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/gorm_postgres" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" ) var GormContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *gormPostgres.GormOptions) (*gormPostgres.GormOptions, error) { - return NewGormTestContainers().CreatingContainerOptions(ctx, t) + return func(c *gormPostgres.GormOptions, logger logger.Logger) (*gormPostgres.GormOptions, error) { + return NewGormTestContainers(logger).CreatingContainerOptions(ctx, t) } } diff --git a/internal/pkg/test/containers/testcontainer/mongo/mongo_container.go b/internal/pkg/test/containers/testcontainer/mongo/mongo_container.go index c30ab689..7ed4d962 100644 --- a/internal/pkg/test/containers/testcontainer/mongo/mongo_container.go +++ b/internal/pkg/test/containers/testcontainer/mongo/mongo_container.go @@ -6,10 +6,12 @@ import ( "testing" "time" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/mongodb" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" "emperror.dev/errors" + "github.com/docker/docker/api/types/container" "github.com/docker/go-connections/nat" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" @@ -27,9 +29,10 @@ const ( type mongoTestContainers struct { container testcontainers.Container defaultOptions *contracts.MongoContainerOptions + logger logger.Logger } -func NewMongoTestContainers() contracts.MongoContainer { +func NewMongoTestContainers(l logger.Logger) contracts.MongoContainer { return &mongoTestContainers{ defaultOptions: &contracts.MongoContainerOptions{ Database: "test_db", @@ -41,6 +44,7 @@ func NewMongoTestContainers() contracts.MongoContainer { ImageName: "mongo", Name: "mongo-testcontainer", }, + logger: l, } } @@ -83,7 +87,7 @@ func (g *mongoTestContainers) CreatingContainerOptions( return nil, err } - isConnectable := isConnectable(ctx, t, g.defaultOptions) + isConnectable := isConnectable(ctx, g.logger, g.defaultOptions) if !isConnectable { return g.CreatingContainerOptions(context.Background(), t, options...) } @@ -158,7 +162,9 @@ func (g *mongoTestContainers) getRunOptions( ExposedPorts: []string{g.defaultOptions.Port}, WaitingFor: wait.ForListeningPort(nat.Port(g.defaultOptions.Port)).WithPollInterval(2 * time.Second), Hostname: g.defaultOptions.Host, - SkipReaper: true, + HostConfigModifier: func(hostConfig *container.HostConfig) { + hostConfig.AutoRemove = true + }, Env: map[string]string{ "MONGO_INITDB_ROOT_USERNAME": g.defaultOptions.UserName, "MONGO_INITDB_ROOT_PASSWORD": g.defaultOptions.Password, @@ -168,9 +174,7 @@ func (g *mongoTestContainers) getRunOptions( return containerReq } -func isConnectable(ctx context.Context, t *testing.T, mongoOptions *contracts.MongoContainerOptions) bool { - t.Helper() - +func isConnectable(ctx context.Context, logger logger.Logger, mongoOptions *contracts.MongoContainerOptions) bool { uriAddress := fmt.Sprintf( "mongodb://%s:%s@%s:%d", mongoOptions.UserName, @@ -190,31 +194,26 @@ func isConnectable(ctx context.Context, t *testing.T, mongoOptions *contracts.Mo defer mongoClient.Disconnect(ctx) if err != nil { - logError(t, mongoOptions.Host, mongoOptions.HostPort) + logError(logger, mongoOptions.Host, mongoOptions.HostPort) return false } err = mongoClient.Ping(ctx, nil) if err != nil { - logError(t, mongoOptions.Host, mongoOptions.HostPort) + logError(logger, mongoOptions.Host, mongoOptions.HostPort) return false } - t.Logf( - "Opened mongodb connection on host: %s", - fmt.Sprintf("%s:%d", mongoOptions.Host, mongoOptions.HostPort), - ) + logger.Infof( + "Opened mongodb connection on host: %s:%d", mongoOptions.Host, mongoOptions.HostPort) return true } -func logError(t *testing.T, host string, hostPort int) { - t.Helper() - t.Errorf( - fmt.Sprintf( - "Error in creating mongodb connection with %s", - fmt.Sprintf("%s:%d", host, hostPort), - ), +func logError(logger logger.Logger, host string, hostPort int) { + // we should not use `t.Error` or `t.Errorf` for logging errors because it will `fail` our test at the end and, we just should use logs without error like log.Error (not log.Fatal) + logger.Errorf( + "Error in creating mongodb connection with %s:%d", host, hostPort, ) } diff --git a/internal/pkg/test/containers/testcontainer/mongo/mongo_container_test.go b/internal/pkg/test/containers/testcontainer/mongo/mongo_container_test.go index f5727e11..958c88a4 100644 --- a/internal/pkg/test/containers/testcontainer/mongo/mongo_container_test.go +++ b/internal/pkg/test/containers/testcontainer/mongo/mongo_container_test.go @@ -4,12 +4,16 @@ import ( "context" "testing" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func Test_Custom_Mongo_Container(t *testing.T) { - mongo, err := NewMongoTestContainers().Start(context.Background(), t) + defaultLogger.SetupDefaultLogger() + + mongo, err := NewMongoTestContainers(defaultLogger.Logger).Start(context.Background(), t) require.NoError(t, err) assert.NotNil(t, mongo) diff --git a/internal/pkg/test/containers/testcontainer/mongo/mongo_fx.go b/internal/pkg/test/containers/testcontainer/mongo/mongo_fx.go index f7131b4c..f9ed16a6 100644 --- a/internal/pkg/test/containers/testcontainer/mongo/mongo_fx.go +++ b/internal/pkg/test/containers/testcontainer/mongo/mongo_fx.go @@ -4,11 +4,12 @@ import ( "context" "testing" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/mongodb" ) var MongoContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *mongodb.MongoDbOptions) (*mongodb.MongoDbOptions, error) { - return NewMongoTestContainers().CreatingContainerOptions(ctx, t) + return func(c *mongodb.MongoDbOptions, logger logger.Logger) (*mongodb.MongoDbOptions, error) { + return NewMongoTestContainers(logger).CreatingContainerOptions(ctx, t) } } diff --git a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container.go b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container.go index 1e0ad39b..2fa22079 100644 --- a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container.go +++ b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" postgres "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/postgres_pgx" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" @@ -20,9 +21,10 @@ import ( type postgresPgxTestContainers struct { container testcontainers.Container defaultOptions *contracts.PostgresContainerOptions + logger logger.Logger } -func NewPostgresPgxContainers() contracts.PostgresPgxContainer { +func NewPostgresPgxContainers(l logger.Logger) contracts.PostgresPgxContainer { return &postgresPgxTestContainers{ defaultOptions: &contracts.PostgresContainerOptions{ Database: "test_db", @@ -34,6 +36,7 @@ func NewPostgresPgxContainers() contracts.PostgresPgxContainer { ImageName: "postgres", Name: "postgresql-testcontainer", }, + logger: l, } } diff --git a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container_test.go b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container_test.go index f414b2d0..7f6d7436 100644 --- a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container_test.go +++ b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_container_test.go @@ -4,12 +4,16 @@ import ( "context" "testing" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func Test_Custom_PostgresPgx_Container(t *testing.T) { - gorm, err := NewPostgresPgxContainers().Start(context.Background(), t) + defaultLogger.SetupDefaultLogger() + + gorm, err := NewPostgresPgxContainers(defaultLogger.Logger).Start(context.Background(), t) require.NoError(t, err) assert.NotNil(t, gorm) diff --git a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_fx.go b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_fx.go index 69dd74c3..9ad471e8 100644 --- a/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_fx.go +++ b/internal/pkg/test/containers/testcontainer/postgrespxg/postgrespgx_fx.go @@ -4,11 +4,12 @@ import ( "context" "testing" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" postgres "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/postgres_pgx" ) var PostgresPgxContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *postgres.PostgresPgxOptions) (*postgres.PostgresPgxOptions, error) { - return NewPostgresPgxContainers().CreatingContainerOptions(ctx, t) + return func(c *postgres.PostgresPgxOptions, logger logger.Logger) (*postgres.PostgresPgxOptions, error) { + return NewPostgresPgxContainers(logger).CreatingContainerOptions(ctx, t) } } diff --git a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container.go b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container.go index 3c28a9ee..5baf874a 100644 --- a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container.go +++ b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container.go @@ -16,6 +16,7 @@ import ( "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" "emperror.dev/errors" + "github.com/docker/docker/api/types/container" "github.com/docker/go-connections/nat" "github.com/rabbitmq/amqp091-go" "github.com/testcontainers/testcontainers-go" @@ -28,9 +29,10 @@ import ( type rabbitmqTestContainers struct { container testcontainers.Container defaultOptions *contracts.RabbitMQContainerOptions + logger logger.Logger } -func NewRabbitMQTestContainers() contracts.RabbitMQContainer { +func NewRabbitMQTestContainers(l logger.Logger) contracts.RabbitMQContainer { return &rabbitmqTestContainers{ defaultOptions: &contracts.RabbitMQContainerOptions{ Ports: []string{"5672/tcp", "15672/tcp"}, @@ -44,6 +46,7 @@ func NewRabbitMQTestContainers() contracts.RabbitMQContainer { ImageName: "rabbitmq", Name: "rabbitmq-testcontainers", }, + logger: l, } } @@ -69,7 +72,7 @@ func (g *rabbitmqTestContainers) CreatingContainerOptions( // Clean up the container after the test is complete t.Cleanup(func() { - if err := dbContainer.Terminate(ctx); err != nil { + if terr := dbContainer.Terminate(ctx); terr != nil { t.Fatalf("failed to terminate container: %s", err) } time.Sleep(time.Second * 1) @@ -81,7 +84,7 @@ func (g *rabbitmqTestContainers) CreatingContainerOptions( return nil, err } g.defaultOptions.HostPort = hostPort.Int() - t.Logf("rabbitmq host port is: %d", hostPort.Int()) + g.logger.Infof("rabbitmq host port is: %d", hostPort.Int()) // https://github.com/michaelklishin/rabbit-hole/issues/74 // get a free random host port for rabbitmq UI `Http Port` @@ -90,14 +93,14 @@ func (g *rabbitmqTestContainers) CreatingContainerOptions( return nil, err } g.defaultOptions.HttpPort = uiHttpPort.Int() - t.Logf("rabbitmq ui port is: %d", uiHttpPort.Int()) + g.logger.Infof("rabbitmq ui port is: %d", uiHttpPort.Int()) host, err := dbContainer.Host(ctx) if err != nil { return nil, err } - isConnectable := isConnectable(t, g.defaultOptions) + isConnectable := IsConnectable(g.logger, g.defaultOptions) if !isConnectable { return g.CreatingContainerOptions(context.Background(), t, options...) } @@ -120,7 +123,6 @@ func (g *rabbitmqTestContainers) Start( ctx context.Context, t *testing.T, serializer serializer.EventSerializer, - logger logger.Logger, rabbitmqBuilderFunc configurations.RabbitMQConfigurationBuilderFuc, options ...*contracts.RabbitMQContainerOptions, ) (bus.Bus, error) { @@ -129,7 +131,7 @@ func (g *rabbitmqTestContainers) Start( return nil, err } - t.Logf( + g.logger.Infof( "rabbitmq connection is on host: %s", rabbitHostOptions.AmqpEndPoint(), ) @@ -143,7 +145,7 @@ func (g *rabbitmqTestContainers) Start( mqBus, err := bus2.NewRabbitmqBus( rabbitmqConfig, serializer, - logger, + g.logger, conn, rabbitmqBuilderFunc, ) @@ -186,12 +188,14 @@ func (g *rabbitmqTestContainers) getRunOptions( g.defaultOptions.Tag = option.Tag } } - containerReq := testcontainers.ContainerRequest{ Image: fmt.Sprintf("%s:%s", g.defaultOptions.ImageName, g.defaultOptions.Tag), ExposedPorts: g.defaultOptions.Ports, WaitingFor: wait.ForListeningPort(nat.Port(g.defaultOptions.Ports[0])), - Hostname: g.defaultOptions.Host, + HostConfigModifier: func(hostConfig *container.HostConfig) { + hostConfig.AutoRemove = true + }, + Hostname: g.defaultOptions.Host, Env: map[string]string{ "RABBITMQ_DEFAULT_USER": g.defaultOptions.UserName, "RABBITMQ_DEFAULT_PASS": g.defaultOptions.Password, @@ -201,14 +205,12 @@ func (g *rabbitmqTestContainers) getRunOptions( return containerReq } -func isConnectable(t *testing.T, options *contracts.RabbitMQContainerOptions) bool { - t.Helper() - +func IsConnectable(logger logger.Logger, options *contracts.RabbitMQContainerOptions) bool { conn, err := amqp091.Dial( fmt.Sprintf("amqp://%s:%s@%s:%d", options.UserName, options.Password, options.Host, options.HostPort), ) if err != nil { - logError(t, options.UserName, options.Password, options.Host, options.HostPort) + logError(logger, options.UserName, options.Password, options.Host, options.HostPort) return false } @@ -216,23 +218,24 @@ func isConnectable(t *testing.T, options *contracts.RabbitMQContainerOptions) bo defer conn.Close() if err != nil || (conn != nil && conn.IsClosed()) { - logError(t, options.UserName, options.Password, options.Host, options.HostPort) + logError(logger, options.UserName, options.Password, options.Host, options.HostPort) return false } - t.Logf( - "Opened rabbitmq connection on host: %s", - fmt.Sprintf("amqp://%s:%s@%s:%d", options.UserName, options.Password, options.Host, options.HostPort), + logger.Infof( + "Opened rabbitmq connection on host: amqp://%s:%s@%s:%d", + options.UserName, + options.Password, + options.Host, + options.HostPort, ) return true } -func logError(t *testing.T, userName string, password string, host string, hostPort int) { - t.Errorf( - fmt.Sprintf( - "Error in creating rabbitmq connection with %s", - fmt.Sprintf("amqp://%s:%s@%s:%d", userName, password, host, hostPort), - ), +func logError(logger logger.Logger, userName string, password string, host string, hostPort int) { + // we should not use `t.Error` or `t.Errorf` for logging errors because it will `fail` our test at the end and, we just should use logs without error like log.Error (not log.Fatal) + logger.Errorf( + "Error in creating rabbitmq connection with host: amqp://%s:%s@%s:%d", userName, password, host, hostPort, ) } diff --git a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container_test.go b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container_test.go index 8f37eee1..81840d62 100644 --- a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container_test.go +++ b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_container_test.go @@ -25,7 +25,9 @@ func Test_Custom_RabbitMQ_Container(t *testing.T) { defaultLogger.SetupDefaultLogger() eventSerializer := serializer.NewDefaultEventSerializer(json.NewDefaultSerializer()) - rabbitmq, err := NewRabbitMQTestContainers().Start(ctx, t, eventSerializer, defaultLogger.Logger, func(builder rabbitmqConfigurations.RabbitMQConfigurationBuilder) { + rabbitmq, err := NewRabbitMQTestContainers( + defaultLogger.Logger, + ).Start(ctx, t, eventSerializer, func(builder rabbitmqConfigurations.RabbitMQConfigurationBuilder) { builder.AddConsumer(ProducerConsumerMessage{}, func(consumerBuilder consumerConfigurations.RabbitMQConsumerConfigurationBuilder) { consumerBuilder.WithHandlers( diff --git a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_fx.go b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_fx.go index b24c2a5e..3dcc0e5d 100644 --- a/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_fx.go +++ b/internal/pkg/test/containers/testcontainer/rabbitmq/rabbitmq_fx.go @@ -4,12 +4,13 @@ import ( "context" "testing" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/rabbitmq/config" ) var RabbitmqContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *config.RabbitmqOptions) (*config.RabbitmqOptions, error) { - rabbitmqHostOptions, err := NewRabbitMQTestContainers().CreatingContainerOptions(ctx, t) + return func(c *config.RabbitmqOptions, logger logger.Logger) (*config.RabbitmqOptions, error) { + rabbitmqHostOptions, err := NewRabbitMQTestContainers(logger).CreatingContainerOptions(ctx, t) c.RabbitmqHostOptions = rabbitmqHostOptions return c, err diff --git a/internal/pkg/test/containers/testcontainer/redis/redis_container.go b/internal/pkg/test/containers/testcontainer/redis/redis_container.go index 5ef7b87b..c2dcb052 100644 --- a/internal/pkg/test/containers/testcontainer/redis/redis_container.go +++ b/internal/pkg/test/containers/testcontainer/redis/redis_container.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" redis2 "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/redis" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/test/containers/contracts" @@ -19,9 +20,10 @@ import ( type redisTestContainers struct { container testcontainers.Container defaultOptions *contracts.RedisContainerOptions + logger logger.Logger } -func NewRedisTestContainers() contracts.RedisContainer { +func NewRedisTestContainers(l logger.Logger) contracts.RedisContainer { return &redisTestContainers{ defaultOptions: &contracts.RedisContainerOptions{ Port: "6379/tcp", @@ -32,6 +34,7 @@ func NewRedisTestContainers() contracts.RedisContainer { ImageName: "redis", Name: "redis-testcontainers", }, + logger: l, } } @@ -74,7 +77,7 @@ func (g *redisTestContainers) CreatingContainerOptions( return nil, err } - isConnectable := isConnectable(ctx, t, g.defaultOptions) + isConnectable := isConnectable(ctx, g.logger, g.defaultOptions) if !isConnectable { return g.CreatingContainerOptions(context.Background(), t, options...) } @@ -144,9 +147,7 @@ func (g *redisTestContainers) getRunOptions( return containerReq } -func isConnectable(ctx context.Context, t *testing.T, options *contracts.RedisContainerOptions) bool { - t.Helper() - +func isConnectable(ctx context.Context, logger logger.Logger, options *contracts.RedisContainerOptions) bool { redisClient := redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", options.Host, options.HostPort), }) @@ -155,18 +156,15 @@ func isConnectable(ctx context.Context, t *testing.T, options *contracts.RedisCo err := redisClient.Ping(ctx).Err() if err != nil { - t.Errorf( - fmt.Sprintf( - "Error in creating redis connection with %s", - fmt.Sprintf("%s:%d", options.Host, options.HostPort), - ), - ) + // we should not use `t.Error` or `t.Errorf` for logging errors because it will `fail` our test at the end and, we just should use logs without error like log.Error (not log.Fatal) + logger.Errorf( + "Error in creating redis connection with %s:%d", options.Host, options.HostPort) return false } - t.Logf( - "Opened redis connection on host: %s", - fmt.Sprintf("%s:%d", options.Host, options.HostPort), + + logger.Infof( + "Opened redis connection on host: %s:%d", options.Host, options.HostPort, ) return true diff --git a/internal/pkg/test/containers/testcontainer/redis/redis_container_test.go b/internal/pkg/test/containers/testcontainer/redis/redis_container_test.go index af95a9d4..07d0ea78 100644 --- a/internal/pkg/test/containers/testcontainer/redis/redis_container_test.go +++ b/internal/pkg/test/containers/testcontainer/redis/redis_container_test.go @@ -4,12 +4,16 @@ import ( "context" "testing" + defaultLogger "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger/default_logger" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func Test_Custom_Redis_Container(t *testing.T) { - redis, err := NewRedisTestContainers().Start(context.Background(), t) + defaultLogger.SetupDefaultLogger() + + redis, err := NewRedisTestContainers(defaultLogger.Logger).Start(context.Background(), t) require.NoError(t, err) assert.NotNil(t, redis) diff --git a/internal/pkg/test/containers/testcontainer/redis/redis_fx.go b/internal/pkg/test/containers/testcontainer/redis/redis_fx.go index ada14b07..418274a1 100644 --- a/internal/pkg/test/containers/testcontainer/redis/redis_fx.go +++ b/internal/pkg/test/containers/testcontainer/redis/redis_fx.go @@ -4,11 +4,12 @@ import ( "context" "testing" + "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/logger" "github.com/mehdihadeli/go-ecommerce-microservices/internal/pkg/redis" ) var RedisContainerOptionsDecorator = func(t *testing.T, ctx context.Context) interface{} { - return func(c *redis.RedisOptions) (*redis.RedisOptions, error) { - return NewRedisTestContainers().CreatingContainerOptions(ctx, t) + return func(c *redis.RedisOptions, logger logger.Logger) (*redis.RedisOptions, error) { + return NewRedisTestContainers(logger).CreatingContainerOptions(ctx, t) } } diff --git a/internal/services/catalog_read_service/go.mod b/internal/services/catalog_read_service/go.mod index f7ea3d05..5b9a9988 100644 --- a/internal/services/catalog_read_service/go.mod +++ b/internal/services/catalog_read_service/go.mod @@ -37,6 +37,7 @@ require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/Masterminds/squirrel v1.5.4 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2 // indirect github.com/ahmetb/go-linq/v3 v3.2.0 // indirect github.com/ajg/form v1.5.1 // indirect @@ -48,9 +49,11 @@ require ( github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/containerd/containerd v1.7.5 // indirect + github.com/containerd/continuity v0.4.2 // indirect github.com/cpuguy83/dockercfg v0.3.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/docker/cli v24.0.5+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v24.0.5+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect @@ -77,14 +80,15 @@ require ( github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/go-cmp v0.5.9 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.1 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/gorilla/websocket v1.4.2 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/imkira/go-interpol v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect @@ -122,11 +126,11 @@ require ( github.com/morikuni/aec v1.0.0 // indirect github.com/nolleh/caption_json_formatter v0.2.2 // indirect github.com/onsi/ginkgo v1.16.5 // indirect - github.com/onsi/gomega v1.27.10 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc4 // indirect github.com/opencontainers/runc v1.1.9 // indirect github.com/openzipkin/zipkin-go v0.4.2 // indirect + github.com/ory/dockertest/v3 v3.10.0 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/internal/services/catalog_read_service/go.sum b/internal/services/catalog_read_service/go.sum index 55b5187b..a88926a8 100644 --- a/internal/services/catalog_read_service/go.sum +++ b/internal/services/catalog_read_service/go.sum @@ -212,6 +212,7 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator v9.31.0+incompatible h1:UA72EPEogEnq76ehGdEDp4Mit+3FDh548oRqwVgNsHA= github.com/go-playground/validator v9.31.0+incompatible/go.mod h1:yrEkQXlcI+PugkyDjY2bRrL/UBU4f3rvrgkN3V8JEig= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= diff --git a/internal/services/catalog_read_service/internal/shared/app/test/test_app.go b/internal/services/catalog_read_service/internal/shared/app/test/test_app.go index aee9dd85..ca8518c1 100644 --- a/internal/services/catalog_read_service/internal/shared/app/test/test_app.go +++ b/internal/services/catalog_read_service/internal/shared/app/test/test_app.go @@ -2,7 +2,6 @@ package test import ( "context" - "fmt" "os" "testing" "time" @@ -103,7 +102,7 @@ func (a *TestApp) Run(t *testing.T) (result *TestAppResult) { defer cancel() err := testApp.Start(startCtx) if err != nil { - t.Log(fmt.Sprintf("Error starting, err: %v", err)) + t.Errorf("Error starting, err: %v", err) os.Exit(1) } diff --git a/internal/services/catalog_write_service/internal/shared/app/test/test_app.go b/internal/services/catalog_write_service/internal/shared/app/test/test_app.go index e42eb771..5652148a 100644 --- a/internal/services/catalog_write_service/internal/shared/app/test/test_app.go +++ b/internal/services/catalog_write_service/internal/shared/app/test/test_app.go @@ -2,7 +2,6 @@ package test import ( "context" - "fmt" "os" "testing" "time" @@ -102,7 +101,7 @@ func (a *TestApp) Run(t *testing.T) (result *TestAppResult) { defer cancel() err := testApp.Start(startCtx) if err != nil { - t.Log(fmt.Sprintf("Error starting, err: %v", err)) + t.Errorf("Error starting, err: %v", err) os.Exit(1) } diff --git a/internal/services/order_service/internal/shared/app/test/test_app.go b/internal/services/order_service/internal/shared/app/test/test_app.go index 8f16f9e2..7849d0ed 100644 --- a/internal/services/order_service/internal/shared/app/test/test_app.go +++ b/internal/services/order_service/internal/shared/app/test/test_app.go @@ -2,7 +2,6 @@ package test import ( "context" - "fmt" "os" "testing" "time" @@ -116,7 +115,7 @@ func (a *TestApp) Run(t *testing.T) (result *TestAppResult) { defer cancel() err := testApp.Start(startCtx) if err != nil { - t.Log(fmt.Sprintf("Error starting, err: %v", err)) + t.Errorf("Error starting, err: %v", err) os.Exit(1) }