github.com/v2fly/tools@v0.100.0/internal/stack/stack_test.go (about) 1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package stack_test 6 7 import ( 8 "bytes" 9 "strings" 10 "testing" 11 12 "github.com/v2fly/tools/internal/stack" 13 ) 14 15 func TestProcess(t *testing.T) { 16 for _, test := range []struct{ name, input, expect string }{{ 17 name: `empty`, 18 input: ``, 19 expect: ``, 20 }, { 21 name: `no_frame`, 22 input: `goroutine 1 [running]:`, 23 expect: ` 24 [running]: $1 25 26 1 goroutines, 1 unique 27 `, 28 }, { 29 name: `one_frame`, 30 input: ` 31 goroutine 1 [running]: 32 package.function(args) 33 file.go:10 34 `, 35 expect: ` 36 [running]: $1 37 file.go:10: function 38 39 1 goroutines, 1 unique 40 `, 41 }, { 42 name: `one_call`, 43 input: ` 44 goroutine 1 [running]: 45 package1.functionA(args) 46 file1.go:10 47 package2.functionB(args) 48 file2.go:20 49 package3.functionC(args) 50 file3.go:30 51 `, 52 expect: ` 53 [running]: $1 54 file1.go:10: functionA 55 file2.go:20: functionB 56 file3.go:30: functionC 57 58 1 goroutines, 1 unique 59 `, 60 }, { 61 name: `two_call`, 62 input: ` 63 goroutine 1 [running]: 64 package1.functionA(args) 65 file1.go:10 66 goroutine 2 [running]: 67 package2.functionB(args) 68 file2.go:20 69 `, 70 expect: ` 71 [running]: $1 72 file1.go:10: functionA 73 74 [running]: $2 75 file2.go:20: functionB 76 77 2 goroutines, 2 unique 78 `, 79 }, { 80 name: `merge_call`, 81 input: ` 82 goroutine 1 [running]: 83 package1.functionA(args) 84 file1.go:10 85 goroutine 2 [running]: 86 package1.functionA(args) 87 file1.go:10 88 `, 89 expect: ` 90 [running]: $1, $2 91 file1.go:10: functionA 92 93 2 goroutines, 1 unique 94 `, 95 }, { 96 name: `alternating_call`, 97 input: ` 98 goroutine 1 [running]: 99 package1.functionA(args) 100 file1.go:10 101 goroutine 2 [running]: 102 package2.functionB(args) 103 file2.go:20 104 goroutine 3 [running]: 105 package1.functionA(args) 106 file1.go:10 107 goroutine 4 [running]: 108 package2.functionB(args) 109 file2.go:20 110 goroutine 5 [running]: 111 package1.functionA(args) 112 file1.go:10 113 goroutine 6 [running]: 114 package2.functionB(args) 115 file2.go:20 116 `, 117 expect: ` 118 [running]: $1, $3, $5 119 file1.go:10: functionA 120 121 [running]: $2, $4, $6 122 file2.go:20: functionB 123 124 6 goroutines, 2 unique 125 `, 126 }, { 127 name: `sort_calls`, 128 input: ` 129 goroutine 1 [running]: 130 package3.functionC(args) 131 file3.go:30 132 goroutine 2 [running]: 133 package2.functionB(args) 134 file2.go:20 135 goroutine 3 [running]: 136 package1.functionA(args) 137 file1.go:10 138 `, 139 expect: ` 140 [running]: $3 141 file1.go:10: functionA 142 143 [running]: $2 144 file2.go:20: functionB 145 146 [running]: $1 147 file3.go:30: functionC 148 149 3 goroutines, 3 unique 150 `, 151 }, { 152 name: `real_single`, 153 input: ` 154 panic: oops 155 156 goroutine 53 [running]: 157 github.com/v2fly/tools/internal/jsonrpc2_test.testHandler.func1(0x1240c20, 0xc000013350, 0xc0000133b0, 0x1240ca0, 0xc00002ab00, 0x3, 0x3) 158 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:160 +0x74c 159 github.com/v2fly/tools/internal/jsonrpc2.(*Conn).Run(0xc000204330, 0x1240c20, 0xc000204270, 0x1209570, 0xc000212120, 0x1242700) 160 /work/tools/internal/jsonrpc2/jsonrpc2.go:187 +0x777 161 github.com/v2fly/tools/internal/jsonrpc2_test.run.func1(0x123ebe0, 0xc000206018, 0x123ec20, 0xc000206010, 0xc0002080a0, 0xc000204330, 0x1240c20, 0xc000204270, 0xc000212120) 162 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:131 +0xe2 163 created by github.com/v2fly/tools/internal/jsonrpc2_test.run 164 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:121 +0x263 165 FAIL github.com/v2fly/tools/internal/jsonrpc2 0.252s 166 FAIL 167 `, 168 expect: ` 169 panic: oops 170 171 [running]: $53 172 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:160: testHandler.func1 173 /work/tools/internal/jsonrpc2/jsonrpc2.go:187: (*Conn).Run 174 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:131: run.func1 175 /work/tools/internal/jsonrpc2/jsonrpc2_test.go:121: run 176 177 1 goroutines, 1 unique 178 179 FAIL github.com/v2fly/tools/internal/jsonrpc2 0.252s 180 FAIL 181 `, 182 }} { 183 t.Run(test.name, func(t *testing.T) { 184 buf := &bytes.Buffer{} 185 stack.Process(buf, strings.NewReader(test.input)) 186 expect := strings.TrimSpace(test.expect) 187 got := strings.TrimSpace(buf.String()) 188 if got != expect { 189 t.Errorf("got:\n%s\nexpect:\n%s", got, expect) 190 } 191 }) 192 } 193 }