mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-09 15:09:08 +02:00
started moving pg-specific nmap tests to integration_tests/management/network_map_db/pgsql
Signed-off-by: Dmitri Dolguikh <dmitri.external@netbird.io>
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
package networkmap_pgsql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
networkmap_pgsql "github.com/netbirdio/netbird/management/internals/network_map_db/pgsql"
|
||||||
|
"github.com/netbirdio/netbird/shared/management/networkmap/nmdata"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestXXX(t *testing.T) {
|
||||||
|
ctx := context.TODO()
|
||||||
|
|
||||||
|
s, err := networkmap_pgsql.NewPostgresqlStore(ctx, dsn)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = s.Pool.Query(ctx,
|
||||||
|
"insert into accounts (id) VALUES('account-id-1')")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = s.Pool.Query(ctx,
|
||||||
|
"insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-1','account-id-1','test-group-1', '[{\"ID\":\"host-id-1\",\"Type\":\"host\"}]','public-id-1')")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = s.Pool.Query(ctx,
|
||||||
|
"insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-2','account-id-1','test-group-2', '[{\"ID\":\"subnet-id-1\",\"Type\":\"subnet\"}, {\"ID\":\"host-id-2\",\"Type\":\"host\"}]','public-id-2')")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
groups, err := s.GetGroups(ctx, "account-id-1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Contains(t,
|
||||||
|
groups,
|
||||||
|
nmdata.Group{Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "host-id-1", Type: "host"}}},
|
||||||
|
)
|
||||||
|
assert.Contains(t,
|
||||||
|
groups,
|
||||||
|
nmdata.Group{Name: "test-group-2", PublicID: "public-id-2", Resources: []nmdata.Resource{{ID: "subnet-id-1", Type: "subnet"}, {ID: "host-id-2", Type: "host"}}},
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
package networkmap_pgsql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"gorm.io/driver/postgres"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
gormstore "github.com/netbirdio/netbird/management/server/store"
|
||||||
|
"github.com/netbirdio/netbird/management/server/testutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
var dsn string
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
_, tmpdsn, err := testutil.CreatePostgresTestContainer()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error starting postres container %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var db *gorm.DB
|
||||||
|
for i := range 5 {
|
||||||
|
db, err = gorm.Open(postgres.Open(tmpdsn), &gorm.Config{})
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if i < 5 {
|
||||||
|
waitTime := time.Duration(100*(i+1)) * time.Millisecond
|
||||||
|
time.Sleep(waitTime)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Fatalf("error connecting to postres db %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var cleanup func()
|
||||||
|
dsn, cleanup, err = createRandomDB(tmpdsn, db)
|
||||||
|
sqlDB, _ := db.DB()
|
||||||
|
if sqlDB != nil {
|
||||||
|
sqlDB.Close()
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error creating postres db %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = gormstore.NewPostgresqlStoreForTests(context.TODO(), dsn, nil, false)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error running migrations %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
code := m.Run()
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
|
||||||
|
os.Exit(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createRandomDB(dsn string, db *gorm.DB) (string, func(), error) {
|
||||||
|
dbName := fmt.Sprintf("test_db_%s", strings.ReplaceAll(uuid.New().String(), "-", "_"))
|
||||||
|
|
||||||
|
if err := db.Exec(fmt.Sprintf("CREATE DATABASE %s", dbName)).Error; err != nil {
|
||||||
|
return "", nil, fmt.Errorf("failed to create database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
originalDSN := dsn
|
||||||
|
|
||||||
|
cleanup := func() {
|
||||||
|
var dropDB *gorm.DB
|
||||||
|
var err error
|
||||||
|
|
||||||
|
dropDB, err = gorm.Open(postgres.Open(originalDSN), &gorm.Config{
|
||||||
|
SkipDefaultTransaction: true,
|
||||||
|
PrepareStmt: false,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to connect for dropping database %s: %v", dbName, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if sqlDB, _ := dropDB.DB(); sqlDB != nil {
|
||||||
|
sqlDB.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if sqlDB, _ := dropDB.DB(); sqlDB != nil {
|
||||||
|
sqlDB.SetMaxOpenConns(1)
|
||||||
|
sqlDB.SetMaxIdleConns(0)
|
||||||
|
sqlDB.SetConnMaxLifetime(time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dropDB.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s WITH (FORCE)", dbName)).Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to drop database %s: %v", dbName, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return replaceDBName(dsn, dbName), cleanup, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func replaceDBName(dsn, newDBName string) string {
|
||||||
|
re := regexp.MustCompile(`(?P<pre>[:/@])(?P<dbname>[^/?]+)(?P<post>\?|$)`)
|
||||||
|
return re.ReplaceAllString(dsn, `${pre}`+newDBName+`${post}`)
|
||||||
|
}
|
||||||
@@ -21,7 +21,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetAccountSettings(ctx context.Context, accountId string) (nmdata.AccountSettingsInfo, error) {
|
func (pg *PgStore) GetAccountSettings(ctx context.Context, accountId string) (nmdata.AccountSettingsInfo, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetAccountSettingsQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetAccountSettingsQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nmdata.AccountSettingsInfo{}, err
|
return nmdata.AccountSettingsInfo{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetAccountZones(ctx context.Context, accountId string) ([]nmdata.CustomZone, error) {
|
func (pg *PgStore) GetAccountZones(ctx context.Context, accountId string) ([]nmdata.CustomZone, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetAccountZonesQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetAccountZonesQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetGroups(ctx context.Context, accountId string) ([]nmdata.Group, error) {
|
func (pg *PgStore) GetGroups(ctx context.Context, accountId string) ([]nmdata.Group, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetGroupsQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetGroupsQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func TestGetGroups(t *testing.T) {
|
|||||||
// err = loadSQL(ctx, s.pool, initDb)
|
// err = loadSQL(ctx, s.pool, initDb)
|
||||||
//assert.NoError(t, err)
|
//assert.NoError(t, err)
|
||||||
|
|
||||||
_, err = s.pool.Query(ctx, "insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-1','ck7bnf2t2r9s739pkug0','test-group-1', '[{\"ID\":\"cui7q2jl0ubs73d8qpi0\",\"Type\":\"host\"}]','public-id-1')")
|
_, err = s.Pool.Query(ctx, "insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-1','ck7bnf2t2r9s739pkug0','test-group-1', '[{\"ID\":\"cui7q2jl0ubs73d8qpi0\",\"Type\":\"host\"}]','public-id-1')")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
groups, err := s.GetGroups(ctx, "ck7bnf2t2r9s739pkug0") //"ckd7ee2fic3c73dtendg")
|
groups, err := s.GetGroups(ctx, "ck7bnf2t2r9s739pkug0") //"ckd7ee2fic3c73dtendg")
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetNameServerGroups(ctx context.Context, accountId string) ([]nmdata.NameServerGroup, error) {
|
func (pg *PgStore) GetNameServerGroups(ctx context.Context, accountId string) ([]nmdata.NameServerGroup, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetNameserversQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetNameserversQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetNetwork(ctx context.Context, accountId string) (nmdata.Network, error) {
|
func (pg *PgStore) GetNetwork(ctx context.Context, accountId string) (nmdata.Network, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetNetworkQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetNetworkQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nmdata.Network{}, err
|
return nmdata.Network{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetNetworkResources(ctx context.Context, accountId string) ([]nmdata.NetworkResource, error) {
|
func (pg *PgStore) GetNetworkResources(ctx context.Context, accountId string) ([]nmdata.NetworkResource, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetNetworkResourcesQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetNetworkResourcesQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) {
|
func (pg *PgStore) GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetNetworkRouterQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetNetworkRouterQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetPeers(ctx context.Context, accountId string) ([]nmdata.Peer, error) {
|
func (pg *PgStore) GetPeers(ctx context.Context, accountId string) ([]nmdata.Peer, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetPeersQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetPeersQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const (
|
|||||||
var _ networkmapdb.NetworkMapDBStore = &PgStore{}
|
var _ networkmapdb.NetworkMapDBStore = &PgStore{}
|
||||||
|
|
||||||
type PgStore struct {
|
type PgStore struct {
|
||||||
pool *pgxpool.Pool
|
Pool *pgxpool.Pool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPostgresqlStore(ctx context.Context, dsn string) (*PgStore, error) {
|
func NewPostgresqlStore(ctx context.Context, dsn string) (*PgStore, error) {
|
||||||
@@ -28,7 +28,7 @@ func NewPostgresqlStore(ctx context.Context, dsn string) (*PgStore, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &PgStore{pool: pool}, nil
|
return &PgStore{Pool: pool}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func connectToPgDb(ctx context.Context, dsn string) (*pgxpool.Pool, error) {
|
func connectToPgDb(ctx context.Context, dsn string) (*pgxpool.Pool, error) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetPolicies(ctx context.Context, accountId string) ([]nmdata.Policy, error) {
|
func (pg *PgStore) GetPolicies(ctx context.Context, accountId string) ([]nmdata.Policy, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetPoliciesQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetPoliciesQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetPostureChecks(ctx context.Context, accountId string) ([]nmdata.PostureChecks, error) {
|
func (pg *PgStore) GetPostureChecks(ctx context.Context, accountId string) ([]nmdata.PostureChecks, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetPostureChecksQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetPostureChecksQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (pg *PgStore) GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error) {
|
func (pg *PgStore) GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error) {
|
||||||
rows, err := pg.pool.Query(ctx, GetRoutesQuery, accountId)
|
rows, err := pg.Pool.Query(ctx, GetRoutesQuery, accountId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user