gitee.com/sasukebo/go-micro/v4@v4.7.1/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 41 func TestErrors(t *testing.T) { 42 testData := []*Error{ 43 { 44 Id: "test", 45 Code: 500, 46 Detail: "Internal server error", 47 Status: http.StatusText(500), 48 }, 49 } 50 51 for _, e := range testData { 52 ne := New(e.Id, e.Detail, e.Code) 53 54 if e.Error() != ne.Error() { 55 t.Fatalf("Expected %s got %s", e.Error(), ne.Error()) 56 } 57 58 pe := Parse(ne.Error()) 59 60 if pe == nil { 61 t.Fatalf("Expected error got nil %v", pe) 62 } 63 64 if pe.Id != e.Id { 65 t.Fatalf("Expected %s got %s", e.Id, pe.Id) 66 } 67 68 if pe.Detail != e.Detail { 69 t.Fatalf("Expected %s got %s", e.Detail, pe.Detail) 70 } 71 72 if pe.Code != e.Code { 73 t.Fatalf("Expected %d got %d", e.Code, pe.Code) 74 } 75 76 if pe.Status != e.Status { 77 t.Fatalf("Expected %s got %s", e.Status, pe.Status) 78 } 79 } 80 } 81 82 func TestAs(t *testing.T) { 83 err := NotFound("go.micro.test", "%s", "example") 84 merr, match := As(err) 85 if !match { 86 t.Fatalf("%v should convert to *Error", err) 87 } 88 if merr.Id != "go.micro.test" || merr.Code != 404 || merr.Detail != "example" { 89 t.Fatalf("invalid conversation %v != %v", err, merr) 90 } 91 err = er.New(err.Error()) 92 merr, match = As(err) 93 if match || merr != nil { 94 t.Fatalf("%v should not convert to *Error", err) 95 } 96 merr, match = As(nil) 97 if match || merr != nil { 98 t.Fatalf("nil should not convert to *Error") 99 } 100 } 101 102 func TestAppend(t *testing.T) { 103 mError := NewMultiError() 104 testData := []*Error{ 105 { 106 Id: "test1", 107 Code: 500, 108 Detail: "Internal server error", 109 Status: http.StatusText(500), 110 }, 111 { 112 Id: "test2", 113 Code: 400, 114 Detail: "Bad Request", 115 Status: http.StatusText(400), 116 }, 117 { 118 Id: "test3", 119 Code: 404, 120 Detail: "Not Found", 121 Status: http.StatusText(404), 122 }, 123 } 124 125 for _, e := range testData { 126 mError.Append(&Error{ 127 Id: e.Id, 128 Code: e.Code, 129 Detail: e.Detail, 130 Status: e.Status, 131 }) 132 } 133 134 if len(mError.Errors) != 3 { 135 t.Fatalf("Expected 3 got %v", len(mError.Errors)) 136 } 137 } 138 139 func TestHasErrors(t *testing.T) { 140 mError := NewMultiError() 141 testData := []*Error{ 142 { 143 Id: "test1", 144 Code: 500, 145 Detail: "Internal server error", 146 Status: http.StatusText(500), 147 }, 148 { 149 Id: "test2", 150 Code: 400, 151 Detail: "Bad Request", 152 Status: http.StatusText(400), 153 }, 154 { 155 Id: "test3", 156 Code: 404, 157 Detail: "Not Found", 158 Status: http.StatusText(404), 159 }, 160 } 161 162 if mError.HasErrors() { 163 t.Fatal("Expected no error") 164 } 165 166 for _, e := range testData { 167 mError.Errors = append(mError.Errors, &Error{ 168 Id: e.Id, 169 Code: e.Code, 170 Detail: e.Detail, 171 Status: e.Status, 172 }) 173 } 174 175 if !mError.HasErrors() { 176 t.Fatal("Expected errors") 177 } 178 }