mirror of
https://github.com/henrygd/beszel.git
synced 2025-12-17 10:46:16 +01:00
260 lines
5.8 KiB
Go
260 lines
5.8 KiB
Go
//go:build testing
|
|
|
|
package agent
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestIsValidNic(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
nicName string
|
|
config *NicConfig
|
|
expectedValid bool
|
|
}{
|
|
{
|
|
name: "Whitelist - NIC in list",
|
|
nicName: "eth0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}},
|
|
isBlacklist: false,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Whitelist - NIC not in list",
|
|
nicName: "wlan0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}},
|
|
isBlacklist: false,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
{
|
|
name: "Blacklist - NIC in list",
|
|
nicName: "eth0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}},
|
|
isBlacklist: true,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
{
|
|
name: "Blacklist - NIC not in list",
|
|
nicName: "wlan0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}},
|
|
isBlacklist: true,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Whitelist with wildcard - matching pattern",
|
|
nicName: "eth1",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Whitelist with wildcard - non-matching pattern",
|
|
nicName: "wlan0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
{
|
|
name: "Blacklist with wildcard - matching pattern",
|
|
nicName: "eth1",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}},
|
|
isBlacklist: true,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
{
|
|
name: "Blacklist with wildcard - non-matching pattern",
|
|
nicName: "wlan0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}},
|
|
isBlacklist: true,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Empty whitelist config - no NICs allowed",
|
|
nicName: "eth0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{},
|
|
isBlacklist: false,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
{
|
|
name: "Empty blacklist config - all NICs allowed",
|
|
nicName: "eth0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{},
|
|
isBlacklist: true,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Multiple patterns - exact match",
|
|
nicName: "eth0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan*": {}},
|
|
isBlacklist: false,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Multiple patterns - wildcard match",
|
|
nicName: "wlan1",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: true,
|
|
},
|
|
{
|
|
name: "Multiple patterns - no match",
|
|
nicName: "bond0",
|
|
config: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
expectedValid: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := isValidNic(tt.nicName, tt.config)
|
|
assert.Equal(t, tt.expectedValid, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewNicConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
nicsEnvVal string
|
|
expectedCfg *NicConfig
|
|
}{
|
|
{
|
|
name: "Empty string",
|
|
nicsEnvVal: "",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{},
|
|
isBlacklist: false,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "Single NIC whitelist",
|
|
nicsEnvVal: "eth0",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "Multiple NICs whitelist",
|
|
nicsEnvVal: "eth0,wlan0",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan0": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "Blacklist mode",
|
|
nicsEnvVal: "-eth0,wlan0",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan0": {}},
|
|
isBlacklist: true,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "With wildcards",
|
|
nicsEnvVal: "eth*,wlan0",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}, "wlan0": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
},
|
|
{
|
|
name: "Blacklist with wildcards",
|
|
nicsEnvVal: "-eth*,wlan0",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}, "wlan0": {}},
|
|
isBlacklist: true,
|
|
hasWildcards: true,
|
|
},
|
|
},
|
|
{
|
|
name: "With whitespace",
|
|
nicsEnvVal: "eth0, wlan0 , eth1",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "wlan0": {}, "eth1": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "Only wildcards",
|
|
nicsEnvVal: "eth*,wlan*",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth*": {}, "wlan*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
},
|
|
{
|
|
name: "Leading dash only",
|
|
nicsEnvVal: "-",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{},
|
|
isBlacklist: true,
|
|
hasWildcards: false,
|
|
},
|
|
},
|
|
{
|
|
name: "Mixed exact and wildcard",
|
|
nicsEnvVal: "eth0,br-*",
|
|
expectedCfg: &NicConfig{
|
|
nics: map[string]struct{}{"eth0": {}, "br-*": {}},
|
|
isBlacklist: false,
|
|
hasWildcards: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
cfg := newNicConfig(tt.nicsEnvVal)
|
|
require.NotNil(t, cfg)
|
|
assert.Equal(t, tt.expectedCfg.isBlacklist, cfg.isBlacklist)
|
|
assert.Equal(t, tt.expectedCfg.hasWildcards, cfg.hasWildcards)
|
|
assert.Equal(t, tt.expectedCfg.nics, cfg.nics)
|
|
})
|
|
}
|
|
}
|