github.com/dddengyunjie/fabric-ca@v0.0.0-20190606043049-92df60ae2f0f/lib/serverendpoint_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package lib
     8  
     9  import (
    10  	"encoding/json"
    11  	"io/ioutil"
    12  	"net/http"
    13  	"net/http/httptest"
    14  	"testing"
    15  
    16  	"github.com/cloudflare/cfssl/api"
    17  	"github.com/hyperledger/fabric-ca/lib/caerrors"
    18  	"github.com/stretchr/testify/assert"
    19  )
    20  
    21  var handlerError error
    22  
    23  func TestServerEndpoint(t *testing.T) {
    24  	// Positive tests
    25  	url := "http://localhost:7054/api/v1/enroll"
    26  	handlerError = nil
    27  	testEndpoint(t, "HEAD", url, 200, 0)
    28  	testEndpoint(t, "GET", url, 200, 0)
    29  	testEndpoint(t, "POST", url, 200, 0)
    30  	// Negative tests
    31  	testEndpoint(t, "DELETE", url, 405, caerrors.ErrMethodNotAllowed)
    32  	handlerError = caerrors.NewAuthenticationErr(caerrors.ErrInvalidToken, "Invalid token")
    33  	testEndpoint(t, "GET", url, 401, caerrors.ErrAuthenticationFailure)
    34  }
    35  
    36  func testEndpoint(t *testing.T, method, url string, scode, rcode int) {
    37  	se := &serverEndpoint{
    38  		Methods: []string{"GET", "POST", "HEAD"},
    39  		Handler: testEndpointHandler,
    40  	}
    41  	r, err := http.NewRequest(method, url, nil)
    42  	assert.NoError(t, err)
    43  	w := httptest.NewRecorder()
    44  	se.ServeHTTP(w, r)
    45  	resp := w.Result()
    46  	assert.True(t, resp.StatusCode == scode)
    47  	buf, err := ioutil.ReadAll(resp.Body)
    48  	assert.NoError(t, err)
    49  	if method != "HEAD" {
    50  		var body api.Response
    51  		err = json.Unmarshal(buf, &body)
    52  		assert.NoError(t, err)
    53  		if rcode == 0 {
    54  			assert.True(t, len(body.Errors) == 0)
    55  		} else {
    56  			assert.True(t, body.Errors[0].Code == rcode)
    57  		}
    58  	} else {
    59  		// No response body
    60  		assert.True(t, len(buf) == 0)
    61  	}
    62  }
    63  
    64  func testEndpointHandler(ctx *serverRequestContextImpl) (interface{}, error) {
    65  	return "result", handlerError
    66  }