85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/Wikid82/charon/backend/internal/models"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFlattenConfig_NestedAndScalars(t *testing.T) {
|
|
result := map[string]string{}
|
|
input := map[string]interface{}{
|
|
"security": map[string]interface{}{
|
|
"acl": map[string]interface{}{
|
|
"enabled": true,
|
|
},
|
|
"admin_whitelist": "192.0.2.0/24",
|
|
},
|
|
"port": 8080,
|
|
}
|
|
|
|
flattenConfig(input, "", result)
|
|
|
|
require.Equal(t, "true", result["security.acl.enabled"])
|
|
require.Equal(t, "192.0.2.0/24", result["security.admin_whitelist"])
|
|
require.Equal(t, "8080", result["port"])
|
|
}
|
|
|
|
func TestValidateAdminWhitelist(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
whitelist string
|
|
wantErr bool
|
|
}{
|
|
{name: "empty valid", whitelist: "", wantErr: false},
|
|
{name: "single valid cidr", whitelist: "192.0.2.0/24", wantErr: false},
|
|
{name: "multiple with spaces", whitelist: "192.0.2.0/24, 203.0.113.1/32", wantErr: false},
|
|
{name: "blank entries ignored", whitelist: "192.0.2.0/24, ,", wantErr: false},
|
|
{name: "invalid no slash", whitelist: "192.0.2.1", wantErr: true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := validateAdminWhitelist(tt.whitelist)
|
|
if tt.wantErr {
|
|
require.Error(t, err)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSettingsHandler_EnsureSecurityConfigEnabledWithDB(t *testing.T) {
|
|
db := OpenTestDBWithMigrations(t)
|
|
h := NewSettingsHandler(db)
|
|
|
|
require.NoError(t, h.ensureSecurityConfigEnabledWithDB(db))
|
|
|
|
var cfg models.SecurityConfig
|
|
require.NoError(t, db.Where("name = ?", "default").First(&cfg).Error)
|
|
require.True(t, cfg.Enabled)
|
|
|
|
cfg.Enabled = false
|
|
require.NoError(t, db.Save(&cfg).Error)
|
|
require.NoError(t, h.ensureSecurityConfigEnabledWithDB(db))
|
|
require.NoError(t, db.Where("name = ?", "default").First(&cfg).Error)
|
|
require.True(t, cfg.Enabled)
|
|
}
|
|
|
|
func TestSettingsHandler_SyncAdminWhitelistWithDB(t *testing.T) {
|
|
db := OpenTestDBWithMigrations(t)
|
|
h := NewSettingsHandler(db)
|
|
|
|
require.NoError(t, h.syncAdminWhitelistWithDB(db, "198.51.100.0/24"))
|
|
|
|
var cfg models.SecurityConfig
|
|
require.NoError(t, db.Where("name = ?", "default").First(&cfg).Error)
|
|
require.Equal(t, "198.51.100.0/24", cfg.AdminWhitelist)
|
|
|
|
require.NoError(t, h.syncAdminWhitelistWithDB(db, "203.0.113.0/24"))
|
|
require.NoError(t, db.Where("name = ?", "default").First(&cfg).Error)
|
|
require.Equal(t, "203.0.113.0/24", cfg.AdminWhitelist)
|
|
}
|