Files
lingniu-vehicle-ingest/go/vehicle-gateway/internal/authentication/authentication_test.go

112 lines
3.7 KiB
Go

package authentication
import (
"strings"
"testing"
"lingniu-vehicle-ingest/go/vehicle-gateway/internal/envelope"
)
func TestGB32960PlatformAuthenticatorModes(t *testing.T) {
env := envelope.FrameEnvelope{
Protocol: envelope.ProtocolGB32960,
MessageID: "0x05",
Parsed: map[string]any{
"platform_login": map[string]any{"username": "platform-a", "password": "secret-a"},
},
}
accepted := NewGB32960PlatformAuthenticator(ModeEnforce, map[string][]string{"platform-a": {"secret-a"}}).Authenticate(env)
if !accepted.Applicable || !accepted.Allowed || accepted.Status != StatusAccepted {
t.Fatalf("accepted result = %#v", accepted)
}
rejected := NewGB32960PlatformAuthenticator(ModeEnforce, map[string][]string{"platform-a": {"other"}}).Authenticate(env)
if !rejected.Applicable || rejected.Allowed || rejected.Status != StatusRejected {
t.Fatalf("enforced rejected result = %#v", rejected)
}
observed := NewGB32960PlatformAuthenticator(ModeObserve, map[string][]string{"platform-a": {"other"}}).Authenticate(env)
if !observed.Allowed || observed.Status != StatusRejected {
t.Fatalf("observed rejected result = %#v", observed)
}
}
func TestGB32960PlatformAuthenticatorReportsUnknownAccount(t *testing.T) {
env := envelope.FrameEnvelope{
Protocol: envelope.ProtocolGB32960,
MessageID: "0x05",
Parsed: map[string]any{
"platform_login": map[string]any{"username": "unknown", "password": "secret"},
},
}
result := NewGB32960PlatformAuthenticator(ModeEnforce, map[string][]string{"known": {"secret"}}).Authenticate(env)
if result.Allowed || result.Status != StatusUnknownAccount {
t.Fatalf("result = %#v", result)
}
}
func TestJT808AuthenticatorValidatesAuthenticationFrame(t *testing.T) {
env := envelope.FrameEnvelope{
Protocol: envelope.ProtocolJT808,
MessageID: "0x0102",
Parsed: map[string]any{
"authentication": map[string]any{"token": "issued-code"},
},
}
accepted := NewJT808Authenticator(ModeEnforce, "issued-code", nil).Authenticate(env)
if !accepted.Allowed || accepted.Status != StatusAccepted {
t.Fatalf("accepted result = %#v", accepted)
}
rejected := NewJT808Authenticator(ModeEnforce, "different-code", nil).Authenticate(env)
if rejected.Allowed || rejected.Status != StatusRejected {
t.Fatalf("rejected result = %#v", rejected)
}
}
func TestJT808AuthenticatorAcceptsDeviceSnapshotToken(t *testing.T) {
env := envelope.FrameEnvelope{
Protocol: envelope.ProtocolJT808,
MessageID: "0x0102",
Phone: "013307795425",
Parsed: map[string]any{
"authentication": map[string]any{"token": "device-code"},
},
}
provider := staticJT808DeviceTokens{"13307795425": "device-code"}
result := NewJT808Authenticator(ModeEnforce, "configured-code", provider).Authenticate(env)
if !result.Allowed || result.Status != StatusAccepted || result.Source != "device" {
t.Fatalf("device token result = %#v", result)
}
}
type staticJT808DeviceTokens map[string]string
func (p staticJT808DeviceTokens) JT808AuthToken(phone string) (string, bool) {
phone = strings.TrimLeft(phone, "0")
token, ok := p[phone]
return token, ok
}
func TestRedactParsedCredentialsRemovesGB32960Password(t *testing.T) {
login := map[string]any{"username": "platform-a", "password": "secret-a"}
env := envelope.FrameEnvelope{
Protocol: envelope.ProtocolGB32960,
Parsed: map[string]any{"platform_login": login},
}
RedactParsedCredentials(&env)
if _, exists := login["password"]; exists {
t.Fatalf("password remained in parsed login: %#v", login)
}
if login["password_present"] != true {
t.Fatalf("password presence marker missing: %#v", login)
}
}
func TestParseModeRejectsUnknownValue(t *testing.T) {
if _, err := ParseMode("strict-ish", ModeObserve); err == nil {
t.Fatal("expected unsupported mode error")
}
}