github.com/blockchain-gm/fabric-ca@v0.0.0-20200423072702-b2c40c7ac69c/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/stretchr/testify/assert" 15 ) 16 17 func TestErrorString(t *testing.T) { 18 msg := "message" 19 err := NewHTTPErr(400, ErrMethodNotAllowed, "%s", msg) 20 errMsg := err.Error() 21 assert.Contains(t, errMsg, msg) 22 } 23 24 func TestHTTPErr(t *testing.T) { 25 msg := "message" 26 err := CreateHTTPErr(400, ErrMethodNotAllowed, "%s", msg) 27 errMsg := err.Error() 28 assert.Contains(t, errMsg, msg) 29 assert.Equal(t, err.GetRemoteCode(), ErrMethodNotAllowed) 30 assert.Equal(t, err.GetLocalCode(), ErrMethodNotAllowed) 31 assert.Equal(t, err.GetRemoteMsg(), "message") 32 assert.Equal(t, err.GetStatusCode(), 400) 33 assert.Equal(t, err.GetLocalMsg(), "message") 34 35 w := &mockHTTPWriter{httptest.NewRecorder()} 36 assert.NoError(t, err.writeResponse(w)) 37 } 38 39 func TestRemoteErrorString(t *testing.T) { 40 lmsg := "local message" 41 rmsg := "remote message" 42 err := CreateHTTPErr(401, ErrMethodNotAllowed, "%s", lmsg).Remote(ErrUnknown, rmsg) 43 errMsg := err.Error() 44 assert.Contains(t, errMsg, rmsg) 45 } 46 47 func TestNewAuthenticationError(t *testing.T) { 48 lmsg := "local message" 49 err := NewAuthenticationErr(ErrAuthenticationFailure, "%s", lmsg) 50 errMsg := err.Error() 51 assert.Contains(t, errMsg, "Authentication failure") 52 } 53 54 func TestNewAuthorizationError(t *testing.T) { 55 lmsg := "local message" 56 err := NewAuthorizationErr(ErrAuthorizationFailure, "%s", lmsg) 57 errMsg := err.Error() 58 assert.Contains(t, errMsg, "Authorization failure") 59 } 60 61 func TestServerError(t *testing.T) { 62 err := NewServerError(24, "error: %s", "server") 63 assert.Equal(t, err.code, 24) 64 assert.Equal(t, err.msg, "error: server") 65 } 66 67 func TestFatalError(t *testing.T) { 68 err := NewFatalError(25, "fatal error: %s", "server") 69 assert.Equal(t, err.code, 25) 70 assert.Equal(t, err.msg, "fatal error: server") 71 72 assert.Equal(t, err.Error(), "Code: 25 - fatal error: server") 73 } 74 75 func TestIsFatalError(t *testing.T) { 76 ferr := NewFatalError(25, "fatal error: %s", "server") 77 assert.Equal(t, IsFatalError(ferr), true) 78 79 err := NewAuthorizationErr(25, "%s", "auth error") 80 assert.Equal(t, IsFatalError(err), false) 81 } 82 83 type mockHTTPWriter struct { 84 http.ResponseWriter 85 } 86 87 // Header returns the header map that will be sent by WriteHeader. 88 func (m *mockHTTPWriter) Header() http.Header { 89 return m.ResponseWriter.Header() 90 } 91 92 // Write writes the data to the connection as part of an HTTP reply. 93 func (m *mockHTTPWriter) Write(buf []byte) (int, error) { 94 w := m.ResponseWriter 95 return w.Write(buf) 96 }