Skip to content

Repository files navigation

Docker Test

Master CIGoDoc

hard working man

This is a Go library to run database containers as part of running the integration tests. The following databases are supported:

  • Postgres
  • MongoDB - DocumentDB

How to use

Running Postgres container

An example of running postgres container is present in this project. See the following files:

Running MongoDB container

Integration test snipppet

funcTestPublishAppStatus_WithInvalidAppPlatformReturnBadRequestResponse(t*testing.T) {
t.Logf("Given the app status api is up and running")
{
platform:="dummy"t.Logf("\tWhen Sending Publish App status request to endpoint with unsupported platform value: \"%s\"", platform)
{
mockUnleash:=test.GetMockUnleashClient(t)
handler:=NewAppStatusHandler(Repository, mockUnleash)
router:=handler.CreateRouter()
version:="1.0"body:= model.ReleaseRequest{Version: version, Platform: platform}
req, err:=test.HttpRequest(body, "/status", http.MethodPost, test.ValidToken)
w:=httptest.NewRecorder()
router.ServeHTTP(w, req)
// check call successtest.Ok(err, t)
ifw.Code==http.StatusBadRequest {
t.Logf("\t\tShould receive a \"%d\" status. %v", http.StatusBadRequest, test.CheckMark)
} else {
t.Errorf("\t\tShould receive a \"%d\" status. %v %v", http.StatusBadRequest, test.BallotX, w.Code)
}
}
}
}

In the same package include a test file with the name: init_test.go and include the following

import (
"github.com/akhettar/app-features-manager/repository""context""flag""github.com/akhettar/docker-db""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options""log""net/http/httptest""os""testing"
)
constProfileEnvVar="PROFILE"var (
// The repository instance configured to run against the Docker DB Test containerRepository*repository.MongoRepository
)
// TestFixture wraps all tests with the needed initialized mock DB and fixtures// This test runs before other integration test. It starts an instance of mongo db in the background (provided you have mongo// installed on the server on which this test will be running) and shuts it down.funcTestMain(m*testing.M) {
container:=dbtest.StartMongoContainer()
log.Printf("running mongo with Ip %s", container.Host())
uri:=fmt.Sprintf("mongodb://%s:%d", container.Host(), container.Port())
clientOptions:=options.Client().ApplyURI(uri)
client, err:=mongo.Connect(context.TODO(), clientOptions)
iferr!=nil {
panic(err)
}
// Check the connectionerr=client.Ping(context.TODO(), nil)
iferr!=nil {
log.Fatal(err)
}
Repository=&repository.MongoRepository{client, repository.DBInfo{uri, repository.DefaultDBName, repository.DefaultCollection}}
// Run the test suiteretCode:=m.Run()
c.Destroy()
// call with result of m.Run()os.Exit(retCode)
}

License

MIT

About

Run DB as docker container for integration tests

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages