Skip to content

Commit

Permalink
chore(test): use testcontainers modules (#1164)
Browse files Browse the repository at this point in the history
  • Loading branch information
0xERR0R committed Sep 22, 2023
1 parent 3dc0ca1 commit bcff170
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 80 deletions.
92 changes: 38 additions & 54 deletions e2e/containers.go
Expand Up @@ -21,6 +21,9 @@ import (
"github.com/miekg/dns"
"github.com/onsi/ginkgo/v2"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/modules/mariadb"
"github.com/testcontainers/testcontainers-go/modules/postgres"
"github.com/testcontainers/testcontainers-go/modules/redis"
"github.com/testcontainers/testcontainers-go/wait"
)

Expand All @@ -29,8 +32,8 @@ var NetworkName = fmt.Sprintf("blocky-e2e-network_%d", time.Now().Unix())

const (
redisImage = "redis:7"
postgresImage = "postgres:15"
mariaDBImage = "mariadb:10"
postgresImage = "postgres:15.2-alpine"
mariaDBImage = "mariadb:11"
mokaImage = "ghcr.io/0xerr0r/dns-mokka:0.2.0"
staticServerImage = "halverneus/static-file-server:latest"
blockyImage = "blocky-e2e"
Expand Down Expand Up @@ -95,71 +98,52 @@ func createHTTPServerContainer(alias string, tmpDir *helpertest.TmpFolder,
})
}

