github.com/extrame/fabric-ca@v2.0.0-alpha+incompatible/lib/caerrors/servererror_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package caerrors 8 9 import ( 10 "net/http" 11 "net/http/httptest" 12 "testing" 13 14 "github.com/pkg/errors" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestErrorString(t *testing.T) { 19 msg := "nested http error message" 20 err := NewHTTPErr(400, ErrMethodNotAllowed, "%s", msg) 21 errMsg := err.Error() 22 assert.Contains(t, errMsg, msg) 23 24 err2 := errors.WithMessage(err, "error occured") 25 assert.Contains(t, err2.Error(), "error occured: nested http error message") 26 27 msg = "error occured: %s" 28 err3 := errors.Wrapf(err, msg, "failure") 29 assert.Contains(t, err3.Error(), "error occured: failure: nested http error message") 30 } 31 32 func TestHTTPErr(t *testing.T) { 33 msg := "message" 34 err := CreateHTTPErr(400, ErrMethodNotAllowed, "%s", msg) 35 errMsg := err.Error() 36 assert.Contains(t, errMsg, msg) 37 assert.Equal(t, err.GetRemoteCode(), ErrMethodNotAllowed) 38 assert.Equal(t, err.GetLocalCode(), ErrMethodNotAllowed) 39 assert.Equal(t, err.GetRemoteMsg(), "message") 40 assert.Equal(t, err.GetStatusCode(), 400) 41 assert.Equal(t, err.GetLocalMsg(), "message") 42 43 w := &mockHTTPWriter{httptest.NewRecorder()} 44 assert.NoError(t, err.writeResponse(w)) 45 } 46 47 func TestRemoteErrorString(t *testing.T) { 48 lmsg := "local message" 49 rmsg := "remote message" 50 err := CreateHTTPErr(401, ErrMethodNotAllowed, "%s", lmsg).Remote(ErrUnknown, rmsg) 51 errMsg := Print(err) 52 assert.Contains(t, errMsg, rmsg) 53 } 54 55 func TestNewAuthenticationError(t *testing.T) { 56 lmsg := "local message" 57 err := NewAuthenticationErr(ErrAuthenticationFailure, "%s", lmsg) 58 errMsg := Print(err) 59 assert.Contains(t, errMsg, "Authentication failure") 60 } 61 62 func TestNewAuthorizationError(t *testing.T) { 63 lmsg := "local message" 64 err := NewAuthorizationErr(ErrAuthorizationFailure, "%s", lmsg) 65 errMsg := Print(err) 66 assert.Contains(t, errMsg, "Authorization failure") 67 } 68 69 func TestServerError(t *testing.T) { 70 err := NewServerError(24, "error: %s", "server") 71 assert.Equal(t, err.code, 24) 72 assert.Equal(t, err.msg, "error: server") 73 } 74 75 func TestFatalError(t *testing.T) { 76 err := NewFatalError(25, "fatal error: %s", "server") 77 assert.Equal(t, err.code, 25) 78 assert.Equal(t, err.msg, "fatal error: server") 79 80 assert.Equal(t, err.Error(), "Code: 25 - fatal error: server") 81 } 82 83 func TestIsFatalError(t *testing.T) { 84 ferr := NewFatalError(25, "fatal error: %s", "server") 85 assert.Equal(t, IsFatalError(ferr), true) 86 87 err := NewAuthorizationErr(25, "%s", "auth error") 88 assert.Equal(t, IsFatalError(err), false) 89 } 90 91 type mockHTTPWriter struct { 92 http.ResponseWriter 93 } 94 95 // Header returns the header map that will be sent by WriteHeader. 96 func (m *mockHTTPWriter) Header() http.Header { 97 return m.ResponseWriter.Header() 98 } 99 100 // Write writes the data to the connection as part of an HTTP reply. 101 func (m *mockHTTPWriter) Write(buf []byte) (int, error) { 102 w := m.ResponseWriter 103 return w.Write(buf) 104 }