mirror of
https://github.com/akvorado/akvorado.git
synced 2025-12-12 06:24:10 +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 (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"log"
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
|
|
||||||
"akvorado/common/helpers"
|
"akvorado/common/helpers"
|
||||||
"akvorado/common/reporter"
|
"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) {
|
func testSavedFilter(t *testing.T, c *Component) {
|
||||||
// Create
|
// Create
|
||||||
if err := c.CreateSavedFilter(context.Background(), SavedFilter{
|
if err := c.CreateSavedFilter(context.Background(), SavedFilter{
|
||||||
@@ -105,54 +101,53 @@ func testSavedFilter(t *testing.T, c *Component) {
|
|||||||
func TestSavedFilterSqlite(t *testing.T) {
|
func TestSavedFilterSqlite(t *testing.T) {
|
||||||
r := reporter.NewMock(t)
|
r := reporter.NewMock(t)
|
||||||
|
|
||||||
testSavedFilter(t, NewMock(t, r, DefaultConfiguration()))
|
testSavedFilter(t, NewMock(t, r, DefaultConfiguration()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSavedFilterPostgres(t *testing.T) {
|
func TestSavedFilterPostgres(t *testing.T) {
|
||||||
r := reporter.NewMock(t)
|
server := helpers.CheckExternalService(t, "Postgresql", []string{"postgres:5432", "127.0.0.1:5432"})
|
||||||
ctx := context.Background()
|
server, serverPort, err := net.SplitHostPort(server)
|
||||||
|
|
||||||
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)),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to start container: %s", err)
|
t.Fatalf("failed to parse server:\n%+v", 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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r := reporter.NewMock(t)
|
||||||
|
dsn := fmt.Sprintf(
|
||||||
|
"host=%s port=%s user=akvorado password=akpass dbname=akvorado sslmode=disable",
|
||||||
|
server, serverPort)
|
||||||
c := NewMock(
|
c := NewMock(
|
||||||
t,
|
t,
|
||||||
r,
|
r,
|
||||||
Configuration{
|
Configuration{
|
||||||
Driver: "postgresql",
|
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) {
|
func TestPopulateSavedFilters(t *testing.T) {
|
||||||
|
|||||||
@@ -32,6 +32,22 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 127.0.0.1:6379:6379/tcp
|
- 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
|
clickhouse: &clickhouse
|
||||||
extends:
|
extends:
|
||||||
file: versions.yml
|
file: versions.yml
|
||||||
|
|||||||
@@ -29,3 +29,5 @@ services:
|
|||||||
# for tests
|
# for tests
|
||||||
srlinux:
|
srlinux:
|
||||||
image: ghcr.io/nokia/srlinux:23.7.1
|
image: ghcr.io/nokia/srlinux:23.7.1
|
||||||
|
postgres:
|
||||||
|
image: docker.io/postgres:16-alpine
|
||||||
|
|||||||
Reference in New Issue
Block a user