opensnitch/daemon/ui/client_test.go

97 lines
3.1 KiB
Go
Raw Normal View History

package ui
import (
"encoding/json"
"testing"
"time"
"github.com/evilsocket/opensnitch/daemon/core"
"github.com/evilsocket/opensnitch/daemon/firewall/iptables"
"github.com/evilsocket/opensnitch/daemon/log"
"github.com/evilsocket/opensnitch/daemon/log/loggers"
"github.com/evilsocket/opensnitch/daemon/procmon"
"github.com/evilsocket/opensnitch/daemon/rule"
"github.com/evilsocket/opensnitch/daemon/statistics"
"github.com/evilsocket/opensnitch/daemon/ui/config"
)
var (
defaultConfig = &config.Config{
ProcMonitorMethod: procmon.MethodProc,
DefaultAction: "allow",
DefaultDuration: "once",
InterceptUnknown: false,
Firewall: "nftables",
2024-10-19 20:43:45 +02:00
Rules: config.RulesOptions{
Path: "/etc/opensnitchd/rules",
},
}
)
func restoreConfigFile(t *testing.T) {
// start from a clean state
if _, err := core.Exec("cp", []string{
// unmodified default config
"./testdata/default-config.json.orig",
// config will be modified by some tests
"./testdata/default-config.json",
}); err != nil {
t.Errorf("error copying default config file: %s", err)
}
}
func validateConfig(t *testing.T, uiClient *Client, cfg *config.Config) {
if uiClient.ProcMonitorMethod() != cfg.ProcMonitorMethod || procmon.GetMonitorMethod() != uiClient.ProcMonitorMethod() {
t.Errorf("not expected ProcMonitorMethod value: %s, expected: %s, procmon.MonitorMethod: %s", uiClient.ProcMonitorMethod(), cfg.ProcMonitorMethod, procmon.GetMonitorMethod())
}
if uiClient.GetFirewallType() != cfg.Firewall {
t.Errorf("not expected FirewallType value: %s, expected: %s", uiClient.GetFirewallType(), cfg.Firewall)
}
if uiClient.InterceptUnknown() != cfg.InterceptUnknown {
t.Errorf("not expected InterceptUnknown value: %v, expected: %v", uiClient.InterceptUnknown(), cfg.InterceptUnknown)
}
if uiClient.DefaultAction() != rule.Action(cfg.DefaultAction) {
t.Errorf("not expected DefaultAction value: %s, expected: %s", clientDisconnectedRule.Action, cfg.DefaultAction)
}
}
func TestClientConfigReloading(t *testing.T) {
restoreConfigFile(t)
2023-12-17 00:39:41 +01:00
cfgFile := "./testdata/default-config.json"
rules, err := rule.NewLoader(false)
if err != nil {
log.Fatal("")
}
stats := statistics.New(rules)
loggerMgr := loggers.NewLoggerManager()
2023-12-17 00:39:41 +01:00
uiClient := NewClient("unix:///tmp/osui.sock", cfgFile, stats, rules, loggerMgr)
t.Run("validate-load-config", func(t *testing.T) {
validateConfig(t, uiClient, defaultConfig)
})
t.Run("validate-reload-config", func(t *testing.T) {
reloadConfig := *defaultConfig
//reloadConfig.ProcMonitorMethod = procmon.MethodProc
reloadConfig.DefaultAction = string(rule.Deny)
reloadConfig.InterceptUnknown = true
reloadConfig.Firewall = iptables.Name
2024-10-19 20:43:45 +02:00
reloadConfig.FwOptions.QueueBypass = true
reloadConfig.Server.Address = "unix:///run/user/1000/opensnitch/osui.sock"
plainJSON, err := json.Marshal(reloadConfig)
if err != nil {
t.Errorf("Error marshalling config: %s", err)
}
if err = config.Save(configFile, string(plainJSON)); err != nil {
t.Errorf("error saving config to disk: %s", err)
}
2024-10-19 20:43:45 +02:00
// wait for the config to load
time.Sleep(time.Second * 10)
validateConfig(t, uiClient, &reloadConfig)
})
}