123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package safelog
- import (
- "bytes"
- "log"
- "testing"
- )
- //Check to make sure that addresses split across calls to write are still scrubbed
- func TestLogScrubberSplit(t *testing.T) {
- input := []byte("test\nhttp2: panic serving [2620:101:f000:780:9097:75b1:519f:dbb8]:58344: interface conversion: *http2.responseWriter is not http.Hijacker: missing method Hijack\n")
- expected := "test\nhttp2: panic serving [scrubbed]: interface conversion: *http2.responseWriter is not http.Hijacker: missing method Hijack\n"
- var buff bytes.Buffer
- scrubber := &LogScrubber{Output: &buff}
- n, err := scrubber.Write(input[:12]) //test\nhttp2:
- if n != 12 {
- t.Errorf("wrong number of bytes %d", n)
- }
- if err != nil {
- t.Errorf("%q", err)
- }
- if buff.String() != "test\n" {
- t.Errorf("Got %q, expected %q", buff.String(), "test\n")
- }
- n, err = scrubber.Write(input[12:30]) //panic serving [2620:101:f
- if n != 18 {
- t.Errorf("wrong number of bytes %d", n)
- }
- if err != nil {
- t.Errorf("%q", err)
- }
- if buff.String() != "test\n" {
- t.Errorf("Got %q, expected %q", buff.String(), "test\n")
- }
- n, err = scrubber.Write(input[30:]) //000:780:9097:75b1:519f:dbb8]:58344: interface conversion: *http2.responseWriter is not http.Hijacker: missing method Hijack\n
- if n != (len(input) - 30) {
- t.Errorf("wrong number of bytes %d", n)
- }
- if err != nil {
- t.Errorf("%q", err)
- }
- if buff.String() != expected {
- t.Errorf("Got %q, expected %q", buff.String(), expected)
- }
- }
- //Test the log scrubber on known problematic log messages
- func TestLogScrubberMessages(t *testing.T) {
- for _, test := range []struct {
- input, expected string
- }{
- {
- "http: TLS handshake error from 129.97.208.23:38310: ",
- "http: TLS handshake error from [scrubbed]: \n",
- },
- {
- "http2: panic serving [2620:101:f000:780:9097:75b1:519f:dbb8]:58344: interface conversion: *http2.responseWriter is not http.Hijacker: missing method Hijack",
- "http2: panic serving [scrubbed]: interface conversion: *http2.responseWriter is not http.Hijacker: missing method Hijack\n",
- },
- {
- //Make sure it doesn't scrub fingerprint
- "a=fingerprint:sha-256 33:B6:FA:F6:94:CA:74:61:45:4A:D2:1F:2C:2F:75:8A:D9:EB:23:34:B2:30:E9:1B:2A:A6:A9:E0:44:72:CC:74",
- "a=fingerprint:sha-256 33:B6:FA:F6:94:CA:74:61:45:4A:D2:1F:2C:2F:75:8A:D9:EB:23:34:B2:30:E9:1B:2A:A6:A9:E0:44:72:CC:74\n",
- },
- {
- //try with enclosing parens
- "(1:2:3:4:c:d:e:f) {1:2:3:4:c:d:e:f}",
- "([scrubbed]) {[scrubbed]}\n",
- },
- {
- //Make sure it doesn't scrub timestamps
- "2019/05/08 15:37:31 starting",
- "2019/05/08 15:37:31 starting\n",
- },
- } {
- var buff bytes.Buffer
- log.SetFlags(0) //remove all extra log output for test comparisons
- log.SetOutput(&LogScrubber{Output: &buff})
- log.Print(test.input)
- if buff.String() != test.expected {
- t.Errorf("%q: got %q, expected %q", test.input, buff.String(), test.expected)
- }
- }
- }
- func TestLogScrubberGoodFormats(t *testing.T) {
- for _, addr := range []string{
- // IPv4
- "1.2.3.4",
- "255.255.255.255",
- // IPv4 with port
- "1.2.3.4:55",
- "255.255.255.255:65535",
- // IPv6
- "1:2:3:4:c:d:e:f",
- "1111:2222:3333:4444:CCCC:DDDD:EEEE:FFFF",
- // IPv6 with brackets
- "[1:2:3:4:c:d:e:f]",
- "[1111:2222:3333:4444:CCCC:DDDD:EEEE:FFFF]",
- // IPv6 with brackets and port
- "[1:2:3:4:c:d:e:f]:55",
- "[1111:2222:3333:4444:CCCC:DDDD:EEEE:FFFF]:65535",
- // compressed IPv6
- "::f",
- "::d:e:f",
- "1:2:3::",
- "1:2:3::d:e:f",
- "1:2:3:d:e:f::",
- "::1:2:3:d:e:f",
- "1111:2222:3333::DDDD:EEEE:FFFF",
- // compressed IPv6 with brackets
- "[::d:e:f]",
- "[1:2:3::]",
- "[1:2:3::d:e:f]",
- "[1111:2222:3333::DDDD:EEEE:FFFF]",
- "[1:2:3:4:5:6::8]",
- "[1::7:8]",
- // compressed IPv6 with brackets and port
- "[1::]:58344",
- "[::d:e:f]:55",
- "[1:2:3::]:55",
- "[1:2:3::d:e:f]:55",
- "[1111:2222:3333::DDDD:EEEE:FFFF]:65535",
- // IPv4-compatible and IPv4-mapped
- "::255.255.255.255",
- "::ffff:255.255.255.255",
- "[::255.255.255.255]",
- "[::ffff:255.255.255.255]",
- "[::255.255.255.255]:65535",
- "[::ffff:255.255.255.255]:65535",
- "[::ffff:0:255.255.255.255]",
- "[2001:db8:3:4::192.0.2.33]",
- } {
- var buff bytes.Buffer
- log.SetFlags(0) //remove all extra log output for test comparisons
- log.SetOutput(&LogScrubber{Output: &buff})
- log.Print(addr)
- if buff.String() != "[scrubbed]\n" {
- t.Errorf("%q: Got %q, expected %q", addr, buff.String(), "[scrubbed]\n")
- }
- }
- }
|