@@ -28,6 +28,7 @@ import (
28
28
"github.com/hyperledger/fabric/common/ledger/testutil"
29
29
"github.com/hyperledger/fabric/common/mocks/scc"
30
30
"github.com/hyperledger/fabric/common/util"
31
+ "github.com/hyperledger/fabric/core/chaincode/shim"
31
32
ccp "github.com/hyperledger/fabric/core/common/ccprovider"
32
33
"github.com/hyperledger/fabric/core/common/sysccprovider"
33
34
"github.com/hyperledger/fabric/core/ledger"
@@ -531,12 +532,73 @@ func TestLedgerIsNoAvailable(t *testing.T) {
531
532
assertion .NotNil (err .(* VSCCInfoLookupFailureError ))
532
533
}
533
534
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
+
534
589
var signer msp.SigningIdentity
590
+
535
591
var signerSerialized []byte
536
592
593
+ var executeChaincodeProvider = & ccExecuteChaincode {
594
+ executeChaincodeCalback : func () (* peer.Response , * peer.ChaincodeEvent , error ) {
595
+ return & peer.Response {Status : shim .OK }, nil , nil
596
+ },
597
+ }
598
+
537
599
func TestMain (m * testing.M ) {
538
600
sysccprovider .RegisterSystemChaincodeProviderFactory (& scc.MocksccProviderFactory {})
539
- ccp .RegisterChaincodeProviderFactory (& ccprovider.MockCcProviderFactory {})
601
+ ccp .RegisterChaincodeProviderFactory (& ccprovider.MockCcProviderFactory {executeChaincodeProvider })
540
602
541
603
msptesttools .LoadMSPSetupForTesting ()
542
604
0 commit comments