@@ -230,7 +230,7 @@ func testWithOrg1(t *testing.T, sdk *fabsdk.FabricSDK, mc *multiorgContext) int
230230 }
231231
232232 // Create chaincode package for example cc
233- createCC (t , mc . org1ResMgmt , mc . org2ResMgmt , ccPkg , mc .ccName , mc .ccVersion )
233+ createCC (t , mc , ccPkg , mc .ccName , mc .ccVersion )
234234
235235 chClientOrg1User , chClientOrg2User := connectUserToOrgChannel (org1ChannelClientContext , t , org2ChannelClientContext )
236236
@@ -453,23 +453,11 @@ func verifyErrorFromCC(chClientOrg1User *channel.Client, t *testing.T, ccName st
453453 }
454454}
455455
456- func createCC (t * testing.T , org1ResMgmt * resmgmt.Client , org2ResMgmt * resmgmt.Client , ccPkg * resource.CCPackage , ccName , ccVersion string ) {
457- installCCReq := resmgmt.InstallCCRequest {Name : ccName , Path : "github.com/example_cc" , Version : ccVersion , Package : ccPkg }
458-
459- // Install example cc to Org1 peers
460- _ , err := org1ResMgmt .InstallCC (installCCReq , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
461- require .NoError (t , err , "InstallCC for Org1 failed" )
462-
463- // Install example cc to Org2 peers
464- _ , err = org2ResMgmt .InstallCC (installCCReq , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
465- require .NoError (t , err , "InstallCC for Org2 failed" )
466-
467- instantiateCC (t , org1ResMgmt , ccName , ccVersion )
468-
456+ func queryInstantiatedCC (t * testing.T , resMgmt * resmgmt.Client , channelID , ccName string ) bool {
469457 found := false
470458 for i := 0 ; i < 5 ; i ++ {
471459 // Verify that example CC is instantiated on Org1 peer
472- chaincodeQueryResponse , err := org1ResMgmt .QueryInstantiatedChaincodes (channelID , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
460+ chaincodeQueryResponse , err := resMgmt .QueryInstantiatedChaincodes (channelID , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
473461 require .NoError (t , err , "QueryInstantiatedChaincodes return error" )
474462
475463 t .Logf ("Found %d instantiated chaincodes:" , len (chaincodeQueryResponse .Chaincodes ))
@@ -481,10 +469,86 @@ func createCC(t *testing.T, org1ResMgmt *resmgmt.Client, org2ResMgmt *resmgmt.Cl
481469 }
482470 }
483471 if found {
484- break
472+ return true
485473 }
486474 time .Sleep (5 * time .Second )
487475 }
476+ return false
477+ }
478+
479+ func createCC (t * testing.T , mc * multiorgContext , ccPkg * resource.CCPackage , ccName , ccVersion string ) {
480+ installCCReq := resmgmt.InstallCCRequest {Name : ccName , Path : "github.com/example_cc" , Version : ccVersion , Package : ccPkg }
481+
482+ // Install example cc to Org1 peers
483+ _ , err := mc .org1ResMgmt .InstallCC (installCCReq , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
484+ require .NoError (t , err , "InstallCC for Org1 failed" )
485+
486+ // Install example cc to Org2 peers
487+ _ , err = mc .org2ResMgmt .InstallCC (installCCReq , resmgmt .WithRetry (retry .DefaultResMgmtOpts ))
488+ require .NoError (t , err , "InstallCC for Org2 failed" )
489+
490+ isInstalled := func (ctxProvider contextAPI.ClientProvider , resMgmt * resmgmt.Client ) bool {
491+ ctx , err := ctxProvider ()
492+ require .NoErrorf (t , err , "Getting client context for [%s] failed" , ctx .Identifier ().MSPID )
493+ discoveryProvider := ctx .LocalDiscoveryProvider ()
494+ discovery , err := discoveryProvider .CreateLocalDiscoveryService (ctx .Identifier ().MSPID )
495+ require .NoErrorf (t , err , "Error creating local discovery service for [%s]" , ctx .Identifier ().MSPID )
496+ peers , err := discovery .GetPeers ()
497+ require .NoErrorf (t , err , "Getting local peers for [%s] failed" , ctx .Identifier ().MSPID )
498+
499+ t .Logf ("Querying [%s] peers to see if chaincode [%s:%s] was installed" , ctx .Identifier ().MSPID , ccName , ccVersion )
500+ installedOnAllPeers := true
501+ for _ , peer := range peers {
502+ t .Logf ("Querying [%s] ..." , peer .URL ())
503+ resp , err := resMgmt .QueryInstalledChaincodes (resmgmt .WithTargets (peer ))
504+ require .NoErrorf (t , err , "QueryInstalledChaincodes for peer [%s] failed" , peer .URL ())
505+
506+ found := false
507+ for _ , ccInfo := range resp .Chaincodes {
508+ t .Logf ("... found chaincode [%s:%s]" , ccInfo .Name , ccInfo .Version )
509+ if ccInfo .Name == ccName && ccInfo .Version == ccVersion {
510+ found = true
511+ break
512+ }
513+ }
514+ if ! found {
515+ t .Logf ("... chaincode [%s:%s] is not installed on peer [%s]" , ccName , ccVersion , peer .URL ())
516+ installedOnAllPeers = false
517+ }
518+ }
519+ return installedOnAllPeers
520+ }
521+
522+ installed := false
523+ for i := 0 ; i < 10 ; i ++ {
524+ if isInstalled (mc .org1AdminClientContext , mc .org1ResMgmt ) {
525+ t .Logf ("Chaincode [%s:%s] is installed on all peers in Org1" , ccName , ccVersion )
526+ installed = true
527+ break
528+ }
529+ t .Logf ("Chaincode [%s:%s] is NOT installed on all peers in Org1. Trying again in 2 seconds..." , ccName , ccVersion )
530+ time .Sleep (2 * time .Second )
531+ }
532+ require .Truef (t , installed , "Expecting chaincode [%s:%s] to be installed on all peers in Org1" )
533+
534+ installed = false
535+ for i := 0 ; i < 10 ; i ++ {
536+ if isInstalled (mc .org2AdminClientContext , mc .org2ResMgmt ) {
537+ t .Logf ("Chaincode [%s:%s] is installed on all peers in Org2" , ccName , ccVersion )
538+ installed = true
539+ break
540+ }
541+ t .Logf ("Chaincode [%s:%s] is NOT installed on all peers in Org2. Trying again in 2 seconds..." , ccName , ccVersion )
542+ time .Sleep (2 * time .Second )
543+ }
544+ require .Truef (t , installed , "Expecting chaincode [%s:%s] to be installed on all peers in Org2" )
545+
546+ instantiateCC (t , mc .org1ResMgmt , ccName , ccVersion )
547+
548+ found := queryInstantiatedCC (t , mc .org1ResMgmt , channelID , ccName )
549+ require .True (t , found , "QueryInstantiatedChaincodes failed to find instantiated '%s' chaincode" , ccName )
550+
551+ found = queryInstantiatedCC (t , mc .org2ResMgmt , channelID , ccName )
488552 require .True (t , found , "QueryInstantiatedChaincodes failed to find instantiated '%s' chaincode" , ccName )
489553}
490554
0 commit comments