47 lines
1.8 KiB
Go
47 lines
1.8 KiB
Go
package companion
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestCompanionVehicleHandlerCapabilityIsExplicitAndBounded(t *testing.T) {
|
|
base := append([]string(nil), requiredCapabilities...)
|
|
if err := validateCapabilities(base); err != nil {
|
|
t.Fatalf("base companion profile must remain valid: %v", err)
|
|
}
|
|
if err := validateCapabilities(append(base, "handler.vehicle.spawn")); err != nil {
|
|
t.Fatalf("explicit vehicle handler declaration must be valid: %v", err)
|
|
}
|
|
if err := validateCapabilities(append(base, "handler.raw.rcon")); err == nil {
|
|
t.Fatal("undeclared raw command handler capability must be rejected")
|
|
}
|
|
}
|
|
|
|
func TestLoadConfigDeclaresRawTrajectoryCollection(t *testing.T) {
|
|
config := loadTestConfig(t)
|
|
if !config.Trajectory.Enabled || config.Trajectory.Source != TrajectorySourceSCUMSQLite || config.Trajectory.Store != TrajectoryStoreSharedPlatformMySQL {
|
|
t.Fatalf("trajectory collection is not enabled with plugin-owned source/store: %+v", config.Trajectory)
|
|
}
|
|
if config.Trajectory.FileEnv != SCUMDatabaseFileEnvironment || config.Trajectory.IntervalSeconds != DefaultTrajectoryCollectionIntervalSecs || config.Trajectory.MaxRows != DefaultTrajectoryCollectionMaxRows {
|
|
t.Fatalf("trajectory collection did not use bounded defaults: %+v", config.Trajectory)
|
|
}
|
|
}
|
|
|
|
func TestTrajectoryConfigRejectsUnsafeEnvironmentNames(t *testing.T) {
|
|
fixture := strings.ReplaceAll(string(mustReadConfigFixture(t)), "fileEnv: SCUM_DB_FILE", "fileEnv: PATH")
|
|
if _, err := LoadConfig(strings.NewReader(fixture)); err == nil || !strings.Contains(err.Error(), "environment") {
|
|
t.Fatalf("expected reserved env name to be rejected, got %v", err)
|
|
}
|
|
}
|
|
|
|
func mustReadConfigFixture(t *testing.T) []byte {
|
|
t.Helper()
|
|
payload, err := os.ReadFile("config.yaml.example")
|
|
if err != nil {
|
|
t.Fatalf("read config fixture: %v", err)
|
|
}
|
|
return payload
|
|
}
|