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  }