mirror of
https://github.com/akvorado/akvorado.git
synced 2025-12-11 22:14:02 +01:00
console/database: use docker-compose for postgresql testing
This commit is contained in:
committed by
Vincent Bernat
parent
d998388d06
commit
e2cf908179
@@ -5,19 +5,15 @@ package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"akvorado/common/helpers"
|
||||
"akvorado/common/reporter"
|
||||
|
||||
"github.com/testcontainers/testcontainers-go"
|
||||
"github.com/testcontainers/testcontainers-go/modules/postgres"
|
||||
"github.com/testcontainers/testcontainers-go/wait"
|
||||
)
|
||||
|
||||
|
||||
func testSavedFilter(t *testing.T, c *Component) {
|
||||
// Create
|
||||
if err := c.CreateSavedFilter(context.Background(), SavedFilter{
|
||||
@@ -105,54 +101,53 @@ func testSavedFilter(t *testing.T, c *Component) {
|
||||
func TestSavedFilterSqlite(t *testing.T) {
|
||||
r := reporter.NewMock(t)
|
||||
|
||||
testSavedFilter(t, NewMock(t, r, DefaultConfiguration()))
|
||||
testSavedFilter(t, NewMock(t, r, DefaultConfiguration()))
|
||||
}
|
||||
|
||||
func TestSavedFilterPostgres(t *testing.T) {
|
||||
r := reporter.NewMock(t)
|
||||
ctx := context.Background()
|
||||
|
||||
dbName := "akvorado"
|
||||
dbUser := "akvorado"
|
||||
dbPassword := "akpass"
|
||||
|
||||
postgresContainer, err := postgres.RunContainer(ctx,
|
||||
testcontainers.WithImage("docker.io/postgres:16-alpine"),
|
||||
postgres.WithDatabase(dbName),
|
||||
postgres.WithUsername(dbUser),
|
||||
postgres.WithPassword(dbPassword),
|
||||
testcontainers.WithWaitStrategy(
|
||||
wait.ForLog("database system is ready to accept connections").
|
||||
WithOccurrence(2).
|
||||
WithStartupTimeout(5*time.Second)),
|
||||
)
|
||||
server := helpers.CheckExternalService(t, "Postgresql", []string{"postgres:5432", "127.0.0.1:5432"})
|
||||
server, serverPort, err := net.SplitHostPort(server)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to start container: %s", err)
|
||||
}
|
||||
|
||||
// Clean up the container
|
||||
defer func() {
|
||||
if err := postgresContainer.Terminate(ctx); err != nil {
|
||||
log.Fatalf("failed to terminate container: %s", err)
|
||||
}
|
||||
}()
|
||||
|
||||
dsn, err := postgresContainer.ConnectionString(ctx)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get postgres connection string: %s", err)
|
||||
t.Fatalf("failed to parse server:\n%+v", err)
|
||||
}
|
||||
|
||||
r := reporter.NewMock(t)
|
||||
dsn := fmt.Sprintf(
|
||||
"host=%s port=%s user=akvorado password=akpass dbname=akvorado sslmode=disable",
|
||||
server, serverPort)
|
||||
c := NewMock(
|
||||
t,
|
||||
r,
|
||||
Configuration{
|
||||
Driver: "postgresql",
|
||||
DSN: dsn,
|
||||
DSN: dsn,
|
||||
},
|
||||
)
|
||||
|
||||
testSavedFilter(t, c)
|
||||
// clean database for future tests
|
||||
t.Cleanup(func() {
|
||||
db, err := sql.Open("pgx", dsn)
|
||||
if err != nil {
|
||||
t.Fatalf("sql.Open() error:\n%+v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
if _, err := db.Exec(`
|
||||
DO $$ DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
-- if the schema you operate on is not "current", you will want to
|
||||
-- replace current_schema() in query with 'schematodeletetablesfrom'
|
||||
-- *and* update the generate 'DROP...' accordingly.
|
||||
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
|
||||
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
|
||||
END LOOP;
|
||||
END $$;
|
||||
`); err != nil {
|
||||
t.Fatalf("db.Exec() error:\n%+v", err)
|
||||
}
|
||||
})
|
||||
|
||||
testSavedFilter(t, c)
|
||||
}
|
||||
|
||||
func TestPopulateSavedFilters(t *testing.T) {
|
||||
|
||||
@@ -32,6 +32,22 @@ services:
|
||||
ports:
|
||||
- 127.0.0.1:6379:6379/tcp
|
||||
|
||||
postgres:
|
||||
extends:
|
||||
file: versions.yml
|
||||
service: postgres
|
||||
environment:
|
||||
POSTGRES_PASSWORD: akpass
|
||||
POSTGRES_USER: akvorado
|
||||
POSTGRES_DB: akvorado
|
||||
ports:
|
||||
- 127.0.0.1:5432:5432/tcp
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U akvorado -d akvorado"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
clickhouse: &clickhouse
|
||||
extends:
|
||||
file: versions.yml
|
||||
|
||||
@@ -29,3 +29,5 @@ services:
|
||||
# for tests
|
||||
srlinux:
|
||||
image: ghcr.io/nokia/srlinux:23.7.1
|
||||
postgres:
|
||||
image: docker.io/postgres:16-alpine
|
||||
|
||||
Reference in New Issue
Block a user