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  }