1
2
3
4
5 package httptrace
6
7 import (
8 "context"
9 "strings"
10 "testing"
11 )
12
13 func TestWithClientTrace(t *testing.T) {
14 var buf strings.Builder
15 connectStart := func(b byte) func(network, addr string) {
16 return func(network, addr string) {
17 buf.WriteByte(b)
18 }
19 }
20
21 ctx := context.Background()
22 oldtrace := &ClientTrace{
23 ConnectStart: connectStart('O'),
24 }
25 ctx = WithClientTrace(ctx, oldtrace)
26 newtrace := &ClientTrace{
27 ConnectStart: connectStart('N'),
28 }
29 ctx = WithClientTrace(ctx, newtrace)
30 trace := ContextClientTrace(ctx)
31
32 buf.Reset()
33 trace.ConnectStart("net", "addr")
34 if got, want := buf.String(), "NO"; got != want {
35 t.Errorf("got %q; want %q", got, want)
36 }
37 }
38
39 func TestCompose(t *testing.T) {
40 var buf strings.Builder
41 var testNum int
42
43 connectStart := func(b byte) func(network, addr string) {
44 return func(network, addr string) {
45 if addr != "addr" {
46 t.Errorf(`%d. args for %q case = %q, %q; want addr of "addr"`, testNum, b, network, addr)
47 }
48 buf.WriteByte(b)
49 }
50 }
51
52 tests := [...]struct {
53 trace, old *ClientTrace
54 want string
55 }{
56 0: {
57 want: "T",
58 trace: &ClientTrace{
59 ConnectStart: connectStart('T'),
60 },
61 },
62 1: {
63 want: "TO",
64 trace: &ClientTrace{
65 ConnectStart: connectStart('T'),
66 },
67 old: &ClientTrace{ConnectStart: connectStart('O')},
68 },
69 2: {
70 want: "O",
71 trace: &ClientTrace{},
72 old: &ClientTrace{ConnectStart: connectStart('O')},
73 },
74 }
75 for i, tt := range tests {
76 testNum = i
77 buf.Reset()
78
79 tr := *tt.trace
80 tr.compose(tt.old)
81 if tr.ConnectStart != nil {
82 tr.ConnectStart("net", "addr")
83 }
84 if got := buf.String(); got != tt.want {
85 t.Errorf("%d. got = %q; want %q", i, got, tt.want)
86 }
87 }
88
89 }
90
View as plain text