Skip to content

Commit

Permalink
refactor: ♻️ some refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
mehdihadeli committed Sep 17, 2023
1 parent 40809bd commit fdd13ef
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 62 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@ proto:

.PHONY: unit-test
unit-test:
@./scripts/test.sh catalog_write_service unit
@./scripts/test.sh catalog_read_service unit
@./scripts/test.sh catalog_write_service unit
@./scripts/test.sh order_service unit

.PHONY: integration-test
integration-test:
@./scripts/test.sh catalog_write_service integration
@./scripts/test.sh catalog_read_service integration
@./scripts/test.sh catalog_write_service integration
@./scripts/test.sh order_service integration

.PHONY: e2e-test
Expand Down
104 changes: 51 additions & 53 deletions internal/pkg/test/containers/dockertest/rabbitmq/rabbitmq_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,39 @@ import (
type rabbitmqDockerTest struct {
resource *dockertest.Resource
defaultOptions *contracts.RabbitMQContainerOptions
pool *dockertest.Pool
}

func (g *rabbitmqDockerTest) CreatingContainerOptions(
ctx context.Context,
t *testing.T,
options ...*contracts.RabbitMQContainerOptions,
) (*config.RabbitmqHostOptions, error) {
return nil, nil
}

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) {
func NewRabbitMQDockerTest() contracts.RabbitMQContainer {
pool, err := dockertest.NewPool("")
if err != nil {
log.Fatalf("Could not connect to docker: %s", err)
}

return &rabbitmqDockerTest{
defaultOptions: &contracts.RabbitMQContainerOptions{
Ports: []string{"5672", "15672"},
Host: "localhost",
VirtualHost: "",
UserName: "dockertest",
Password: "dockertest",
Tag: "management",
ImageName: "rabbitmq",
Name: "rabbitmq-dockertest",
},
pool: pool,
}
}

func (g *rabbitmqDockerTest) CreatingContainerOptions(
ctx context.Context,
t *testing.T,
options ...*contracts.RabbitMQContainerOptions,
) (*config.RabbitmqHostOptions, error) {
runOptions := g.getRunOptions(options...)

// pull mongodb docker image for version 5.0
resource, err := pool.RunWithOptions(runOptions, func(config *docker.HostConfig) {
resource, err := g.pool.RunWithOptions(runOptions, func(config *docker.HostConfig) {
// set AutoRemove to true so that stopped container goes away by itself
config.AutoRemove = true
config.RestartPolicy = docker.RestartPolicy{
Expand All @@ -65,33 +71,41 @@ func (g *rabbitmqDockerTest) Start(
) // Tell docker to hard kill the container in 120 seconds exponential backoff-retry, because the application_exceptions in the container might not be ready to accept connections yet

g.resource = resource
i, err := strconv.Atoi(
hostPort, err := strconv.Atoi(
resource.GetPort(fmt.Sprintf("%s/tcp", g.defaultOptions.Ports[0])),
) // 5672
g.defaultOptions.HostPort = i
g.defaultOptions.HostPort = hostPort

t.Cleanup(func() { _ = resource.Close() })

go func() {
for {
select {
case <-ctx.Done():
_ = resource.Close()
return
}
}
}()
opt := &config.RabbitmqHostOptions{
UserName: g.defaultOptions.UserName,
Password: g.defaultOptions.Password,
HostName: g.defaultOptions.Host,
VirtualHost: g.defaultOptions.VirtualHost,
Port: g.defaultOptions.HostPort,
}

return opt, nil
}

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) {
rabbitmqHostOptions, err := g.CreatingContainerOptions(ctx, t, options...)
if err != nil {
return nil, err
}

var mqBus bus.Bus
if err = pool.Retry(func() error {
if err := g.pool.Retry(func() error {
config := &config.RabbitmqOptions{
RabbitmqHostOptions: &config.RabbitmqHostOptions{
UserName: g.defaultOptions.UserName,
Password: g.defaultOptions.Password,
HostName: g.defaultOptions.Host,
VirtualHost: g.defaultOptions.VirtualHost,
Port: g.defaultOptions.HostPort,
},
RabbitmqHostOptions: rabbitmqHostOptions,
}
conn, err := types.NewRabbitMQConnection(config)
if err != nil {
Expand All @@ -118,23 +132,7 @@ func (g *rabbitmqDockerTest) Start(
}

func (g *rabbitmqDockerTest) Cleanup(ctx context.Context) error {
// TODO implement me
panic("implement me")
}

func NewRabbitMQDockerTest() contracts.RabbitMQContainer {
return &rabbitmqDockerTest{
defaultOptions: &contracts.RabbitMQContainerOptions{
Ports: []string{"5672", "15672"},
Host: "localhost",
VirtualHost: "",
UserName: "dockertest",
Password: "dockertest",
Tag: "management",
ImageName: "rabbitmq",
Name: "rabbitmq-dockertest",
},
}
return nil
}

func (g *rabbitmqDockerTest) getRunOptions(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type rabbitmqTestContainers struct {
func NewRabbitMQTestContainers() contracts.RabbitMQContainer {
return &rabbitmqTestContainers{
defaultOptions: &contracts.RabbitMQContainerOptions{
Ports: []string{"5672/tcp", "15672/tcp", "15671/tcp", "25672/tcp", "5671/tcp"},
Ports: []string{"5672/tcp", "15672/tcp"},
Host: "localhost",
VirtualHost: "/",
UserName: "guest",
Expand Down Expand Up @@ -69,12 +69,10 @@ func (g *rabbitmqTestContainers) CreatingContainerOptions(

// Clean up the container after the test is complete
t.Cleanup(func() {
if dbContainer.IsRunning() {
if err := dbContainer.Terminate(ctx); err != nil {
t.Fatalf("failed to terminate container: %s", err)
}
time.Sleep(time.Second * 1)
if err := dbContainer.Terminate(ctx); err != nil {
t.Fatalf("failed to terminate container: %s", err)
}
time.Sleep(time.Second * 1)
})

// get a free random host port for rabbitmq `Tcp Port`
Expand Down Expand Up @@ -231,7 +229,6 @@ func isConnectable(t *testing.T, options *contracts.RabbitMQContainerOptions) bo
}

func logError(t *testing.T, userName string, password string, host string, hostPort int) {
t.Helper()
t.Errorf(
fmt.Sprintf(
"Error in creating rabbitmq connection with %s",
Expand Down
2 changes: 2 additions & 0 deletions internal/services/catalog_read_service/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ 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/uuid v1.3.1 // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect
Expand Down Expand Up @@ -121,6 +122,7 @@ 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
Expand Down

0 comments on commit fdd13ef

Please sign in to comment.