mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-07 14:09:07 +02:00
[client] Mock management client in TestUpdateOldManagementURL to fix CI flakiness (#5703)
This commit is contained in:
@@ -39,6 +39,18 @@ const (
|
|||||||
DefaultAdminURL = "https://app.netbird.io:443"
|
DefaultAdminURL = "https://app.netbird.io:443"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// mgmProber is the subset of management client needed for URL migration probes.
|
||||||
|
type mgmProber interface {
|
||||||
|
GetServerPublicKey() (*wgtypes.Key, error)
|
||||||
|
Close() error
|
||||||
|
}
|
||||||
|
|
||||||
|
// newMgmProber creates a management client for probing URL reachability.
|
||||||
|
// Overridden in tests to avoid real network calls.
|
||||||
|
var newMgmProber = func(ctx context.Context, addr string, key wgtypes.Key, tlsEnabled bool) (mgmProber, error) {
|
||||||
|
return mgm.NewClient(ctx, addr, key, tlsEnabled)
|
||||||
|
}
|
||||||
|
|
||||||
var DefaultInterfaceBlacklist = []string{
|
var DefaultInterfaceBlacklist = []string{
|
||||||
iface.WgInterfaceDefault, "wt", "utun", "tun0", "zt", "ZeroTier", "wg", "ts",
|
iface.WgInterfaceDefault, "wt", "utun", "tun0", "zt", "ZeroTier", "wg", "ts",
|
||||||
"Tailscale", "tailscale", "docker", "veth", "br-", "lo",
|
"Tailscale", "tailscale", "docker", "veth", "br-", "lo",
|
||||||
@@ -753,14 +765,13 @@ func UpdateOldManagementURL(ctx context.Context, config *Config, configPath stri
|
|||||||
return config, err
|
return config, err
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := mgm.NewClient(ctx, newURL.Host, key, mgmTlsEnabled)
|
client, err := newMgmProber(ctx, newURL.Host, key, mgmTlsEnabled)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Infof("couldn't switch to the new Management %s", newURL.String())
|
log.Infof("couldn't switch to the new Management %s", newURL.String())
|
||||||
return config, err
|
return config, err
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
err = client.Close()
|
if err := client.Close(); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Warnf("failed to close the Management service client %v", err)
|
log.Warnf("failed to close the Management service client %v", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -10,12 +10,23 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||||
|
|
||||||
"github.com/netbirdio/netbird/client/iface"
|
"github.com/netbirdio/netbird/client/iface"
|
||||||
"github.com/netbirdio/netbird/client/internal/routemanager/dynamic"
|
"github.com/netbirdio/netbird/client/internal/routemanager/dynamic"
|
||||||
"github.com/netbirdio/netbird/util"
|
"github.com/netbirdio/netbird/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type mockMgmProber struct {
|
||||||
|
key wgtypes.Key
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockMgmProber) GetServerPublicKey() (*wgtypes.Key, error) {
|
||||||
|
return &m.key, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockMgmProber) Close() error { return nil }
|
||||||
|
|
||||||
func TestGetConfig(t *testing.T) {
|
func TestGetConfig(t *testing.T) {
|
||||||
// case 1: new default config has to be generated
|
// case 1: new default config has to be generated
|
||||||
config, err := UpdateOrCreateConfig(ConfigInput{
|
config, err := UpdateOrCreateConfig(ConfigInput{
|
||||||
@@ -234,6 +245,16 @@ func TestWireguardPortDefaultVsExplicit(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateOldManagementURL(t *testing.T) {
|
func TestUpdateOldManagementURL(t *testing.T) {
|
||||||
|
origProber := newMgmProber
|
||||||
|
newMgmProber = func(_ context.Context, _ string, _ wgtypes.Key, _ bool) (mgmProber, error) {
|
||||||
|
key, err := wgtypes.GenerateKey()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &mockMgmProber{key: key.PublicKey()}, nil
|
||||||
|
}
|
||||||
|
t.Cleanup(func() { newMgmProber = origProber })
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
previousManagementURL string
|
previousManagementURL string
|
||||||
@@ -273,18 +294,17 @@ func TestUpdateOldManagementURL(t *testing.T) {
|
|||||||
ConfigPath: configPath,
|
ConfigPath: configPath,
|
||||||
})
|
})
|
||||||
require.NoError(t, err, "failed to create testing config")
|
require.NoError(t, err, "failed to create testing config")
|
||||||
previousStats, err := os.Stat(configPath)
|
previousContent, err := os.ReadFile(configPath)
|
||||||
require.NoError(t, err, "failed to create testing config stats")
|
require.NoError(t, err, "failed to read initial config")
|
||||||
resultConfig, err := UpdateOldManagementURL(context.TODO(), config, configPath)
|
resultConfig, err := UpdateOldManagementURL(context.TODO(), config, configPath)
|
||||||
require.NoError(t, err, "got error when updating old management url")
|
require.NoError(t, err, "got error when updating old management url")
|
||||||
require.Equal(t, tt.expectedManagementURL, resultConfig.ManagementURL.String())
|
require.Equal(t, tt.expectedManagementURL, resultConfig.ManagementURL.String())
|
||||||
newStats, err := os.Stat(configPath)
|
newContent, err := os.ReadFile(configPath)
|
||||||
require.NoError(t, err, "failed to create testing config stats")
|
require.NoError(t, err, "failed to read updated config")
|
||||||
switch tt.fileShouldNotChange {
|
if tt.fileShouldNotChange {
|
||||||
case true:
|
require.Equal(t, string(previousContent), string(newContent), "file should not change")
|
||||||
require.Equal(t, previousStats.ModTime(), newStats.ModTime(), "file should not change")
|
} else {
|
||||||
case false:
|
require.NotEqual(t, string(previousContent), string(newContent), "file should have changed")
|
||||||
require.NotEqual(t, previousStats.ModTime(), newStats.ModTime(), "file should have changed")
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user