...
Run Format

Source file src/net/http/httptrace/trace_test.go

Documentation: net/http/httptrace

  // 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)
  		}
  	}
  
  }
  

View as plain text