github.com/ldc1995/fabric-ca@v2.0.0-alpha.0.20200422214819-8d49c278c386+incompatible/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 }