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 }