func createRedisContainer() (testcontainers.Container, error) {
ctx := context.Background()

req := testcontainers.ContainerRequest{
Image: redisImage,
Networks: []string{NetworkName},
ExposedPorts: []string{"6379/tcp"},
NetworkAliases: map[string][]string{NetworkName: {"redis"}},
WaitingFor: wait.ForExposedPort(),
func WithNetwork(network string) testcontainers.CustomizeRequestOption {
return func(req *testcontainers.GenericContainerRequest) {
req.NetworkAliases = map[string][]string{NetworkName: {network}}
req.Networks = []string{NetworkName}
}
}

container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
func createRedisContainer() (*redis.RedisContainer, error) {
ctx := context.Background()

return container, err
return redis.RunContainer(ctx,
testcontainers.WithImage(redisImage),
redis.WithLogLevel(redis.LogLevelVerbose),
WithNetwork("redis"),
)
}

func createPostgresContainer() (testcontainers.Container, error) {
func createPostgresContainer() (*postgres.PostgresContainer, error) {
ctx := context.Background()

req := testcontainers.ContainerRequest{
Image: postgresImage,
Networks: []string{NetworkName},
ExposedPorts: []string{"5432/tcp"},
NetworkAliases: map[string][]string{NetworkName: {"postgres"}},
Env: map[string]string{
"POSTGRES_USER": "user",
"POSTGRES_PASSWORD": "user",
},
WaitingFor: wait.ForExposedPort(),
}
const waitLogOccurrence = 2

container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
return postgres.RunContainer(ctx,
testcontainers.WithImage(postgresImage),

return container, err
postgres.WithDatabase("user"),
postgres.WithUsername("user"),
postgres.WithPassword("user"),
testcontainers.WithWaitStrategy(
wait.ForLog("database system is ready to accept connections").
WithOccurrence(waitLogOccurrence).
WithStartupTimeout(startupTimeout)),
WithNetwork("postgres"),
)
}

func createMariaDBContainer() (testcontainers.Container, error) {
func createMariaDBContainer() (*mariadb.MariaDBContainer, error) {
ctx := context.Background()

req := testcontainers.ContainerRequest{
Image: mariaDBImage,
Networks: []string{NetworkName},
ExposedPorts: []string{"3306/tcp"},
NetworkAliases: map[string][]string{NetworkName: {"mariaDB"}},
Env: map[string]string{
"MARIADB_USER": "user",
"MARIADB_PASSWORD": "user",
"MARIADB_DATABASE": "user",
"MARIADB_ROOT_PASSWORD": "user",
},
WaitingFor: wait.ForAll(wait.ForLog("ready for connections"), wait.ForExposedPort()),
}

container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})

return container, err
return mariadb.RunContainer(ctx,
testcontainers.WithImage(mariaDBImage),
mariadb.WithDatabase("user"),
mariadb.WithUsername("user"),
mariadb.WithPassword("user"),
WithNetwork("mariaDB"),
)
}

const (
Expand Down
42 changes: 22 additions & 20 deletions e2e/querylog_test.go
@@ -1,21 +1,24 @@
package e2e

import (
"fmt"
"net"
"context"

"github.com/0xERR0R/blocky/util"
"github.com/miekg/dns"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/testcontainers/testcontainers-go"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"github.com/testcontainers/testcontainers-go/modules/mariadb"
"github.com/testcontainers/testcontainers-go/modules/postgres"
mysqlDriver "gorm.io/driver/mysql"
postgresDriver "gorm.io/driver/postgres"
"gorm.io/gorm"
)

var _ = Describe("Query logs functional tests", func() {
var blocky, moka, database testcontainers.Container
var blocky, moka testcontainers.Container
var postgresDB *postgres.PostgresContainer
var mariaDB *mariadb.MariaDBContainer
var db *gorm.DB
var err error

Expand All @@ -28,9 +31,9 @@ var _ = Describe("Query logs functional tests", func() {

Describe("Query logging into the mariaDB database", func() {
BeforeEach(func() {
database, err = createMariaDBContainer()
mariaDB, err = createMariaDBContainer()
Expect(err).Should(Succeed())
DeferCleanup(database.Terminate)
DeferCleanup(mariaDB.Terminate)

blocky, err = createBlockyContainer(tmpDir,
"log:",
Expand All @@ -48,17 +51,17 @@ var _ = Describe("Query logs functional tests", func() {
Expect(err).Should(Succeed())
DeferCleanup(blocky.Terminate)

dbHost, dbPort, err := getContainerHostPort(database, "3306/tcp")

Expect(err).Should(Succeed())

dsn := fmt.Sprintf("user:user@tcp(%s)/user?charset=utf8mb4&parseTime=True&loc=Local",
net.JoinHostPort(dbHost, dbPort))
connectionString, err := mariaDB.ConnectionString(context.Background(),
"tls=false", "charset=utf8mb4", "parseTime=True", "loc=Local")
Expect(err).Should(Succeed())

// database might be slow on first start, retry here if necessary
Eventually(gorm.Open, "10s", "1s").WithArguments(mysql.Open(dsn), &gorm.Config{}).Should(Not(BeNil()))
Eventually(gorm.Open, "10s", "1s").
WithArguments(mysqlDriver.Open(connectionString), &gorm.Config{}).Should(Not(BeNil()))

db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
db, err = gorm.Open(mysqlDriver.Open(connectionString), &gorm.Config{})
Expect(err).Should(Succeed())

Eventually(countEntries).WithArguments(db).Should(BeNumerically("==", 0))
Expand Down Expand Up @@ -106,9 +109,9 @@ var _ = Describe("Query logs functional tests", func() {

Describe("Query logging into the postgres database", func() {
BeforeEach(func() {
database, err = createPostgresContainer()
postgresDB, err = createPostgresContainer()
Expect(err).Should(Succeed())
DeferCleanup(database.Terminate)
DeferCleanup(postgresDB.Terminate)

blocky, err = createBlockyContainer(tmpDir,
"log:",
Expand All @@ -126,15 +129,14 @@ var _ = Describe("Query logs functional tests", func() {
Expect(err).Should(Succeed())
DeferCleanup(blocky.Terminate)

dbHost, dbPort, err := getContainerHostPort(database, "5432/tcp")
connectionString, err := postgresDB.ConnectionString(context.Background(), "sslmode=disable")
Expect(err).Should(Succeed())

dsn := fmt.Sprintf("postgres://user:user@%s/user", net.JoinHostPort(dbHost, dbPort))

// database might be slow on first start, retry here if necessary
Eventually(gorm.Open, "10s", "1s").WithArguments(postgres.Open(dsn), &gorm.Config{}).Should(Not(BeNil()))
Eventually(gorm.Open, "10s", "1s").
WithArguments(postgresDriver.Open(connectionString), &gorm.Config{}).Should(Not(BeNil()))

db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
db, err = gorm.Open(postgresDriver.Open(connectionString), &gorm.Config{})
Expect(err).Should(Succeed())

Eventually(countEntries).WithArguments(db).Should(BeNumerically("==", 0))
Expand Down
12 changes: 8 additions & 4 deletions e2e/redis_test.go
Expand Up @@ -2,18 +2,20 @@ package e2e

import (
"context"
"net"
"strings"

. "github.com/0xERR0R/blocky/helpertest"
"github.com/0xERR0R/blocky/util"
"github.com/go-redis/redis/v8"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/testcontainers/testcontainers-go"
redisTc "github.com/testcontainers/testcontainers-go/modules/redis"
)

var _ = Describe("Redis configuration tests", func() {
var blocky1, blocky2, redisDB, moka testcontainers.Container
var blocky1, blocky2, moka testcontainers.Container
var redisDB *redisTc.RedisContainer
var redisClient *redis.Client
var err error

Expand All @@ -23,11 +25,13 @@ var _ = Describe("Redis configuration tests", func() {
Expect(err).Should(Succeed())
DeferCleanup(redisDB.Terminate)

dbHost, dbPort, err := getContainerHostPort(redisDB, "6379/tcp")
redisConnectionString, err := redisDB.ConnectionString(context.Background())
Expect(err).Should(Succeed())

redisConnectionString = strings.ReplaceAll(redisConnectionString, "redis://", "")

redisClient = redis.NewClient(&redis.Options{
Addr: net.JoinHostPort(dbHost, dbPort),
Addr: redisConnectionString,
})

Expect(dbSize(redisClient)).Should(BeNumerically("==", 0))
Expand Down
5 changes: 4 additions & 1 deletion go.mod
Expand Up @@ -43,6 +43,9 @@ require (
github.com/dosgo/zigtool v0.0.0-20210923085854-9c6fc1d62198
github.com/oapi-codegen/runtime v1.0.0
github.com/testcontainers/testcontainers-go v0.24.1
github.com/testcontainers/testcontainers-go/modules/mariadb v0.24.0
github.com/testcontainers/testcontainers-go/modules/postgres v0.24.0
github.com/testcontainers/testcontainers-go/modules/redis v0.24.0
mvdan.cc/gofumpt v0.5.0
)

Expand Down Expand Up @@ -102,7 +105,7 @@ require (
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
Expand Down
11 changes: 10 additions & 1 deletion go.sum
Expand Up @@ -100,8 +100,9 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
Expand Down Expand Up @@ -173,6 +174,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
Expand Down Expand Up @@ -294,6 +297,12 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/testcontainers/testcontainers-go/modules/mariadb v0.24.0 h1:CBVunwOa8KR6K7zvBk4fcuYycHeihpL9TXk9/RbDAAI=
github.com/testcontainers/testcontainers-go/modules/mariadb v0.24.0/go.mod h1:QPFR1NTb5FEkiJBpam93iGckjdnhrfB1UU6SLomf5MA=
github.com/testcontainers/testcontainers-go/modules/postgres v0.24.0 h1:6ydG7zM7yvedjPLsh0CKeML8GBNsblTochsQ64RBflg=
github.com/testcontainers/testcontainers-go/modules/postgres v0.24.0/go.mod h1:NrbkZKxCgwQKgfCnvSykWJDkJ5Pf6zAtfEE2TG1I5EY=
github.com/testcontainers/testcontainers-go/modules/redis v0.24.0 h1:HNRrB+vfK5Fks0BoGVwG/qcMaQpaz4niOrNNfnQX0yU=
github.com/testcontainers/testcontainers-go/modules/redis v0.24.0/go.mod h1:xbTT/43uJ6pgg9hFBsBDdH/FLDo8gjkkOPAWWGVqSPg=
github.com/testcontainers/testcontainers-go v0.24.1 h1:gJdZuQIVWnMJTo+CmQMEP7/CAagNk/0jbcUPn3OWvD8=
github.com/testcontainers/testcontainers-go v0.24.1/go.mod h1:MGBiAkCm86yXQoCiipmQCqZLVdk1uFqtMqaU1Or0MRk=
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
Expand Down

0 comments on commit bcff170

Please sign in to comment.