|
| 1 | +/* |
| 2 | +Copyright SecureKey Technologies Inc. All Rights Reserved. |
| 3 | +
|
| 4 | +SPDX-License-Identifier: Apache-2.0 |
| 5 | +*/ |
| 6 | + |
| 7 | +package sdk |
| 8 | + |
| 9 | +import ( |
| 10 | + "strings" |
| 11 | + "testing" |
| 12 | + "time" |
| 13 | + |
| 14 | + "github.com/hyperledger/fabric-sdk-go/pkg/client/channel" |
| 15 | + "github.com/hyperledger/fabric-sdk-go/pkg/client/ledger" |
| 16 | + "github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt" |
| 17 | + "github.com/hyperledger/fabric-sdk-go/pkg/context" |
| 18 | + "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk" |
| 19 | + "github.com/hyperledger/fabric-sdk-go/test/integration" |
| 20 | +) |
| 21 | + |
| 22 | +//TestParentContext tests to make sure external grpc context can be passed as a parent context to highlevel functions |
| 23 | +func TestParentContext(t *testing.T) { |
| 24 | + |
| 25 | + // Using shared SDK instance to increase test speed. |
| 26 | + sdk := mainSDK |
| 27 | + target := mainTestSetup.Targets[0] |
| 28 | + chaincodeID := mainChaincodeID |
| 29 | + |
| 30 | + //prepare contexts |
| 31 | + org1AdminClientContext := sdk.Context(fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1Name)) |
| 32 | + org1AdminChannelContext := sdk.ChannelContext(mainTestSetup.ChannelID, fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1Name)) |
| 33 | + |
| 34 | + //prepare context |
| 35 | + ctx, err := org1AdminClientContext() |
| 36 | + if err != nil { |
| 37 | + t.Fatal("failed to get client context") |
| 38 | + } |
| 39 | + |
| 40 | + //get parent context and cancel |
| 41 | + parentContext, cancel := context.NewRequest(ctx, context.WithTimeout(20*time.Second)) |
| 42 | + //Cancel in advance - to make sure test fails with 'context cancelled' error |
| 43 | + cancel() |
| 44 | + |
| 45 | + // Resource management client |
| 46 | + resClient, err := resmgmt.New(org1AdminClientContext) |
| 47 | + if err != nil { |
| 48 | + t.Fatalf("Failed to create new resource management client: %s", err) |
| 49 | + } |
| 50 | + |
| 51 | + _, err = resClient.QueryChannels(resmgmt.WithTargetURLs(target), resmgmt.WithParentContext(parentContext)) |
| 52 | + if err == nil && !strings.Contains(err.Error(), "context canceled") { |
| 53 | + t.Fatalf("expected context cancelled error but got: %v", err) |
| 54 | + } |
| 55 | + |
| 56 | + // Channel client |
| 57 | + chClient, err := channel.New(org1AdminChannelContext) |
| 58 | + if err != nil { |
| 59 | + t.Fatalf("Failed to create new resource management client: %s", err) |
| 60 | + } |
| 61 | + |
| 62 | + _, err = chClient.Query(channel.Request{ChaincodeID: chaincodeID, Fcn: "invoke", Args: integration.ExampleCCQueryArgs()}, |
| 63 | + channel.WithParentContext(parentContext)) |
| 64 | + if err == nil && !strings.Contains(err.Error(), "context canceled") { |
| 65 | + t.Fatalf("expected context cancelled error but got: %v", err) |
| 66 | + } |
| 67 | + |
| 68 | + // ledger client |
| 69 | + legerClient, err := ledger.New(org1AdminChannelContext) |
| 70 | + if err != nil { |
| 71 | + t.Fatalf("Failed to create new resource management client: %s", err) |
| 72 | + } |
| 73 | + |
| 74 | + _, err = legerClient.QueryInfo(ledger.WithParentContext(parentContext)) |
| 75 | + if err == nil && !strings.Contains(err.Error(), "context canceled") { |
| 76 | + t.Fatalf("expected context cancelled error but got: %v", err) |
| 77 | + } |
| 78 | + |
| 79 | +} |
0 commit comments