go-micro.dev/v5@v5.12.0/errors/errors_test.go (about) 1 package errors 2 3 import ( 4 er "errors" 5 "net/http" 6 "testing" 7 ) 8 9 func TestFromError(t *testing.T) { 10 err := NotFound("go.micro.test", "%s", "example") 11 merr := FromError(err) 12 if merr.Id != "go.micro.test" || merr.Code != 404 { 13 t.Fatalf("invalid conversation %v != %v", err, merr) 14 } 15 err = er.New(err.Error()) 16 merr = FromError(err) 17 if merr.Id != "go.micro.test" || merr.Code != 404 { 18 t.Fatalf("invalid conversation %v != %v", err, merr) 19 } 20 merr = FromError(nil) 21 if merr != nil { 22 t.Fatalf("%v should be nil", merr) 23 } 24 } 25 26 func TestEqual(t *testing.T) { 27 err1 := NotFound("myid1", "msg1") 28 err2 := NotFound("myid2", "msg2") 29 30 if !Equal(err1, err2) { 31 t.Fatal("errors must be equal") 32 } 33 34 err3 := er.New("my test err") 35 if Equal(err1, err3) { 36 t.Fatal("errors must be not equal") 37 } 38 } 39 40 func TestErrors(t *testing.T) { 41 testData := []*Error{ 42 { 43 Id: "test", 44 Code: 500, 45 Detail: "Internal server error", 46 Status: http.StatusText(500), 47 }, 48 } 49 50 for _, e := range testData { 51 ne := New(e.Id, e.Detail, e.Code) 52 53 if e.Error() != ne.Error() { 54 t.Fatalf("Expected %s got %s", e.Error(), ne.Error()) 55 } 56 57 pe := Parse(ne.Error()) 58 59 if pe == nil { 60 t.Fatalf("Expected error got nil %v", pe) 61 } 62 63 if pe.Id != e.Id { 64 t.Fatalf("Expected %s got %s", e.Id, pe.Id) 65 } 66 67 if pe.Detail != e.Detail { 68 t.Fatalf("Expected %s got %s", e.Detail, pe.Detail) 69 } 70 71 if pe.Code != e.Code { 72 t.Fatalf("Expected %d got %d", e.Code, pe.Code) 73 } 74 75 if pe.Status != e.Status { 76 t.Fatalf("Expected %s got %s", e.Status, pe.Status) 77 } 78 } 79 } 80 81 func TestAs(t *testing.T) { 82 err := NotFound("go.micro.test", "%s", "example") 83 merr, match := As(err) 84 if !match { 85 t.Fatalf("%v should convert to *Error", err) 86 } 87 if merr.Id != "go.micro.test" || merr.Code != 404 || merr.Detail != "example" { 88 t.Fatalf("invalid conversation %v != %v", err, merr) 89 } 90 err = er.New(err.Error()) 91 merr, match = As(err) 92 if match || merr != nil { 93 t.Fatalf("%v should not convert to *Error", err) 94 } 95 merr, match = As(nil) 96 if match || merr != nil { 97 t.Fatalf("nil should not convert to *Error") 98 } 99 } 100 101 func TestAppend(t *testing.T) { 102 mError := NewMultiError() 103 testData := []*Error{ 104 { 105 Id: "test1", 106 Code: 500, 107 Detail: "Internal server error", 108 Status: http.StatusText(500), 109 }, 110 { 111 Id: "test2", 112 Code: 400, 113 Detail: "Bad Request", 114 Status: http.StatusText(400), 115 }, 116 { 117 Id: "test3", 118 Code: 404, 119 Detail: "Not Found", 120 Status: http.StatusText(404), 121 }, 122 } 123 124 mError.Append(testData...) 125 126 if len(mError.Errors) != 3 { 127 t.Fatalf("Expected 3 got %v", len(mError.Errors)) 128 } 129 } 130 131 func TestHasErrors(t *testing.T) { 132 mError := NewMultiError() 133 testData := []*Error{ 134 { 135 Id: "test1", 136 Code: 500, 137 Detail: "Internal server error", 138 Status: http.StatusText(500), 139 }, 140 { 141 Id: "test2", 142 Code: 400, 143 Detail: "Bad Request", 144 Status: http.StatusText(400), 145 }, 146 { 147 Id: "test3", 148 Code: 404, 149 Detail: "Not Found", 150 Status: http.StatusText(404), 151 }, 152 } 153 154 if mError.HasErrors() { 155 t.Fatal("Expected no error") 156 } 157 158 mError.Append(testData...) 159 160 if !mError.HasErrors() { 161 t.Fatal("Expected errors") 162 } 163 }