package service import ( "strings" "testing" ) const journalSentinel = "SUPER_SECRET_SENTINEL" func TestSanitizeLogTextRemovesMachineTokenFromUrl(t *testing.T) { raw := `Aug 27 12:00:01 host hysteria[123]: {"level":"error","msg":"auth backend error: ` + `Post \"http://127.0.0.1:8080/internal/hysteria/auth?access_token=` + journalSentinel + `\": EOF"}` sanitized := SanitizeLogText(raw) if strings.Contains(sanitized, journalSentinel) { t.Fatalf("machine token остался в журнале: %s", sanitized) } // Адрес обязан остаться читаемым: диагностика теряет смысл, если из строки // пропадает host и path. if !strings.Contains(sanitized, "127.0.0.1:8080/internal/hysteria/auth") { t.Fatalf("санитайз съел адрес целиком: %s", sanitized) } } func TestSanitizeLogTextRemovesBareAssignments(t *testing.T) { cases := []string{ "connecting with access_token=" + journalSentinel, "trafficStats secret=" + journalSentinel + " rejected", "obfs password: " + journalSentinel, "Authorization=" + journalSentinel, } for _, raw := range cases { sanitized := SanitizeLogText(raw) if strings.Contains(sanitized, journalSentinel) { t.Errorf("секрет остался в строке %q: %s", raw, sanitized) } } } func TestSanitizeLogTextKeepsOrdinaryLines(t *testing.T) { raw := "server up and running, listening on 0.0.0.0:443" if sanitized := SanitizeLogText(raw); sanitized != raw { t.Fatalf("обычная строка изменена: %q -> %q", raw, sanitized) } } // Хвостовая пунктуация не является частью адреса. func TestSanitizeLogTextKeepsTrailingPunctuation(t *testing.T) { raw := "failed to call http://127.0.0.1:8080/internal/hysteria/auth?access_token=" + journalSentinel + "." sanitized := SanitizeLogText(raw) if strings.Contains(sanitized, journalSentinel) { t.Fatalf("machine token остался: %s", sanitized) } if !strings.HasSuffix(sanitized, ".") { t.Fatalf("потеряна хвостовая пунктуация: %s", sanitized) } } // Двойной проход не должен ломать уже вырезанное значение. func TestSanitizeLogTextIsIdempotent(t *testing.T) { raw := "http://127.0.0.1:8080/internal/hysteria/auth?access_token=" + journalSentinel once := SanitizeLogText(raw) twice := SanitizeLogText(once) if once != twice { t.Fatalf("санитайз не идемпотентен: %q -> %q", once, twice) } } func TestSanitizeLogTextEmptyInput(t *testing.T) { if SanitizeLogText("") != "" { t.Fatal("пустой вход должен оставаться пустым") } }