github.com/adecaro/fabric-ca@v2.0.0-alpha+incompatible/lib/server/idemix/cri_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  package idemix_test
     7  
     8  import (
     9  	"crypto/ecdsa"
    10  	"crypto/elliptic"
    11  	"crypto/rand"
    12  	"testing"
    13  
    14  	fp256bn "github.com/hyperledger/fabric-amcl/amcl/FP256BN"
    15  	. "github.com/hyperledger/fabric-ca/lib/server/idemix"
    16  	"github.com/hyperledger/fabric-ca/lib/server/idemix/mocks"
    17  	"github.com/hyperledger/fabric/idemix"
    18  	"github.com/pkg/errors"
    19  	"github.com/stretchr/testify/assert"
    20  )
    21  
    22  func TestCRIInvalidTokenAuth(t *testing.T) {
    23  	ctx := new(mocks.ServerRequestCtx)
    24  	ctx.On("TokenAuthentication").Return("", errors.New("bad credentials"))
    25  	handler := CRIRequestHandler{Ctx: ctx}
    26  	_, err := handler.HandleRequest()
    27  	assert.Error(t, err, "Idemix CRI should fail if token auth credentials are invalid")
    28  }
    29  
    30  func TestCreateCRIError(t *testing.T) {
    31  	ctx := new(mocks.ServerRequestCtx)
    32  	ctx.On("TokenAuthentication").Return("", nil)
    33  	issuer := new(mocks.MyIssuer)
    34  	ra := new(mocks.RevocationAuthority)
    35  	ra.On("CreateCRI").Return(nil, errors.New("Failed to create CRI"))
    36  	issuer.On("RevocationAuthority").Return(ra)
    37  	handler := CRIRequestHandler{Ctx: ctx, Issuer: issuer}
    38  	_, err := handler.HandleRequest()
    39  	assert.Error(t, err)
    40  }
    41  
    42  func TestGetCRIMarshalError(t *testing.T) {
    43  	ctx := new(mocks.ServerRequestCtx)
    44  	ctx.On("TokenAuthentication").Return("", nil)
    45  	issuer := new(mocks.MyIssuer)
    46  	ra := new(mocks.RevocationAuthority)
    47  	ra.On("CreateCRI").Return(nil, nil)
    48  	issuer.On("RevocationAuthority").Return(ra)
    49  	handler := CRIRequestHandler{Ctx: ctx, Issuer: issuer}
    50  	_, err := handler.HandleRequest()
    51  	assert.Error(t, err, "GetCRI should have failed when marshalling idemix.CredentialRevocationInformation")
    52  }
    53  
    54  func TestGetCRI(t *testing.T) {
    55  	ctx := new(mocks.ServerRequestCtx)
    56  	ctx.On("TokenAuthentication").Return("", nil)
    57  	issuer := new(mocks.MyIssuer)
    58  	ra := new(mocks.RevocationAuthority)
    59  	privateKey, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
    60  	if err != nil {
    61  		t.Fatalf("Failed to create ecdsa key: %s", err.Error())
    62  	}
    63  	rnd, err := idemix.GetRand()
    64  	if err != nil {
    65  		t.Fatalf("Failed generate random number: %s", err.Error())
    66  	}
    67  	cri, err := idemix.CreateCRI(privateKey, []*fp256bn.BIG{}, 1, idemix.ALG_NO_REVOCATION, rnd)
    68  	if err != nil {
    69  		t.Fatalf("Failed to create CRI: %s", err.Error())
    70  	}
    71  	ra.On("CreateCRI").Return(cri, nil)
    72  	issuer.On("RevocationAuthority").Return(ra)
    73  	handler := CRIRequestHandler{Ctx: ctx, Issuer: issuer}
    74  	_, err = handler.HandleRequest()
    75  	assert.NoError(t, err)
    76  }