mirror of https://github.com/0xERR0R/blocky.git
chore(test): use testcontainers modules (#1164)
This commit is contained in:
parent
3dc0ca1885
commit
bcff170a94
|
@ -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"
|
||||
)
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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,
|
||||
})
|
||||
|
||||
return container, err
|
||||
}
|
||||
|
||||
func createPostgresContainer() (testcontainers.Container, error) {
|
||||
func createRedisContainer() (*redis.RedisContainer, 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(),
|
||||
}
|
||||
|
||||
container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
|
||||
ContainerRequest: req,
|
||||
Started: true,
|
||||
})
|
||||
|
||||
return container, err
|
||||
return redis.RunContainer(ctx,
|
||||
testcontainers.WithImage(redisImage),
|
||||
redis.WithLogLevel(redis.LogLevelVerbose),
|
||||
WithNetwork("redis"),
|
||||
)
|
||||
}
|
||||
|
||||
func createMariaDBContainer() (testcontainers.Container, error) {
|
||||
func createPostgresContainer() (*postgres.PostgresContainer, 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()),
|
||||
}
|
||||
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() (*mariadb.MariaDBContainer, error) {
|
||||
ctx := context.Background()
|
||||
|
||||
return mariadb.RunContainer(ctx,
|
||||
testcontainers.WithImage(mariaDBImage),
|
||||
mariadb.WithDatabase("user"),
|
||||
mariadb.WithUsername("user"),
|
||||
mariadb.WithPassword("user"),
|
||||
WithNetwork("mariaDB"),
|
||||
)
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -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:",
|
||||
|
@ -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))
|
||||
|
@ -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:",
|
||||
|
@ -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))
|
||||
|
|
|
@ -2,7 +2,7 @@ package e2e
|
|||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
. "github.com/0xERR0R/blocky/helpertest"
|
||||
"github.com/0xERR0R/blocky/util"
|
||||
|
@ -10,10 +10,12 @@ import (
|
|||
. "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
|
||||
|
||||
|
@ -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))
|
||||
|
|
5
go.mod
5
go.mod
|
@ -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
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
|
|
11
go.sum
11
go.sum
|
@ -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=
|
||||
|
@ -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=
|
||||
|
@ -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=
|
||||
|
|
Loading…
Reference in New Issue