| // Copyright 2016 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package httptrace | |
| import ( | |
| "bytes" | |
| "context" | |
| "testing" | |
| ) | |
| func TestWithClientTrace(t *testing.T) { | |
| var buf bytes.Buffer | |
| connectStart := func(b byte) func(network, addr string) { | |
| return func(network, addr string) { | |
| buf.WriteByte(b) | |
| } | |
| } | |
| ctx := context.Background() | |
| oldtrace := &ClientTrace{ | |
| ConnectStart: connectStart('O'), | |
| } | |
| ctx = WithClientTrace(ctx, oldtrace) | |
| newtrace := &ClientTrace{ | |
| ConnectStart: connectStart('N'), | |
| } | |
| ctx = WithClientTrace(ctx, newtrace) | |
| trace := ContextClientTrace(ctx) | |
| buf.Reset() | |
| trace.ConnectStart("net", "addr") | |
| if got, want := buf.String(), "NO"; got != want { | |
| t.Errorf("got %q; want %q", got, want) | |
| } | |
| } | |
| func TestCompose(t *testing.T) { | |
| var buf bytes.Buffer | |
| var testNum int | |
| connectStart := func(b byte) func(network, addr string) { | |
| return func(network, addr string) { | |
| if addr != "addr" { | |
| t.Errorf(`%d. args for %q case = %q, %q; want addr of "addr"`, testNum, b, network, addr) | |
| } | |
| buf.WriteByte(b) | |
| } | |
| } | |
| tests := [...]struct { | |
| trace, old *ClientTrace | |
| want string | |
| }{ | |
| 0: { | |
| want: "T", | |
| trace: &ClientTrace{ | |
| ConnectStart: connectStart('T'), | |
| }, | |
| }, | |
| 1: { | |
| want: "TO", | |
| trace: &ClientTrace{ | |
| ConnectStart: connectStart('T'), | |
| }, | |
| old: &ClientTrace{ConnectStart: connectStart('O')}, | |
| }, | |
| 2: { | |
| want: "O", | |
| trace: &ClientTrace{}, | |
| old: &ClientTrace{ConnectStart: connectStart('O')}, | |
| }, | |
| } | |
| for i, tt := range tests { | |
| testNum = i | |
| buf.Reset() | |
| tr := *tt.trace | |
| tr.compose(tt.old) | |
| if tr.ConnectStart != nil { | |
| tr.ConnectStart("net", "addr") | |
| } | |
| if got := buf.String(); got != tt.want { | |
| t.Errorf("%d. got = %q; want %q", i, got, tt.want) | |
| } | |
| } | |
| } |