2016-03-18 14:01:55 +03:00
|
|
|
package errors
|
|
|
|
|
|
|
|
import (
|
2022-01-25 00:40:50 +03:00
|
|
|
"encoding/json"
|
2020-03-17 14:27:20 +03:00
|
|
|
er "errors"
|
2022-01-21 18:20:56 +03:00
|
|
|
"fmt"
|
2016-03-18 14:01:55 +03:00
|
|
|
"net/http"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2022-01-25 00:40:50 +03:00
|
|
|
func TestMarshalJSON(t *testing.T) {
|
|
|
|
e := InternalServerError("id", "err: %v", fmt.Errorf("err: %v", `xxx: "UNIX_TIMESTAMP": invalid identifier`))
|
|
|
|
_, err := json.Marshal(e)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-21 18:20:56 +03:00
|
|
|
func TestEmpty(t *testing.T) {
|
|
|
|
msg := "test"
|
|
|
|
var err *Error
|
|
|
|
err = FromError(fmt.Errorf(msg))
|
|
|
|
if err.Detail != msg {
|
|
|
|
t.Fatalf("invalid error %v", err)
|
|
|
|
}
|
|
|
|
err = FromError(fmt.Errorf(`{"id":"","detail":"%s","status":"%s","code":0}`, msg, msg))
|
|
|
|
if err.Detail != msg || err.Status != msg {
|
|
|
|
t.Fatalf("invalid error %#+v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-18 03:10:38 +03:00
|
|
|
func TestFromError(t *testing.T) {
|
|
|
|
err := NotFound("go.micro.test", "%s", "example")
|
|
|
|
merr := FromError(err)
|
2021-09-30 21:00:02 +03:00
|
|
|
if merr.ID != "go.micro.test" || merr.Code != 404 {
|
2020-03-18 03:10:38 +03:00
|
|
|
t.Fatalf("invalid conversation %v != %v", err, merr)
|
|
|
|
}
|
|
|
|
err = er.New(err.Error())
|
|
|
|
merr = FromError(err)
|
2021-09-30 21:00:02 +03:00
|
|
|
if merr.ID != "go.micro.test" || merr.Code != 404 {
|
2020-03-18 03:10:38 +03:00
|
|
|
t.Fatalf("invalid conversation %v != %v", err, merr)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-17 14:27:20 +03:00
|
|
|
func TestEqual(t *testing.T) {
|
|
|
|
err1 := NotFound("myid1", "msg1")
|
|
|
|
err2 := NotFound("myid2", "msg2")
|
|
|
|
|
|
|
|
if !Equal(err1, err2) {
|
|
|
|
t.Fatal("errors must be equal")
|
|
|
|
}
|
|
|
|
|
|
|
|
err3 := er.New("my test err")
|
|
|
|
if Equal(err1, err3) {
|
|
|
|
t.Fatal("errors must be not equal")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-03-18 14:01:55 +03:00
|
|
|
func TestErrors(t *testing.T) {
|
|
|
|
testData := []*Error{
|
2019-11-01 18:07:53 +03:00
|
|
|
{
|
2021-09-30 21:00:02 +03:00
|
|
|
ID: "test",
|
2016-03-18 14:01:55 +03:00
|
|
|
Code: 500,
|
|
|
|
Detail: "Internal server error",
|
|
|
|
Status: http.StatusText(500),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, e := range testData {
|
2021-09-30 21:00:02 +03:00
|
|
|
ne := New(e.ID, e.Detail, e.Code)
|
2016-03-18 14:01:55 +03:00
|
|
|
|
|
|
|
if e.Error() != ne.Error() {
|
2016-04-06 20:03:27 +03:00
|
|
|
t.Fatalf("Expected %s got %s", e.Error(), ne.Error())
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pe := Parse(ne.Error())
|
|
|
|
|
|
|
|
if pe == nil {
|
2016-04-06 20:03:27 +03:00
|
|
|
t.Fatalf("Expected error got nil %v", pe)
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
|
2021-09-30 21:00:02 +03:00
|
|
|
if pe.ID != e.ID {
|
|
|
|
t.Fatalf("Expected %s got %s", e.ID, pe.ID)
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if pe.Detail != e.Detail {
|
2016-04-06 20:03:27 +03:00
|
|
|
t.Fatalf("Expected %s got %s", e.Detail, pe.Detail)
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if pe.Code != e.Code {
|
2017-02-25 17:53:25 +03:00
|
|
|
t.Fatalf("Expected %d got %d", e.Code, pe.Code)
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if pe.Status != e.Status {
|
2016-04-06 20:03:27 +03:00
|
|
|
t.Fatalf("Expected %s got %s", e.Status, pe.Status)
|
2016-03-18 14:01:55 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-04-19 17:12:25 +03:00
|
|
|
|
|
|
|
func TestCodeIn(t *testing.T) {
|
|
|
|
err := InternalServerError("id", "%s", "msg")
|
|
|
|
|
|
|
|
if ok := CodeIn(err, 400, 500); !ok {
|
|
|
|
t.Fatalf("CodeIn not works: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if ok := CodeIn(err.(*Error).Code, 500); !ok {
|
|
|
|
t.Fatalf("CodeIn not works: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if ok := CodeIn(err, 100); ok {
|
|
|
|
t.Fatalf("CodeIn not works: %v", err)
|
|
|
|
}
|
2022-05-03 00:23:43 +03:00
|
|
|
}
|