diff --git a/integration_tests/management/network_map_db/pgsql/route_test.go b/integration_tests/management/network_map_db/pgsql/route_test.go index 2c1738971..12e9302f9 100644 --- a/integration_tests/management/network_map_db/pgsql/route_test.go +++ b/integration_tests/management/network_map_db/pgsql/route_test.go @@ -7,16 +7,12 @@ import ( "net/netip" "testing" - "github.com/netbirdio/netbird/management/server/types" "github.com/netbirdio/netbird/shared/management/domain" "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" "github.com/stretchr/testify/assert" ) func TestGetRoutes(t *testing.T) { - if engine == string(types.SqliteStoreEngine) { - t.Skip() - } ctx := context.TODO() execQuery(t, ctx, diff --git a/management/internals/network_map_db/pgsql/route.go b/management/internals/network_map_db/pgsql/route.go index 7020dd026..4f9a16c0e 100644 --- a/management/internals/network_map_db/pgsql/route.go +++ b/management/internals/network_map_db/pgsql/route.go @@ -2,9 +2,6 @@ package networkmap_pgsql import ( "context" - "database/sql" - "encoding/json" - "reflect" "github.com/jackc/pgx/v5" networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db" @@ -27,41 +24,10 @@ func (pgc *PgStoreConn) GetRoutes(ctx context.Context, accountId string) ([]nmda return nil, err } - routes, err := pgx.CollectRows(rows, pgx.RowToStructByName[route]) + routes, err := pgx.CollectRows(rows, pgx.RowToStructByName[networkmapdb.Route]) if err != nil { return nil, err } - toret := make([]nmdata.Route, 0, len(routes)) - for _, r := range routes { - route := nmdata.Route{} - err := networkmapdb.FromSqlTypesToSharedTypes( - reflect.ValueOf(&r), reflect.ValueOf(&route)) - if err != nil { - return nil, err - } - toret = append(toret, route) - } - return toret, nil -} - -type route struct { - ID string - AccountID sql.NullString - PublicID sql.NullString - Network json.RawMessage - Domains json.RawMessage - KeepRoute sql.NullBool - NetID sql.NullString - Description sql.NullString - Peer sql.NullString - PeerID sql.NullString - PeerGroups json.RawMessage - NetworkType sql.NullInt64 - Masquerade sql.NullBool - Metric sql.NullInt64 - Enabled sql.NullBool - Groups json.RawMessage - AccessControlGroups json.RawMessage - SkipAutoApply sql.NullBool + return networkmapdb.ConvertAllToSharedTypes[networkmapdb.Route, nmdata.Route](routes) } diff --git a/management/internals/network_map_db/shared_types.go b/management/internals/network_map_db/shared_types.go index 542e92add..5ca46ad75 100644 --- a/management/internals/network_map_db/shared_types.go +++ b/management/internals/network_map_db/shared_types.go @@ -151,6 +151,27 @@ type PostureChecks struct { Checks []byte `nmap:"json"` } +type Route struct { + ID string + AccountID sql.NullString + PublicID sql.NullString + Network []byte `nmap:"json"` + Domains []byte `nmap:"json"` + KeepRoute sql.NullBool + NetID sql.NullString + Description sql.NullString + Peer sql.NullString + PeerID sql.NullString + PeerGroups []byte `nmap:"json"` + NetworkType sql.NullInt64 + Masquerade sql.NullBool + Metric sql.NullInt64 + Enabled sql.NullBool + Groups []byte `nmap:"json"` + AccessControlGroups []byte `nmap:"json"` + SkipAutoApply sql.NullBool +} + func RecordTypeAndRdata(t, rdata string) (int, string, error) { switch t { case "A": diff --git a/management/internals/network_map_db/sqlite/route.go b/management/internals/network_map_db/sqlite/route.go new file mode 100644 index 000000000..58b3eca55 --- /dev/null +++ b/management/internals/network_map_db/sqlite/route.go @@ -0,0 +1,32 @@ +package networkmap_sqlite + +import ( + "context" + + networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db" + "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" +) + +const ( + GetRoutesQuery = ` + select id, account_id, public_id, network, domains, keep_route, net_id, description, + peer, peer as peer_id, peer_groups, network_type, masquerade, metric, enabled, + groups, access_control_groups, skip_auto_apply + from routes + where account_id=? + ` +) + +func (sc *SqliteStoreConn) GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error) { + rows, err := sc.Conn.QueryContext(ctx, GetRoutesQuery, accountId) + if err != nil { + return nil, err + } + + routes, err := CollectRowsForSqlite[networkmapdb.Route](rows) + if err != nil { + return nil, err + } + + return networkmapdb.ConvertAllToSharedTypes[networkmapdb.Route, nmdata.Route](routes) +} diff --git a/management/internals/network_map_db/sqlite/sqlite_store.go b/management/internals/network_map_db/sqlite/sqlite_store.go index bd611a29c..275bc6b4d 100644 --- a/management/internals/network_map_db/sqlite/sqlite_store.go +++ b/management/internals/network_map_db/sqlite/sqlite_store.go @@ -11,7 +11,6 @@ import ( "database/sql" networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db" - "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" ) var ErrNoRows = errors.New("no rows in result set") @@ -120,9 +119,6 @@ func CollectRowsForSqlite[T any](rows *sql.Rows) ([]T, error) { return toret, nil } -func (s *SqliteStoreConn) GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error) { - return nil, nil -} func (s *SqliteStoreConn) GetAllowedUsers(ctx context.Context, accountId string) (map[string]struct{}, map[string][]string, error) { return nil, nil, nil }