123 lines
3.7 KiB
Go
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)
|
|
}
|
|
}
|