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  }