Files
portmaster/spn/navigator/module_test.go
Alexandr Stelnykovych 58f4058633 v2 tests fix (#1956)
* v2 tests fix
* test: added tests for sqlite
2025-08-07 02:04:38 +03:00

123 lines
3.7 KiB
Go

package navigator
import (
"fmt"
"os"
"path/filepath"
"testing"
"github.com/safing/portmaster/base/api"
"github.com/safing/portmaster/base/config"
"github.com/safing/portmaster/base/database/dbmodule"
"github.com/safing/portmaster/base/log"
"github.com/safing/portmaster/base/notifications"
"github.com/safing/portmaster/service/configure"
"github.com/safing/portmaster/service/intel/geoip"
"github.com/safing/portmaster/service/ui"
"github.com/safing/portmaster/service/updates"
)
type testInstance struct {
db *dbmodule.DBModule
config *config.Config
intelUpdates *updates.Updater
geoip *geoip.GeoIP
}
func (stub *testInstance) IntelUpdates() *updates.Updater { return stub.intelUpdates }
func (stub *testInstance) Config() *config.Config { return stub.config }
func (stub *testInstance) Notifications() *notifications.Notifications { return nil }
func (stub *testInstance) Ready() bool { return true }
func (stub *testInstance) Restart() {}
func (stub *testInstance) Shutdown() {}
func (stub *testInstance) SetCmdLineOperation(f func() error) {}
func (stub *testInstance) BinaryUpdates() *updates.Updater { return nil }
func (stub *testInstance) UI() *ui.UI { return nil }
func (stub *testInstance) DataDir() string { return _dataDir }
var _dataDir string
func runTest(m *testing.M) error {
var err error
// Create a temporary directory for testing
_dataDir, err = os.MkdirTemp("", "")
if err != nil {
return fmt.Errorf("failed to create temporary data directory: %w", err)
}
defer func() { _ = os.RemoveAll(_dataDir) }()
// Initialize the Intel update configuration
intelUpdateConfig := updates.Config{
Name: configure.DefaultIntelIndexName,
Directory: filepath.Join(_dataDir, "test_intel"),
DownloadDirectory: filepath.Join(_dataDir, "test_download_intel"),
PurgeDirectory: filepath.Join(_dataDir, "test_upgrade_obsolete_intel"),
IndexURLs: configure.DefaultIntelIndexURLs,
IndexFile: "index.json",
AutoCheck: true,
AutoDownload: true,
AutoApply: true,
}
// Set the default API listen address
api.SetDefaultAPIListenAddress("0.0.0.0:8080")
// Initialize the instance with the necessary components
stub := &testInstance{}
log.SetLogLevel(log.DebugLevel)
// Init
stub.db, err = dbmodule.New(stub)
if err != nil {
return fmt.Errorf("failed to create db: %w", err)
}
stub.config, err = config.New(stub)
if err != nil {
return fmt.Errorf("failed to create config: %w", err)
}
stub.intelUpdates, err = updates.New(stub, "Intel Updater", intelUpdateConfig)
if err != nil {
return fmt.Errorf("failed to create updates: %w", err)
}
stub.geoip, err = geoip.New(stub)
if err != nil {
return fmt.Errorf("failed to create geoip: %w", err)
}
module, err = New(stub)
if err != nil {
return fmt.Errorf("failed to create navigator module: %w", err)
}
// Start
err = stub.db.Start()
if err != nil {
return fmt.Errorf("failed to start db module: %w", err)
}
err = stub.config.Start()
if err != nil {
return fmt.Errorf("failed to start config: %w", err)
}
err = stub.intelUpdates.Start()
if err != nil {
return fmt.Errorf("failed to start updates: %w", err)
}
err = stub.geoip.Start()
if err != nil {
return fmt.Errorf("failed to start geoip module: %w", err)
}
err = module.Start()
if err != nil {
return fmt.Errorf("failed to start navigator module: %w", err)
}
m.Run()
return nil
}
func TestMain(m *testing.M) {
if err := runTest(m); err != nil {
fmt.Printf("%s\n", err)
os.Exit(1)
}
}