mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-27 01:51:30 +02:00
100 lines
2.4 KiB
Go
100 lines
2.4 KiB
Go
//go:build integration
|
|
|
|
package networkmap_pgsql
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db"
|
|
networkmap_pgsql "github.com/netbirdio/netbird/management/internals/network_map_db/pgsql"
|
|
networkmap_sqlite "github.com/netbirdio/netbird/management/internals/network_map_db/sqlite"
|
|
"github.com/netbirdio/netbird/management/server/types"
|
|
)
|
|
|
|
//go:embed base_data.sql
|
|
var baseData string
|
|
|
|
var (
|
|
pgstore *networkmap_pgsql.PgStore
|
|
sqlitestore *networkmap_sqlite.SqliteStore
|
|
engine string
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
var cleanup func()
|
|
kind, _ := os.LookupEnv("NETBIRD_STORE_ENGINE")
|
|
switch kind {
|
|
case string(types.PostgresStoreEngine):
|
|
engine = string(types.PostgresStoreEngine)
|
|
pgstore, cleanup = createPGTestStore(baseData)
|
|
pgstore.UsingTimeZone(time.UTC)
|
|
case "", string(types.SqliteStoreEngine):
|
|
engine = string(types.SqliteStoreEngine)
|
|
sqlitestore, cleanup = createSqliteTestStore(baseData)
|
|
default:
|
|
log.Fatalf("unsupported db '%s' in NETBIRD_STORE_ENGINE env var", kind)
|
|
}
|
|
|
|
code := m.Run()
|
|
|
|
cleanup()
|
|
os.Exit(code)
|
|
}
|
|
|
|
func conn(t *testing.T, ctx context.Context) networkmapdb.NetworkMapDBStoreConn {
|
|
t.Helper()
|
|
switch engine {
|
|
case string(types.PostgresStoreEngine):
|
|
c, err := pgstore.Pool.Acquire(ctx)
|
|
assert.NoError(t, err)
|
|
return pgstore.UsingConnection(c.Conn())
|
|
case string(types.SqliteStoreEngine):
|
|
return sqlitestore.UsingConn()
|
|
}
|
|
log.Fatalf("unknown db engine kind %s", engine)
|
|
return nil
|
|
}
|
|
|
|
func store(t *testing.T) networkmapdb.NetworkMapDBStore {
|
|
t.Helper()
|
|
switch engine {
|
|
case string(types.PostgresStoreEngine):
|
|
return pgstore
|
|
case string(types.SqliteStoreEngine):
|
|
return sqlitestore
|
|
}
|
|
log.Fatalf("unknown db engine kind %s", engine)
|
|
return nil
|
|
}
|
|
|
|
func execQuery(t *testing.T, ctx context.Context, q string) {
|
|
t.Helper()
|
|
switch engine {
|
|
case string(types.PostgresStoreEngine):
|
|
_, err := pgstore.Pool.Exec(ctx, q)
|
|
assert.NoError(t, err)
|
|
case string(types.SqliteStoreEngine):
|
|
_, err := sqlitestore.Db.ExecContext(ctx, q)
|
|
assert.NoError(t, err)
|
|
}
|
|
}
|
|
|
|
// use to parse time in time.RFC3339Nano format
|
|
// returns the time in the UTC time zone
|
|
func mustParseTime(t string) *time.Time {
|
|
tt, err := time.Parse(time.RFC3339Nano, t)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
utc := tt.UTC()
|
|
return &utc
|
|
}
|