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