94 lines
3.1 KiB
Go
94 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"lingniu-vehicle-ingest/go/vehicle-gateway/internal/envelope"
|
|
)
|
|
|
|
func TestNATSSinkConfigFromEnvUsesExplicitSubjects(t *testing.T) {
|
|
t.Setenv("NATS_URL", "nats://172.17.111.56:4222")
|
|
t.Setenv("NATS_SUBJECT_GB32960_RAW", "custom.raw.gb32960")
|
|
t.Setenv("NATS_SUBJECT_JT808_RAW", "custom.raw.jt808")
|
|
t.Setenv("NATS_SUBJECT_YUTONG_MQTT_RAW", "custom.raw.yutong")
|
|
t.Setenv("NATS_SUBJECT_UNIFIED", "custom.unified")
|
|
|
|
cfg := natsSinkConfigFromEnv()
|
|
|
|
if got, want := cfg.URL, "nats://172.17.111.56:4222"; got != want {
|
|
t.Fatalf("URL = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolGB32960], "custom.raw.gb32960"; got != want {
|
|
t.Fatalf("gb32960 subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolJT808], "custom.raw.jt808"; got != want {
|
|
t.Fatalf("jt808 subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolYutongMQTT], "custom.raw.yutong"; got != want {
|
|
t.Fatalf("yutong subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.UnifiedSubject, "custom.unified"; got != want {
|
|
t.Fatalf("unified subject = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestGatewayConfiguresIdentityLookupCacheTTL(t *testing.T) {
|
|
source, err := os.ReadFile("main.go")
|
|
if err != nil {
|
|
t.Fatalf("read main.go: %v", err)
|
|
}
|
|
for _, want := range []string{"LookupCacheTTL", "IDENTITY_LOOKUP_CACHE_TTL_SECONDS"} {
|
|
if !strings.Contains(string(source), want) {
|
|
t.Fatalf("gateway should expose identity lookup cache ttl, missing %s", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGatewayDefaultsTo100KConnectionCeiling(t *testing.T) {
|
|
source, err := os.ReadFile("main.go")
|
|
if err != nil {
|
|
t.Fatalf("read main.go: %v", err)
|
|
}
|
|
if !strings.Contains(string(source), `envInt("TCP_MAX_CONNECTIONS", 120_000)`) {
|
|
t.Fatal("gateway should default TCP_MAX_CONNECTIONS to a 100K-ready ceiling")
|
|
}
|
|
}
|
|
|
|
func TestGatewayPassesMetricsRegistryToAsyncSink(t *testing.T) {
|
|
source, err := os.ReadFile("main.go")
|
|
if err != nil {
|
|
t.Fatalf("read main.go: %v", err)
|
|
}
|
|
for _, want := range []string{
|
|
"buildSink(ctx, logger, registry)",
|
|
"Metrics: registry",
|
|
`Name: "nats"`,
|
|
`Name: "kafka"`,
|
|
} {
|
|
if !strings.Contains(string(source), want) {
|
|
t.Fatalf("gateway async sink metrics wiring missing %s", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNATSSinkConfigFromEnvDefaultsToGoSubjects(t *testing.T) {
|
|
t.Setenv("NATS_URL", "nats://172.17.111.56:4222")
|
|
|
|
cfg := natsSinkConfigFromEnv()
|
|
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolGB32960], "vehicle.raw.go.gb32960.v1"; got != want {
|
|
t.Fatalf("gb32960 subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolJT808], "vehicle.raw.go.jt808.v1"; got != want {
|
|
t.Fatalf("jt808 subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.RawSubjects[envelope.ProtocolYutongMQTT], "vehicle.raw.go.yutong-mqtt.v1"; got != want {
|
|
t.Fatalf("yutong subject = %q, want %q", got, want)
|
|
}
|
|
if got, want := cfg.UnifiedSubject, "vehicle.event.go.unified.v1"; got != want {
|
|
t.Fatalf("unified subject = %q, want %q", got, want)
|
|
}
|
|
}
|