diff --git a/integration_tests/management/network_map_db/pgsql/group_test.go b/integration_tests/management/network_map_db/pgsql/group_test.go index 1714761f8..c85ae1e50 100644 --- a/integration_tests/management/network_map_db/pgsql/group_test.go +++ b/integration_tests/management/network_map_db/pgsql/group_test.go @@ -23,36 +23,36 @@ func TestGetGroups(t *testing.T) { assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-1',$1,'test-group-1', '[{\"ID\":\"host-id-1\",\"Type\":\"host\"}]','public-id-1')", acctId) + "insert into groups (id, account_id, name, resources, public_id) VALUES('g1-test-group-id-1',$1,'test-group-1', '[{\"ID\":\"host-id-1\",\"Type\":\"host\"}]','public-id-1')", acctId) assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into groups (id, account_id, name, resources, public_id) VALUES('test-group-id-2',$1,'test-group-2', '[{\"ID\":\"subnet-id-1\",\"Type\":\"subnet\"}, {\"ID\":\"host-id-2\",\"Type\":\"host\"}]','public-id-2')", acctId) + "insert into groups (id, account_id, name, resources, public_id) VALUES('g1-test-group-id-2',$1,'test-group-2', '[{\"ID\":\"subnet-id-1\",\"Type\":\"subnet\"}, {\"ID\":\"host-id-2\",\"Type\":\"host\"}]','public-id-2')", acctId) assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-1','test-group-id-1')") + "insert into group_peers (peer_id, group_id) VALUES('peer-id-1','g1-test-group-id-1')") assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-2','test-group-id-2')") + "insert into group_peers (peer_id, group_id) VALUES('peer-id-2','g1-test-group-id-2')") assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-3','test-group-id-2')") + "insert into group_peers (peer_id, group_id) VALUES('peer-id-3','g1-test-group-id-2')") assert.NoError(t, err) groups, resourceToGroupIdx, err := s.GetGroups(ctx, acctId) assert.NoError(t, err) assert.Contains(t, groups, - nmdata.Group{ID: "test-group-id-1", Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "host-id-1", Type: "host"}}, Peers: []string{"peer-id-1"}}, + nmdata.Group{ID: "g1-test-group-id-1", Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "host-id-1", Type: "host"}}, Peers: []string{"peer-id-1"}}, ) - assert.NotNil(t, resourceToGroupIdx["host-id-1"]["test-group-id-1"]) + assert.NotNil(t, resourceToGroupIdx["host-id-1"]["g1-test-group-id-1"]) assert.Contains(t, groups, - nmdata.Group{ID: "test-group-id-2", Name: "test-group-2", PublicID: "public-id-2", + nmdata.Group{ID: "g1-test-group-id-2", Name: "test-group-2", PublicID: "public-id-2", Resources: []nmdata.Resource{{ID: "subnet-id-1", Type: "subnet"}, {ID: "host-id-2", Type: "host"}}, Peers: []string{"peer-id-2", "peer-id-3"}}, ) - assert.NotNil(t, resourceToGroupIdx["host-id-2"]["test-group-id-2"]) - assert.NotNil(t, resourceToGroupIdx["subnet-id-1"]["test-group-id-2"]) + assert.NotNil(t, resourceToGroupIdx["host-id-2"]["g1-test-group-id-2"]) + assert.NotNil(t, resourceToGroupIdx["subnet-id-1"]["g1-test-group-id-2"]) } // Verify handling of empty fields in groups table @@ -72,7 +72,7 @@ func TestGetGroupsWithoutExpectedFields(t *testing.T) { assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into groups (id, account_id) VALUES('test-group-id-1',$1)", acctId) + "insert into groups (id, account_id) VALUES('g2-test-group-id-1',$1)", acctId) assert.NoError(t, err) groups, _, err := s.GetGroups(ctx, acctId) diff --git a/integration_tests/management/network_map_db/pgsql/network_router_test.go b/integration_tests/management/network_map_db/pgsql/network_router_test.go index 45622f319..d87f1b89a 100644 --- a/integration_tests/management/network_map_db/pgsql/network_router_test.go +++ b/integration_tests/management/network_map_db/pgsql/network_router_test.go @@ -23,32 +23,35 @@ func TestGetNetworkRouters(t *testing.T) { assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into network_routers (id, account_id, public_id, peer, network_id, masquerade, metric, enabled) VALUES('test-nr-id-1',$1,'public-id-1','peer-id-1','network-id-1',TRUE,999,TRUE)", acctId) + `insert into network_routers (id, account_id, public_id, peer, network_id, masquerade, metric, enabled, peer_groups) + VALUES('test-nr-id-1',$1,'public-id-1','peer-id-1','network-id-1',TRUE,999,TRUE,'["nr-test-group-id-1"]')`, + acctId) _, err = s.Pool.Query(ctx, - "insert into network_routers (id, account_id, public_id, peer, network_id, masquerade, metric, enabled) VALUES('test-nr-id-2',$1,'public-id-2','peer-id-2','network-id-2',TRUE,333,TRUE)", acctId) + `insert into network_routers (id, account_id, public_id, peer, network_id, masquerade, metric, enabled, peer_groups) + VALUES('test-nr-id-2',$1,'public-id-2','','network-id-2',TRUE,333,TRUE,'["nr-test-group-id-1","nr-test-group-id-2"]')`, acctId) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-1','test-group-id-1')") + "insert into groups (id, account_id, public_id) VALUES('nr-test-group-id-1',$1,'public-id-1')", acctId) + _, err = s.Pool.Query(ctx, + "insert into groups (id, account_id, public_id) VALUES('nr-test-group-id-2',$1,'public-id-2')", acctId) + _, err = s.Pool.Query(ctx, + "insert into group_peers (peer_id, group_id) VALUES('peer-id-11','nr-test-group-id-1')") assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-2','test-group-id-2')") + "insert into group_peers (peer_id, group_id) VALUES('peer-id-22','nr-test-group-id-2')") assert.NoError(t, err) _, err = s.Pool.Query(ctx, - "insert into group_peers (peer_id, group_id) VALUES('peer-id-3','test-group-id-2')") + "insert into group_peers (peer_id, group_id) VALUES('peer-id-33','nr-test-group-id-2')") assert.NoError(t, err) - groups, resourceToGroupIdx, err := s.GetGroups(ctx, acctId) + routers, err := s.GetNetworkRouters(ctx, acctId) assert.NoError(t, err) - assert.Contains(t, - groups, - nmdata.Group{ID: "test-group-id-1", Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "host-id-1", Type: "host"}}, Peers: []string{"peer-id-1"}}, - ) - assert.NotNil(t, resourceToGroupIdx["host-id-1"]["test-group-id-1"]) - assert.Contains(t, - groups, - nmdata.Group{ID: "test-group-id-2", Name: "test-group-2", PublicID: "public-id-2", - Resources: []nmdata.Resource{{ID: "subnet-id-1", Type: "subnet"}, {ID: "host-id-2", Type: "host"}}, - Peers: []string{"peer-id-2", "peer-id-3"}}, - ) - assert.NotNil(t, resourceToGroupIdx["host-id-2"]["test-group-id-2"]) - assert.NotNil(t, resourceToGroupIdx["subnet-id-1"]["test-group-id-2"]) + assert.NotEmpty(t, routers) + + assert.Equal(t, routers["network-id-1"], + map[string]*nmdata.NetworkRouter{"peer-id-1": {PublicID: "public-id-1", Masquerade: true, Metric: 999, Enabled: true, PeerGroups: []string{"peer-id-11"}}}) + assert.Equal(t, routers["network-id-2"], + map[string]*nmdata.NetworkRouter{ + "peer-id-11": {PublicID: "public-id-2", Masquerade: true, Metric: 333, Enabled: true, PeerGroups: []string{"peer-id-11", "peer-id-22", "peer-id-33"}}, + "peer-id-22": {PublicID: "public-id-2", Masquerade: true, Metric: 333, Enabled: true, PeerGroups: []string{"peer-id-11", "peer-id-22", "peer-id-33"}}, + "peer-id-33": {PublicID: "public-id-2", Masquerade: true, Metric: 333, Enabled: true, PeerGroups: []string{"peer-id-11", "peer-id-22", "peer-id-33"}}}) } diff --git a/management/internals/network_map_db/pgsql/network_router.go b/management/internals/network_map_db/pgsql/network_router.go index 82cad224b..21894532f 100644 --- a/management/internals/network_map_db/pgsql/network_router.go +++ b/management/internals/network_map_db/pgsql/network_router.go @@ -79,7 +79,7 @@ type networkrouter struct { PublicID sql.NullString NetworkID sql.NullString `nmap:"skip"` Peer sql.NullString `nmap:"skip"` - PeersViaGroups []string `nmap:"skip"` + PeersViaGroups []string `nmap:"map_to:PeerGroups"` Masquerade sql.NullBool Metric sql.NullInt64 Enabled sql.NullBool