@@ -28,6 +28,7 @@ import (
2828 "github.com/hyperledger/fabric/common/ledger/testutil"
2929 "github.com/hyperledger/fabric/common/mocks/scc"
3030 "github.com/hyperledger/fabric/common/util"
31+ "github.com/hyperledger/fabric/core/chaincode/shim"
3132 ccp "github.com/hyperledger/fabric/core/common/ccprovider"
3233 "github.com/hyperledger/fabric/core/common/sysccprovider"
3334 "github.com/hyperledger/fabric/core/ledger"
@@ -531,12 +532,73 @@ func TestLedgerIsNoAvailable(t *testing.T) {
531532 assertion .NotNil (err .(* VSCCInfoLookupFailureError ))
532533}
533534
535+ func TestValidationInvalidEndorsing (t * testing.T ) {
536+ theLedger := new (mockLedger )
537+ validator := NewTxValidator (& mockSupport {l : theLedger })
538+
539+ ccID := "mycc"
540+ tx := getEnv (ccID , createRWset (t , ccID ), t )
541+
542+ theLedger .On ("GetTransactionByID" , mock .Anything ).Return (& peer.ProcessedTransaction {}, errors .New ("Cannot find the transaction" ))
543+
544+ cd := & ccp.ChaincodeData {
545+ Name : ccID ,
546+ Version : ccVersion ,
547+ Vscc : "vscc" ,
548+ Policy : signedByAnyMember ([]string {"DEFAULT" }),
549+ }
550+
551+ cdbytes := utils .MarshalOrPanic (cd )
552+
553+ queryExecutor := new (mockQueryExecutor )
554+ queryExecutor .On ("GetState" , "lscc" , ccID ).Return (cdbytes , nil )
555+ theLedger .On ("NewQueryExecutor" , mock .Anything ).Return (queryExecutor , nil )
556+
557+ b := & common.Block {Data : & common.BlockData {Data : [][]byte {utils .MarshalOrPanic (tx )}}}
558+
559+ // Keep default callback
560+ c := executeChaincodeProvider .getCallback ()
561+ executeChaincodeProvider .setCallback (func () (* peer.Response , * peer.ChaincodeEvent , error ) {
562+ return & peer.Response {Status : shim .ERROR }, nil , nil
563+ })
564+ err := validator .Validate (b )
565+ // Restore default callback
566+ executeChaincodeProvider .setCallback (c )
567+ assert .NoError (t , err )
568+ assertInvalid (b , t , peer .TxValidationCode_ENDORSEMENT_POLICY_FAILURE )
569+ }
570+
571+ type ccResultCallback func () (* peer.Response , * peer.ChaincodeEvent , error )
572+
573+ type ccExecuteChaincode struct {
574+ executeChaincodeCalback ccResultCallback
575+ }
576+
577+ func (cc * ccExecuteChaincode ) ExecuteChaincodeResult () (* peer.Response , * peer.ChaincodeEvent , error ) {
578+ return cc .executeChaincodeCalback ()
579+ }
580+
581+ func (cc * ccExecuteChaincode ) getCallback () ccResultCallback {
582+ return cc .executeChaincodeCalback
583+ }
584+
585+ func (cc * ccExecuteChaincode ) setCallback (calback ccResultCallback ) {
586+ cc .executeChaincodeCalback = calback
587+ }
588+
534589var signer msp.SigningIdentity
590+
535591var signerSerialized []byte
536592
593+ var executeChaincodeProvider = & ccExecuteChaincode {
594+ executeChaincodeCalback : func () (* peer.Response , * peer.ChaincodeEvent , error ) {
595+ return & peer.Response {Status : shim .OK }, nil , nil
596+ },
597+ }
598+
537599func TestMain (m * testing.M ) {
538600 sysccprovider .RegisterSystemChaincodeProviderFactory (& scc.MocksccProviderFactory {})
539- ccp .RegisterChaincodeProviderFactory (& ccprovider.MockCcProviderFactory {})
601+ ccp .RegisterChaincodeProviderFactory (& ccprovider.MockCcProviderFactory {executeChaincodeProvider })
540602
541603 msptesttools .LoadMSPSetupForTesting ()
542604
0 commit comments