Files
go-sip/internal/config/dispatcher_runtime_test.go
T

91 lines
3.7 KiB
Go

package config
import (
"os"
"path/filepath"
"strings"
"testing"
)
func setCurrentDispatcherRuntimeEnvironment(t *testing.T) string {
t.Helper()
database := setDispatcherEnvironment(t)
root := t.TempDir()
for name, value := range map[string]string{
"DISPATCHER_GRPC_LISTEN": "127.0.0.1:0",
"DISPATCHER_AGENT_ENDPOINTS_FILE": filepath.Join(root, "agent-endpoints.json"),
"DISPATCHER_OSS_CONFIG_FILE": filepath.Join(root, "oss.json"),
"MTLS_CA_FILE": filepath.Join(root, "ca.pem"),
"MTLS_CERT_FILE": filepath.Join(root, "dispatcher.pem"),
"MTLS_KEY_FILE": filepath.Join(root, "dispatcher.key"),
"MTLS_PEER_CERT_FINGERPRINTS": strings.Repeat("a", 64),
} {
t.Setenv(name, value)
}
return database
}
func TestLoadSIPOnlyDispatcherRequiresNoRecordingOrCallListener(t *testing.T) {
setCurrentDispatcherRuntimeEnvironment(t)
t.Setenv("DISPATCHER_GRPC_LISTEN", "")
t.Setenv("DISPATCHER_OSS_CONFIG_FILE", "")
t.Setenv("MTLS_PEER_CERT_FINGERPRINTS", "")
settings, err := LoadDispatcherRuntimeEnvironment("sip-only")
if err != nil || settings.AgentEndpointsFile == "" || settings.OSSConfigFile != "" || settings.Listen != "" {
t.Fatalf("SIP-only process inherited Mock business listeners: %+v %v", settings, err)
}
}
func TestLoadDispatcherRuntimeEnvironmentRequiresExplicitMockDeployment(t *testing.T) {
database := setCurrentDispatcherRuntimeEnvironment(t)
settings, err := LoadDispatcherRuntimeEnvironment("mock")
if err != nil {
t.Fatal(err)
}
if settings.DispatcherID != dispatcherFixtureID || settings.SQLitePath != database || settings.Listen != "127.0.0.1:0" ||
settings.AgentEndpointsFile == "" || settings.OSSConfigFile == "" || len(settings.PeerFingerprints) != 1 {
t.Fatal("Dispatcher deployment values were lost or replaced by a default")
}
if _, err := os.Stat(database); !os.IsNotExist(err) {
t.Fatalf("preflight opened the business database: %v", err)
}
for _, name := range []string{
"DISPATCHER_GRPC_LISTEN", "DISPATCHER_AGENT_ENDPOINTS_FILE", "DISPATCHER_OSS_CONFIG_FILE",
"MTLS_CA_FILE", "MTLS_CERT_FILE", "MTLS_KEY_FILE", "MTLS_PEER_CERT_FINGERPRINTS",
} {
t.Run(name, func(t *testing.T) {
setCurrentDispatcherRuntimeEnvironment(t)
t.Setenv(name, "")
if _, err := LoadDispatcherRuntimeEnvironment("mock"); err == nil || !strings.Contains(err.Error(), name) {
t.Fatalf("missing Dispatcher setting silently inherited an old default: %v", err)
}
})
}
}
func TestLoadDispatcherRuntimeEnvironmentRejectsExternalOrUnsupportedModeWithoutIO(t *testing.T) {
for _, mode := range []string{"real", "mixed", ""} {
t.Run(mode, func(t *testing.T) {
database := setCurrentDispatcherRuntimeEnvironment(t)
if _, err := LoadDispatcherRuntimeEnvironment(mode); err == nil || !strings.Contains(err.Error(), "Mock") {
t.Fatalf("unapproved mode was admitted: %v", err)
}
if _, err := os.Stat(database); !os.IsNotExist(err) {
t.Fatalf("mode rejection opened SQLite: %v", err)
}
})
}
setCurrentDispatcherRuntimeEnvironment(t)
const external = "0.0.0.0:19443"
t.Setenv("DISPATCHER_GRPC_LISTEN", external)
if _, err := LoadDispatcherRuntimeEnvironment("mock"); err == nil || !strings.Contains(err.Error(), "DISPATCHER_GRPC_LISTEN") || strings.Contains(err.Error(), external) {
t.Fatalf("external Mock listener was admitted or echoed: %v", err)
}
setCurrentDispatcherRuntimeEnvironment(t)
const invalid = "not-a-fingerprint"
t.Setenv("MTLS_PEER_CERT_FINGERPRINTS", invalid)
if _, err := LoadDispatcherRuntimeEnvironment("mock"); err == nil || !strings.Contains(err.Error(), "MTLS_PEER_CERT_FINGERPRINTS") || strings.Contains(err.Error(), invalid) {
t.Fatalf("unapproved peer fingerprint was accepted or echoed: %v", err)
}
}