github.com/brycereitano/goa@v0.0.0-20170315073847-8ffa6c85e265/middleware/xray/segment_test.go (about)

     1  package xray
     2  
     3  import (
     4  	"regexp"
     5  	"sync"
     6  	"testing"
     7  
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  func TestRecordError(t *testing.T) {
    12  	var (
    13  		errMsg       = "foo"
    14  		cause        = "cause"
    15  		inner        = "inner"
    16  		err          = errors.New(errMsg)
    17  		wrapped      = errors.Wrap(err, cause)
    18  		wrappedTwice = errors.Wrap(wrapped, inner)
    19  	)
    20  	cases := map[string]struct {
    21  		Error    error
    22  		Message  string
    23  		HasCause bool
    24  	}{
    25  		"go-error":     {err, errMsg, false},
    26  		"wrapped":      {wrapped, cause + ": " + errMsg, true},
    27  		"wrappedTwice": {wrappedTwice, inner + ": " + cause + ": " + errMsg, true},
    28  	}
    29  	for k, c := range cases {
    30  		s := Segment{Mutex: &sync.Mutex{}}
    31  		s.RecordError(c.Error)
    32  		w := s.Cause.Exceptions[0]
    33  		if w.Message != c.Message {
    34  			t.Errorf("%s: invalid message, expected %s got %s", k, c.Message, w.Message)
    35  		}
    36  		if c.HasCause && len(w.Stack) < 2 {
    37  			t.Errorf("%s: stack too small: %v", k, w.Stack)
    38  		}
    39  	}
    40  }
    41  
    42  func TestNewSubsegment(t *testing.T) {
    43  	var (
    44  		name   = "sub"
    45  		s      = &Segment{Mutex: &sync.Mutex{}}
    46  		before = now()
    47  		ss     = s.NewSubsegment(name)
    48  	)
    49  	if s.counter != 1 {
    50  		t.Errorf("counter not incremented after call to Subsegment")
    51  	}
    52  	if len(s.Subsegments) != 1 {
    53  		t.Fatalf("invalid count of subsegments, expected 1 got %d", len(s.Subsegments))
    54  	}
    55  	if s.Subsegments[0] != ss {
    56  		t.Errorf("invalid subsegments element, expected %v - got %v", name, s.Subsegments[0])
    57  	}
    58  	if ss.ID == "" {
    59  		t.Errorf("subsegment ID not initialized")
    60  	}
    61  	if !regexp.MustCompile("[0-9a-f]{16}").MatchString(ss.ID) {
    62  		t.Errorf("invalid subsegment ID, got %v", ss.ID)
    63  	}
    64  	if ss.Name != name {
    65  		t.Errorf("invalid subsegemnt name, expected %s got %s", name, ss.Name)
    66  	}
    67  	if ss.StartTime < before {
    68  		t.Errorf("invalid subsegment StartAt, expected at least %v, got %v", before, ss.StartTime)
    69  	}
    70  	if !ss.InProgress {
    71  		t.Errorf("subsegemnt not in progress")
    72  	}
    73  	if ss.Parent != s {
    74  		t.Errorf("invalid subsegment parent, expected %v, got %v", s, ss.Parent)
    75  	}
    76  }