| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package service
- import "testing"
- // Xray access-log lines carry attacker-influenced content (a client's requested
- // destination is logged verbatim) and can be truncated. parseAccessLogFields
- // must never panic on a short or malformed line, and must still parse a
- // well-formed line correctly.
- func TestParseAccessLogFields(t *testing.T) {
- malformed := []string{
- "",
- "singletoken",
- "2024/01/02",
- "2024/01/02 15:04:05.000000 from",
- "2024/01/02 15:04:05.000000 accepted",
- "2024/01/02 15:04:05.000000 email:",
- }
- for _, line := range malformed {
- func() {
- defer func() {
- if r := recover(); r != nil {
- t.Errorf("parseAccessLogFields panicked on %q: %v", line, r)
- }
- }()
- _ = parseAccessLogFields(line)
- }()
- }
- line := "2024/01/02 15:04:05.123456 from 1.2.3.4:555 accepted tcp:example.com:443 [inbound-tag >> outbound-tag] email: [email protected]"
- entry := parseAccessLogFields(line)
- if entry.FromAddress != "1.2.3.4:555" {
- t.Errorf("FromAddress = %q, want %q", entry.FromAddress, "1.2.3.4:555")
- }
- if entry.ToAddress != "tcp:example.com:443" {
- t.Errorf("ToAddress = %q, want %q", entry.ToAddress, "tcp:example.com:443")
- }
- if entry.Inbound != "inbound-tag" {
- t.Errorf("Inbound = %q, want %q", entry.Inbound, "inbound-tag")
- }
- if entry.Outbound != "outbound-tag" {
- t.Errorf("Outbound = %q, want %q", entry.Outbound, "outbound-tag")
- }
- if entry.Email != "[email protected]" {
- t.Errorf("Email = %q, want %q", entry.Email, "[email protected]")
- }
- if entry.DateTime.IsZero() {
- t.Error("DateTime was not parsed from a well-formed line")
- }
- }
|