diff --git a/integration_tests/management/network_map_db/base_data.sql b/integration_tests/management/network_map_db/base_data.sql index 135ab7f3e..136df00ac 100644 --- a/integration_tests/management/network_map_db/base_data.sql +++ b/integration_tests/management/network_map_db/base_data.sql @@ -20,3 +20,34 @@ insert into groups (id, account_id, name, resources, public_id) VALUES('group-no insert into group_peers (account_id, peer_id, group_id) VALUES('account-1','peer-id-1','group-one-resource-id'); insert into group_peers (account_id, peer_id, group_id) VALUES('account-1','peer-id-2','group-two-resources-id'); insert into group_peers (account_id, peer_id, group_id) VALUES('account-1','peer-id-3','group-two-resources-id'); +insert into peers (id, account_id, "key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, + peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, + meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, + meta_capabilities, meta_flags, meta_sync_message_version, + location_country_code, location_city_name, location_connection_ip) + values('peer-id-1','account-1','key-1','ssh-key-1','peer-1','["extra-peer-1"]','user-id-1',true,true,'2026-08-06 13:25:59.12999','"10.10.10.1"','"fdf4:ba80:6aa5:89f1:44d7:8701:8699:4940"', + false,true,true,'cluster-1.netbird.services', + '0.76.0','linux','26.4.1','6.8.0-134-generic','[{"NetIP":"fe80::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ac"},{"NetIP":"192.168.16.1/20","Mac":"00:15:5d:24:0c:ac"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', + '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, + 'DE','Berlin','"46.201.148.187"'); +insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, + peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, + meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, + meta_capabilities, meta_flags, meta_sync_message_version, + location_country_code, location_city_name, location_connection_ip) + values('peer-id-2','account-1','key-2','ssh-key-2','peer-2','["extra-peer-2"]','user-id-2',true,true,'2026-08-06 14:25:59.12999','"10.10.100.1"','"fdf5:ba80:6aa5:89f1:44d7:8701:8699:4940"', + false,true,true,'cluster-2.netbird.services', + '0.76.1','linux','26.4.2','6.8.0-135-generic','[{"NetIP":"fe81::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ad"},{"NetIP":"192.168.17.1/20","Mac":"00:15:5d:24:0c:ad"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', + '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',0, + 'DE','Berlin','"46.201.149.187"'); +insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, + peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, + meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, + meta_capabilities, meta_flags, meta_sync_message_version, + location_country_code, location_city_name, location_connection_ip) + values('peer-id-3','account-1','key-3','ssh-key-3','peer-3','["extra-peer-3"]','user-id-3',true,true,'2026-08-06 12:25:59.12999','"10.10.200.1"','"fdf6:ba80:6aa5:89f1:44d7:8701:8699:4940"', + false,true,true,'cluster-3.netbird.services', + '0.76.2','linux','26.4.3','6.8.0-136-generic','[{"NetIP":"fe82::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ae"},{"NetIP":"192.168.18.1/20","Mac":"00:15:5d:24:0c:ae"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', + '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, + 'DE','Berlin','"46.201.150.187"'); + diff --git a/integration_tests/management/network_map_db/main_test.go b/integration_tests/management/network_map_db/main_test.go index ee96cf1b5..78c8c8ec8 100644 --- a/integration_tests/management/network_map_db/main_test.go +++ b/integration_tests/management/network_map_db/main_test.go @@ -21,12 +21,6 @@ import ( //go:embed base_data.sql var baseData string -//go:embed pg_data.sql -var pgData string - -//go:embed sqlite_data.sql -var sqliteData string - var ( pgstore *networkmap_pgsql.PgStore sqlitestore *networkmap_sqlite.SqliteStore @@ -39,11 +33,11 @@ func TestMain(m *testing.M) { switch kind { case string(types.PostgresStoreEngine): engine = string(types.PostgresStoreEngine) - pgstore, cleanup = createPGTestStore(baseData, pgData) + pgstore, cleanup = createPGTestStore(baseData) pgstore.UsingTimeZone(time.UTC) case "", string(types.SqliteStoreEngine): engine = string(types.SqliteStoreEngine) - sqlitestore, cleanup = createSqliteTestStore(baseData, sqliteData) + sqlitestore, cleanup = createSqliteTestStore(baseData) default: log.Fatalf("unsupported db '%s' in NETBIRD_STORE_ENGINE env var", kind) } diff --git a/integration_tests/management/network_map_db/network_map_data_test.go b/integration_tests/management/network_map_db/network_map_data_test.go index 700fa064e..1d3ff2ace 100644 --- a/integration_tests/management/network_map_db/network_map_data_test.go +++ b/integration_tests/management/network_map_db/network_map_data_test.go @@ -6,18 +6,16 @@ import ( "context" _ "embed" "encoding/json" - "net/netip" "os" "path/filepath" "runtime" "testing" + "github.com/golang/mock/gomock" networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db" - "github.com/netbirdio/netbird/management/server/integrations/extra_settings" - nbpeer "github.com/netbirdio/netbird/management/server/peer" + "github.com/netbirdio/netbird/management/server/integrations/integrated_validator" + "github.com/netbirdio/netbird/management/server/settings" "github.com/netbirdio/netbird/management/server/types" - "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" - "github.com/netbirdio/netbird/shared/management/proto" "github.com/stretchr/testify/assert" ) @@ -28,10 +26,23 @@ const EnvUpdateGoldenData = "NMAP_UPDATE_GOLDEN_DATA" func TestGetNetworkMapData(t *testing.T) { ctx := context.TODO() + ctrl := gomock.NewController(t) + + extraSettingsManager := settings.NewMockManager(ctrl) + extraSettingsManager.EXPECT().GetExtraSettings(gomock.Any(), gomock.Any()).Return(&types.ExtraSettings{}, nil) + + peerValidators := integrated_validator.NewMockIntegratedValidator(ctrl) + peerValidators.EXPECT().GetValidatedPeers(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return( + map[string]struct{}{ + "peer-id-1": {}, + "peer-id-2": {}, + "peer-id-3": {}, + }, nil) + storeImpl := networkmapdb.NetworkMapDBStoreImpl{ Store: store(t), - ExtraSettingsManager: &extraSettingsManagerForTesting{}, - IntegratedPeerValidator: &peerValidatorForTesting{}, + ExtraSettingsManager: extraSettingsManager, + IntegratedPeerValidator: peerValidators, } nmap, err := storeImpl.GetNetworkMapData(ctx, "account-1") @@ -49,55 +60,3 @@ func TestGetNetworkMapData(t *testing.T) { } assert.Equal(t, goldenNMap, string(serializedNMap)) } - -// need these calls for the test -func (*extraSettingsManagerForTesting) GetExtraSettings(ctx context.Context, accountID string) (*types.ExtraSettings, error) { - return &types.ExtraSettings{}, nil -} -func (*peerValidatorForTesting) GetValidatedPeers(ctx context.Context, accountID string, groups []*nmdata.Group, peers []*nmdata.Peer, extraSettings *types.ExtraSettings) (map[string]struct{}, error) { - return map[string]struct{}{ - "peer-id-1": {}, - "peer-id-2": {}, - "peer-id-3": {}, - }, nil -} - -type extraSettingsManagerForTesting struct{} - -func (*extraSettingsManagerForTesting) GetExtraSettingsManager() extra_settings.Manager { return nil } -func (*extraSettingsManagerForTesting) GetSettings(ctx context.Context, accountID string, userID string) (*types.Settings, error) { - return nil, nil -} -func (*extraSettingsManagerForTesting) UpdateExtraSettings(ctx context.Context, accountID, userID string, extraSettings *types.ExtraSettings) (bool, error) { - return false, nil -} -func (*extraSettingsManagerForTesting) GetEffectiveNetworkRanges(ctx context.Context, accountID string) (v4, v6 netip.Prefix, err error) { - return netip.Prefix{}, netip.Prefix{}, nil -} - -type peerValidatorForTesting struct{} - -func (*peerValidatorForTesting) ValidateExtraSettings(ctx context.Context, newExtraSettings *types.ExtraSettings, oldExtraSettings *types.ExtraSettings, userID string, accountID string) error { - return nil -} -func (*peerValidatorForTesting) ValidatePeer(ctx context.Context, update *nbpeer.Peer, peer *nbpeer.Peer, userID string, accountID string, dnsDomain string, peersGroup []string, extraSettings *types.ExtraSettings) (*nbpeer.Peer, bool, error) { - return nil, false, nil -} -func (*peerValidatorForTesting) PreparePeer(ctx context.Context, accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *types.ExtraSettings, temporary bool) *nbpeer.Peer { - return nil -} -func (*peerValidatorForTesting) IsNotValidPeer(ctx context.Context, accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *types.ExtraSettings) (bool, bool, error) { - return false, false, nil -} -func (*peerValidatorForTesting) GetInvalidPeers(ctx context.Context, accountID string, extraSettings *types.ExtraSettings) (map[string]string, error) { - return nil, nil -} -func (*peerValidatorForTesting) PeerDeleted(ctx context.Context, accountID, peerID string, extraSettings *types.ExtraSettings) error { - return nil -} -func (*peerValidatorForTesting) SetPeerInvalidationListener(fn func(accountID string, peerIDs []string)) { -} -func (*peerValidatorForTesting) Stop(ctx context.Context) {} -func (*peerValidatorForTesting) ValidateFlowResponse(ctx context.Context, peerKey string, flowResponse *proto.PKCEAuthorizationFlow) *proto.PKCEAuthorizationFlow { - return nil -} diff --git a/integration_tests/management/network_map_db/pg_data.sql b/integration_tests/management/network_map_db/pg_data.sql deleted file mode 100644 index d2043308c..000000000 --- a/integration_tests/management/network_map_db/pg_data.sql +++ /dev/null @@ -1,30 +0,0 @@ -insert into peers (id, account_id, "key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-1','account-1','key-1','ssh-key-1','peer-1','["extra-peer-1"]','user-id-1',true,true,'2026-08-06 13:25:59.12999+00','"10.10.10.1"','"fdf4:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-1.netbird.services', - '0.76.0','linux','26.4.1','6.8.0-134-generic','[{"NetIP":"fe80::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ac"},{"NetIP":"192.168.16.1/20","Mac":"00:15:5d:24:0c:ac"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, - 'DE','Berlin','"46.201.148.187"'); -insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-2','account-1','key-2','ssh-key-2','peer-2','["extra-peer-2"]','user-id-2',true,true,'2026-08-06 14:25:59.12999+00','"10.10.100.1"','"fdf5:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-2.netbird.services', - '0.76.1','linux','26.4.2','6.8.0-135-generic','[{"NetIP":"fe81::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ad"},{"NetIP":"192.168.17.1/20","Mac":"00:15:5d:24:0c:ad"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',0, - 'DE','Berlin','"46.201.149.187"'); -insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-3','account-1','key-3','ssh-key-3','peer-3','["extra-peer-3"]','user-id-3',true,true,'2026-08-06 12:25:59.12999+00','"10.10.200.1"','"fdf6:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-3.netbird.services', - '0.76.2','linux','26.4.3','6.8.0-136-generic','[{"NetIP":"fe82::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ae"},{"NetIP":"192.168.18.1/20","Mac":"00:15:5d:24:0c:ae"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, - 'DE','Berlin','"46.201.150.187"'); diff --git a/integration_tests/management/network_map_db/pg_test_store.go b/integration_tests/management/network_map_db/pg_test_store.go index d58ea5f6d..1710747b5 100644 --- a/integration_tests/management/network_map_db/pg_test_store.go +++ b/integration_tests/management/network_map_db/pg_test_store.go @@ -6,7 +6,6 @@ import ( "context" "fmt" "regexp" - "slices" "strings" "time" @@ -20,7 +19,7 @@ import ( "gorm.io/gorm" ) -func createPGTestStore(baseData, pgData string) (*networkmap_pgsql.PgStore, func()) { +func createPGTestStore(baseData string) (*networkmap_pgsql.PgStore, func()) { _, tmpdsn, err := testutil.CreatePostgresTestContainer() if err != nil { log.Fatalf("error starting postres container %v", err) @@ -64,7 +63,7 @@ func createPGTestStore(baseData, pgData string) (*networkmap_pgsql.PgStore, func log.Fatal("error creating postgres store %w", err) } - for _, query := range slices.Concat(strings.Split(baseData, ";"), strings.Split(pgData, ";")) { + for _, query := range strings.Split(baseData, ";") { if _, err := pgstore.Pool.Exec(ctx, query); err != nil { log.Fatalf("error initializing db: %s", err.Error()) } diff --git a/integration_tests/management/network_map_db/sqlite_data.sql b/integration_tests/management/network_map_db/sqlite_data.sql deleted file mode 100644 index 77b928446..000000000 --- a/integration_tests/management/network_map_db/sqlite_data.sql +++ /dev/null @@ -1,30 +0,0 @@ -insert into peers (id, account_id, "key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-1','account-1','key-1','ssh-key-1','peer-1','["extra-peer-1"]','user-id-1',true,true,'2026-08-06 13:25:59.12999','"10.10.10.1"','"fdf4:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-1.netbird.services', - '0.76.0','linux','26.4.1','6.8.0-134-generic','[{"NetIP":"fe80::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ac"},{"NetIP":"192.168.16.1/20","Mac":"00:15:5d:24:0c:ac"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, - 'DE','Berlin','"46.201.148.187"'); -insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-2','account-1','key-2','ssh-key-2','peer-2','["extra-peer-2"]','user-id-2',true,true,'2026-08-06 14:25:59.12999','"10.10.100.1"','"fdf5:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-2.netbird.services', - '0.76.1','linux','26.4.2','6.8.0-135-generic','[{"NetIP":"fe81::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ad"},{"NetIP":"192.168.17.1/20","Mac":"00:15:5d:24:0c:ad"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',0, - 'DE','Berlin','"46.201.149.187"'); -insert into peers (id,account_id,"key", ssh_key, dns_label, extra_dns_labels, user_id, ssh_enabled, login_expiration_enabled, last_login, ip, ipv6, - peer_status_requires_approval, peer_status_connected, proxy_meta_embedded, proxy_meta_cluster, - meta_wt_version, meta_go_os, meta_os_version, meta_kernel_version, meta_network_addresses, meta_files, - meta_capabilities, meta_flags, meta_sync_message_version, - location_country_code, location_city_name, location_connection_ip) - values('peer-id-3','account-1','key-3','ssh-key-3','peer-3','["extra-peer-3"]','user-id-3',true,true,'2026-08-06 12:25:59.12999','"10.10.200.1"','"fdf6:ba80:6aa5:89f1:44d7:8701:8699:4940"', - false,true,true,'cluster-3.netbird.services', - '0.76.2','linux','26.4.3','6.8.0-136-generic','[{"NetIP":"fe82::8b4c:973f:a76b:3771/64","Mac":"00:15:5d:24:0c:ae"},{"NetIP":"192.168.18.1/20","Mac":"00:15:5d:24:0c:ae"}]','[{"Path":"/usr/bin/netbird","Exist":false,"ProcessIsRunning":false}]', - '[1,2]','{"RosenpassEnabled":false,"RosenpassPermissive":false,"ServerSSHAllowed":true,"DisableClientRoutes":false,"DisableServerRoutes":false,"DisableDNS":false,"DisableFirewall":false,"BlockLANAccess":false,"BlockInbound":false,"DisableIPv6":false,"LazyConnectionEnabled":false}',1, - 'DE','Berlin','"46.201.150.187"'); diff --git a/integration_tests/management/network_map_db/sqlite_test_store.go b/integration_tests/management/network_map_db/sqlite_test_store.go index 9291e6dbc..1c70c93d4 100644 --- a/integration_tests/management/network_map_db/sqlite_test_store.go +++ b/integration_tests/management/network_map_db/sqlite_test_store.go @@ -6,7 +6,6 @@ import ( "context" "fmt" "runtime" - "slices" "strings" networkmap_sqlite "github.com/netbirdio/netbird/management/internals/network_map_db/sqlite" @@ -17,7 +16,7 @@ import ( "gorm.io/gorm" ) -func createSqliteTestStore(baseData, sqliteData string) (*networkmap_sqlite.SqliteStore, func()) { +func createSqliteTestStore(baseData string) (*networkmap_sqlite.SqliteStore, func()) { storeSqliteFileName := ":memory:" storeStr := fmt.Sprintf("%s?cache=shared", storeSqliteFileName) if runtime.GOOS == "windows" { @@ -39,7 +38,7 @@ func createSqliteTestStore(baseData, sqliteData string) (*networkmap_sqlite.Sqli log.Fatalf("error initializing db: %s", err.Error()) } - for _, query := range slices.Concat(strings.Split(baseData, ";"), strings.Split(sqliteData, ";")) { + for _, query := range strings.Split(baseData, ";") { if _, err := sqldb.Exec(query); err != nil { log.Fatalf("error initializing db: %s", err.Error()) } diff --git a/management/server/integrations/integrated_validator/integrated_validator_mock.go b/management/server/integrations/integrated_validator/integrated_validator_mock.go new file mode 100644 index 000000000..2e25de4cb --- /dev/null +++ b/management/server/integrations/integrated_validator/integrated_validator_mock.go @@ -0,0 +1,181 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./interface.go + +// Package integrated_validator is a generated GoMock package. +package integrated_validator + +import ( + context "context" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + peer "github.com/netbirdio/netbird/management/server/peer" + types "github.com/netbirdio/netbird/management/server/types" + nmdata "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" + proto "github.com/netbirdio/netbird/shared/management/proto" +) + +// MockIntegratedValidator is a mock of IntegratedValidator interface. +type MockIntegratedValidator struct { + ctrl *gomock.Controller + recorder *MockIntegratedValidatorMockRecorder +} + +// MockIntegratedValidatorMockRecorder is the mock recorder for MockIntegratedValidator. +type MockIntegratedValidatorMockRecorder struct { + mock *MockIntegratedValidator +} + +// NewMockIntegratedValidator creates a new mock instance. +func NewMockIntegratedValidator(ctrl *gomock.Controller) *MockIntegratedValidator { + mock := &MockIntegratedValidator{ctrl: ctrl} + mock.recorder = &MockIntegratedValidatorMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockIntegratedValidator) EXPECT() *MockIntegratedValidatorMockRecorder { + return m.recorder +} + +// GetInvalidPeers mocks base method. +func (m *MockIntegratedValidator) GetInvalidPeers(ctx context.Context, accountID string, extraSettings *types.ExtraSettings) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInvalidPeers", ctx, accountID, extraSettings) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInvalidPeers indicates an expected call of GetInvalidPeers. +func (mr *MockIntegratedValidatorMockRecorder) GetInvalidPeers(ctx, accountID, extraSettings interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInvalidPeers", reflect.TypeOf((*MockIntegratedValidator)(nil).GetInvalidPeers), ctx, accountID, extraSettings) +} + +// GetValidatedPeers mocks base method. +func (m *MockIntegratedValidator) GetValidatedPeers(ctx context.Context, accountID string, groups []*nmdata.Group, peers []*nmdata.Peer, extraSettings *types.ExtraSettings) (map[string]struct{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetValidatedPeers", ctx, accountID, groups, peers, extraSettings) + ret0, _ := ret[0].(map[string]struct{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetValidatedPeers indicates an expected call of GetValidatedPeers. +func (mr *MockIntegratedValidatorMockRecorder) GetValidatedPeers(ctx, accountID, groups, peers, extraSettings interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetValidatedPeers", reflect.TypeOf((*MockIntegratedValidator)(nil).GetValidatedPeers), ctx, accountID, groups, peers, extraSettings) +} + +// IsNotValidPeer mocks base method. +func (m *MockIntegratedValidator) IsNotValidPeer(ctx context.Context, accountID string, peer *peer.Peer, peersGroup []string, extraSettings *types.ExtraSettings) (bool, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsNotValidPeer", ctx, accountID, peer, peersGroup, extraSettings) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// IsNotValidPeer indicates an expected call of IsNotValidPeer. +func (mr *MockIntegratedValidatorMockRecorder) IsNotValidPeer(ctx, accountID, peer, peersGroup, extraSettings interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsNotValidPeer", reflect.TypeOf((*MockIntegratedValidator)(nil).IsNotValidPeer), ctx, accountID, peer, peersGroup, extraSettings) +} + +// PeerDeleted mocks base method. +func (m *MockIntegratedValidator) PeerDeleted(ctx context.Context, accountID, peerID string, extraSettings *types.ExtraSettings) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PeerDeleted", ctx, accountID, peerID, extraSettings) + ret0, _ := ret[0].(error) + return ret0 +} + +// PeerDeleted indicates an expected call of PeerDeleted. +func (mr *MockIntegratedValidatorMockRecorder) PeerDeleted(ctx, accountID, peerID, extraSettings interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerDeleted", reflect.TypeOf((*MockIntegratedValidator)(nil).PeerDeleted), ctx, accountID, peerID, extraSettings) +} + +// PreparePeer mocks base method. +func (m *MockIntegratedValidator) PreparePeer(ctx context.Context, accountID string, p *peer.Peer, peersGroup []string, extraSettings *types.ExtraSettings, temporary bool) *peer.Peer { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PreparePeer", ctx, accountID, p, peersGroup, extraSettings, temporary) + ret0, _ := ret[0].(*peer.Peer) + return ret0 +} + +// PreparePeer indicates an expected call of PreparePeer. +func (mr *MockIntegratedValidatorMockRecorder) PreparePeer(ctx, accountID, p, peersGroup, extraSettings, temporary interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PreparePeer", reflect.TypeOf((*MockIntegratedValidator)(nil).PreparePeer), ctx, accountID, p, peersGroup, extraSettings, temporary) +} + +// SetPeerInvalidationListener mocks base method. +func (m *MockIntegratedValidator) SetPeerInvalidationListener(fn func(string, []string)) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetPeerInvalidationListener", fn) +} + +// SetPeerInvalidationListener indicates an expected call of SetPeerInvalidationListener. +func (mr *MockIntegratedValidatorMockRecorder) SetPeerInvalidationListener(fn interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPeerInvalidationListener", reflect.TypeOf((*MockIntegratedValidator)(nil).SetPeerInvalidationListener), fn) +} + +// Stop mocks base method. +func (m *MockIntegratedValidator) Stop(ctx context.Context) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Stop", ctx) +} + +// Stop indicates an expected call of Stop. +func (mr *MockIntegratedValidatorMockRecorder) Stop(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stop", reflect.TypeOf((*MockIntegratedValidator)(nil).Stop), ctx) +} + +// ValidateExtraSettings mocks base method. +func (m *MockIntegratedValidator) ValidateExtraSettings(ctx context.Context, newExtraSettings, oldExtraSettings *types.ExtraSettings, userID, accountID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ValidateExtraSettings", ctx, newExtraSettings, oldExtraSettings, userID, accountID) + ret0, _ := ret[0].(error) + return ret0 +} + +// ValidateExtraSettings indicates an expected call of ValidateExtraSettings. +func (mr *MockIntegratedValidatorMockRecorder) ValidateExtraSettings(ctx, newExtraSettings, oldExtraSettings, userID, accountID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidateExtraSettings", reflect.TypeOf((*MockIntegratedValidator)(nil).ValidateExtraSettings), ctx, newExtraSettings, oldExtraSettings, userID, accountID) +} + +// ValidateFlowResponse mocks base method. +func (m *MockIntegratedValidator) ValidateFlowResponse(ctx context.Context, peerKey string, flowResponse *proto.PKCEAuthorizationFlow) *proto.PKCEAuthorizationFlow { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ValidateFlowResponse", ctx, peerKey, flowResponse) + ret0, _ := ret[0].(*proto.PKCEAuthorizationFlow) + return ret0 +} + +// ValidateFlowResponse indicates an expected call of ValidateFlowResponse. +func (mr *MockIntegratedValidatorMockRecorder) ValidateFlowResponse(ctx, peerKey, flowResponse interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidateFlowResponse", reflect.TypeOf((*MockIntegratedValidator)(nil).ValidateFlowResponse), ctx, peerKey, flowResponse) +} + +// ValidatePeer mocks base method. +func (m *MockIntegratedValidator) ValidatePeer(ctx context.Context, update, p *peer.Peer, userID, accountID, dnsDomain string, peersGroup []string, extraSettings *types.ExtraSettings) (*peer.Peer, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ValidatePeer", ctx, update, p, userID, accountID, dnsDomain, peersGroup, extraSettings) + ret0, _ := ret[0].(*peer.Peer) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// ValidatePeer indicates an expected call of ValidatePeer. +func (mr *MockIntegratedValidatorMockRecorder) ValidatePeer(ctx, update, p, userID, accountID, dnsDomain, peersGroup, extraSettings interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidatePeer", reflect.TypeOf((*MockIntegratedValidator)(nil).ValidatePeer), ctx, update, p, userID, accountID, dnsDomain, peersGroup, extraSettings) +} diff --git a/management/server/integrations/integrated_validator/interface.go b/management/server/integrations/integrated_validator/interface.go index 9c534abde..a0928d8bc 100644 --- a/management/server/integrations/integrated_validator/interface.go +++ b/management/server/integrations/integrated_validator/interface.go @@ -9,11 +9,13 @@ import ( "github.com/netbirdio/netbird/shared/management/proto" ) +//go:generate go run github.com/golang/mock/mockgen -package integrated_validator -destination=integrated_validator_mock.go -source=./interface.go -build_flags=-mod=mod + // IntegratedValidator interface exists to avoid the circle dependencies type IntegratedValidator interface { ValidateExtraSettings(ctx context.Context, newExtraSettings *types.ExtraSettings, oldExtraSettings *types.ExtraSettings, userID string, accountID string) error - ValidatePeer(ctx context.Context, update *nbpeer.Peer, peer *nbpeer.Peer, userID string, accountID string, dnsDomain string, peersGroup []string, extraSettings *types.ExtraSettings) (*nbpeer.Peer, bool, error) - PreparePeer(ctx context.Context, accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *types.ExtraSettings, temporary bool) *nbpeer.Peer + ValidatePeer(ctx context.Context, update *nbpeer.Peer, p *nbpeer.Peer, userID string, accountID string, dnsDomain string, peersGroup []string, extraSettings *types.ExtraSettings) (*nbpeer.Peer, bool, error) + PreparePeer(ctx context.Context, accountID string, p *nbpeer.Peer, peersGroup []string, extraSettings *types.ExtraSettings, temporary bool) *nbpeer.Peer IsNotValidPeer(ctx context.Context, accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *types.ExtraSettings) (bool, bool, error) GetValidatedPeers(ctx context.Context, accountID string, groups []*nmdata.Group, peers []*nmdata.Peer, extraSettings *types.ExtraSettings) (map[string]struct{}, error) GetInvalidPeers(ctx context.Context, accountID string, extraSettings *types.ExtraSettings) (map[string]string, error)