[client, management] offload client config generation to the client (#6711)

Signed-off-by: Dmitri Dolguikh <dmitri.external@netbird.io>
Co-authored-by: crn4 <vladimir@netbird.io>
Co-authored-by: pascal <pascal@netbird.io>
This commit is contained in:
dmitri-netbird
2026-07-22 18:20:27 +02:00
committed by GitHub
co-authored by crn4 pascal
parent ed682fad87
commit 8435682ac8
85 changed files with 9932 additions and 2131 deletions
@@ -0,0 +1,67 @@
package grpc
import (
"errors"
"fmt"
)
type SyncMessageVersion uint16
const (
Base SyncMessageVersion = iota
ComponentNetworkMap
)
const DefaultSyncMessageVersion = Base
const HighestSyncMessageVersion = ComponentNetworkMap
var ErrorUnrecognizedSyncMessageVersion = errors.New("unrecognized SyncMessageVersion")
func ValidateSyncMessageVersion(v *int) error {
// empty list == we support all available versions
if v == nil {
return nil
}
if *v < 0 || *v > int(HighestSyncMessageVersion) {
return fmt.Errorf("sync message version must between 0 and %d, %w", HighestSyncMessageVersion, ErrorUnrecognizedSyncMessageVersion)
}
return nil
}
// returns SyncMessage version from config, or highest available version if the config is missing or
// base if it is invalid
// the assumption is ValidateSyncMessageVersion() has been called before using SyncMessageVersionFromConfig()
func SyncMessageVersionFromConfig(v *int) SyncMessageVersion {
if v == nil {
return DefaultSyncMessageVersion
}
if *v < 0 || *v > int(HighestSyncMessageVersion) {
return Base
}
return SyncMessageVersion(*v)
}
// convert per-account supported versions to SyncMessageVersion
// the assumption is ValidateSyncMessageVersion() has been called before using SyncMessageVersionsFromMap()
func SyncMessageVersionsFromMap(toconvert map[string]int) map[string]SyncMessageVersion {
// no per-account overrides
if len(toconvert) == 0 {
return nil
}
toret := make(map[string]SyncMessageVersion)
for account, version := range toconvert {
toret[account] = SyncMessageVersionFromConfig(&version)
}
return toret
}
// return highest common sync message version, or Default (which is always available)
func HighestCommonSyncMessageVersion(a SyncMessageVersion, b SyncMessageVersion) SyncMessageVersion {
if a > b {
return b
}
return a
}
@@ -0,0 +1,39 @@
package grpc
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestValidation(t *testing.T) {
assert.NoError(t, ValidateSyncMessageVersion(nil))
assert.NoError(t, ValidateSyncMessageVersion(toIntPtr(0)))
assert.NoError(t, ValidateSyncMessageVersion(toIntPtr(1)))
assert.ErrorIs(t, ValidateSyncMessageVersion(toIntPtr(int(^uint(0)>>1))), ErrorUnrecognizedSyncMessageVersion)
assert.ErrorIs(t, ValidateSyncMessageVersion(toIntPtr(-1)), ErrorUnrecognizedSyncMessageVersion)
}
func TestVersionFromConfig(t *testing.T) {
assert.Equal(t, DefaultSyncMessageVersion, SyncMessageVersionFromConfig(nil))
assert.Equal(t, Base, SyncMessageVersionFromConfig(toIntPtr(0)))
assert.Equal(t, ComponentNetworkMap, SyncMessageVersionFromConfig(toIntPtr(1)))
assert.Equal(t, DefaultSyncMessageVersion, SyncMessageVersionFromConfig(toIntPtr(-1)))
assert.Equal(t, DefaultSyncMessageVersion, SyncMessageVersionFromConfig(toIntPtr(int(^uint(0)>>1))))
}
func TestPerAccountConversionStringToEnum(t *testing.T) {
assert.Equal(t, map[string]SyncMessageVersion{"1": HighestSyncMessageVersion}, SyncMessageVersionsFromMap(map[string]int{"1": 1}))
assert.Equal(t, map[string]SyncMessageVersion{"2": DefaultSyncMessageVersion}, SyncMessageVersionsFromMap(map[string]int{"2": -1}))
}
func TestCommonVersions(t *testing.T) {
assert.Equal(t, Base, HighestCommonSyncMessageVersion(Base, HighestSyncMessageVersion))
assert.Equal(t, Base, HighestCommonSyncMessageVersion(HighestSyncMessageVersion, Base))
assert.Equal(t, Base, HighestCommonSyncMessageVersion(Base, Base))
assert.Equal(t, HighestSyncMessageVersion, HighestCommonSyncMessageVersion(HighestSyncMessageVersion, HighestSyncMessageVersion))
}
func toIntPtr(v int) *int {
return &v
}