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  }