github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/status/log_send_test.go (about) 1 // Copyright 2019 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package status 5 6 import ( 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 "time" 12 13 "github.com/keybase/client/go/libkb" 14 "github.com/keybase/client/go/logger" 15 jsonw "github.com/keybase/go-jsonw" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func testTail(t *testing.T, testname, filename string, count, actual int, first, last string) { 20 log := logger.NewTestLogger(t) 21 tailed := tail(log, "tset", filename, count) 22 lines := strings.Split(tailed, "\n") 23 if len(tailed) != actual { 24 t.Errorf("test %s: tailed bytes: %d, expected %d", testname, len(tailed), actual) 25 } 26 27 if strings.TrimSpace(lines[0]) != first { 28 t.Errorf("test %s: first line: %q, expected %q", testname, strings.TrimSpace(lines[0]), first) 29 } 30 if strings.TrimSpace(lines[len(lines)-2]) != last { 31 t.Errorf("test %s: last line: %q, expected %q", testname, strings.TrimSpace(lines[len(lines)-2]), last) 32 } 33 if strings.TrimSpace(lines[len(lines)-1]) != "" { 34 t.Errorf("test %s: last line: %q, expected %q", testname, strings.TrimSpace(lines[len(lines)-1]), "") 35 } 36 37 } 38 39 func TestTail(t *testing.T) { 40 // file has 20k lines in it 41 filename := filepath.Join("../libkb/testfixtures", "longline.testlog") 42 43 lastLine := "19999" 44 45 testTail(t, "tail -c 1002", filename, 1002, 996, "19834", lastLine) 46 testTail(t, "tail -c 100002", filename, 100002, 89994, "05001", lastLine) 47 testTail(t, "tail -c 100002", filename, 100002, 89994, "05001", lastLine) 48 testTail(t, "tail -c 250002", filename, 250002, 249999, "00179", lastLine) 49 50 } 51 52 func TestTailMulti(t *testing.T) { 53 stem := filepath.Join("../libkb/testfixtures", "f.testlog") 54 55 atime := time.Date(2017, time.March, 2, 4, 5, 6, 0, time.UTC) 56 // Force the fact the logs are from different times, since 57 // on Windows on CI, we can't get the mtime set on git checkout. 58 for i, sffx := range []string{"", ".1", ".2"} { 59 mtime := time.Date(2017, time.February, 1, 3, (60 - 5*i), 0, 0, time.UTC) 60 if err := os.Chtimes(stem+sffx, atime, mtime); err != nil { 61 t.Fatal(err) 62 } 63 } 64 testTail(t, "follow", stem, 100000, 99996, "13334", "29999") 65 testTail(t, "follow", stem, 10000, 9996, "28334", "29999") 66 } 67 68 func TestMergeStatusJSON(t *testing.T) { 69 tc := libkb.SetupTest(t, "MergeStatusJSON", 1) 70 defer tc.Cleanup() 71 72 mctx := libkb.NewMetaContextForTest(tc) 73 fstatus, err := GetFullStatus(mctx) 74 require.NoError(t, err) 75 require.NotNil(t, fstatus) 76 status := `{"desktop":{"running": true}}` 77 mergedStatus := MergeStatusJSON(fstatus, "fstatus", status) 78 require.NotEqual(t, status, mergedStatus) 79 80 w, err := jsonw.Unmarshal([]byte(mergedStatus)) 81 require.NoError(t, err) 82 statusW := w.AtPath("status.desktop.running") 83 require.NotNil(t, statusW) 84 running, err := statusW.GetBool() 85 require.NoError(t, err) 86 require.True(t, running) 87 88 fstatusW := w.AtPath("fstatus") 89 require.NotNil(t, fstatusW) 90 } 91 92 var redactTests = []struct { 93 in string 94 out string 95 }{ 96 {"hello this is my feedback; with punctuation", "hello this is my feedback; with punctuation"}, 97 {"nope agent agent agent alcohol agent agent agent nope more feedback", "[redacted feedback follows] nope [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] nope more feedback"}, 98 {"nope agent nope agent agent alcohol agent alcohol agent nope more feedback", "[redacted feedback follows] nope agent nope [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] nope more feedback"}, 99 {"five in a row agent agent agent agent agent five in a row", "five in a row agent agent agent agent agent five in a row"}, 100 {"agent agent agent agent agent agent", "[redacted feedback follows] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED]"}, 101 {"agent agent agent agent agent agent offset", "[redacted feedback follows] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] offset"}, 102 {"offset agent agent agent agent agent agent", "[redacted feedback follows] offset [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED]"}, 103 {"1 2 agent agent agent 3 agent agent 4 agent agent agent agent agent agent 5 agent agent agent agent agent agent agent agent 6 7 8 9 10", "[redacted feedback follows] 1 2 agent agent agent 3 agent agent 4 [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] 5 [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] 6 7 8 9 10"}, 104 {`tricky my paper key is in quotes: "agent agent agent agent agent agent" see!`, `[redacted feedback follows] tricky my paper key is in quotes: "[REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED]" see!`}, 105 {`mismatched "agent agent agent agent agent agent)`, `[redacted feedback follows] mismatched "[REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED] [REDACTED])`}, 106 } 107 108 func TestRedactPaperKeys(t *testing.T) { 109 for _, tt := range redactTests { 110 t.Run(tt.in, func(t *testing.T) { 111 ret := redactPotentialPaperKeys(tt.in) 112 if ret != tt.out { 113 t.Errorf("got %q; want %q", ret, tt.out) 114 } 115 }) 116 } 117 }