Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit b8eb2d9

Browse files
committed
[FAB-8620] Close for fabsdk
This change provides a Close function for fabsdk. This func allows the sdk to cleanup caches, for example. Change-Id: Ie28dd9cbfda74e8554d2a8729b763aaf08de8f7a Signed-off-by: Troy Ronda <troy@troyronda.com>
1 parent 5c6b705 commit b8eb2d9

20 files changed

+100
-18
lines changed

pkg/client/common/selection/dynamicselection/ccpolicyprovider_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func TestCCPolicyProvider(t *testing.T) {
2020
if err != nil {
2121
t.Fatalf("Failed to create new SDK: %s", err)
2222
}
23+
defer sdk.Close()
2324

2425
// Nil sdk
2526
ccPolicyProvider, err := newCCPolicyProvider(nil, "mychannel", "User1", "Org1")
@@ -76,6 +77,7 @@ func TestBadClient(t *testing.T) {
7677
if err != nil {
7778
t.Fatalf("Failed to create new SDK: %s", err)
7879
}
80+
defer sdk.Close()
7981

8082
// Non-existent user
8183
ccPolicyProvider, err := newCCPolicyProvider(sdk, "mychannel", "Invalid", "Org1")

pkg/client/common/selection/dynamicselection/dynamicselection_test.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -337,30 +337,36 @@ func TestDynamicSelection(t *testing.T) {
337337
t.Fatalf("Failed to setup selection provider: %s", err)
338338
}
339339

340-
selectionService, err := selectionProvider.NewSelectionService("")
340+
_, err = selectionProvider.NewSelectionService("")
341341
if err == nil {
342342
t.Fatalf("Should have failed for empty channel name")
343343
}
344344

345-
selectionService, err = selectionProvider.NewSelectionService("mychannel")
345+
_, err = selectionProvider.NewSelectionService("mychannel")
346346
if err == nil {
347347
t.Fatalf("Should have failed since sdk not provided")
348348
}
349349

350+
testLBPolicy(t, c, selectionProvider, mychannelUser)
351+
testCustomLBPolicy(t, c, selectionProvider, mychannelUser)
352+
}
353+
354+
func testLBPolicy(t *testing.T, c core.Config, selectionProvider *SelectionProvider, mychannelUser ChannelUser) {
350355
factory := DynamicSelectionProviderFactory{
351356
selectionProvider: selectionProvider,
352357
}
353358

354359
// Create SDK setup for channel client with dynamic selection
355360
// This step is performed during the test to allow normal SDK-based initialized of the selection provider
356-
_, err = fabsdk.New(
361+
sdk, err := fabsdk.New(
357362
config.FromFile("../../../../../test/fixtures/config/config_test.yaml"),
358363
fabsdk.WithServicePkg(&factory))
359364
if err != nil {
360365
t.Fatalf("Failed to create new SDK: %s", err)
361366
}
367+
defer sdk.Close()
362368

363-
selectionService, err = selectionProvider.NewSelectionService("mychannel")
369+
selectionService, err := selectionProvider.NewSelectionService("mychannel")
364370
if err != nil {
365371
t.Fatalf("Failed to create new selection service for channel: %s", err)
366372
}
@@ -394,24 +400,29 @@ func TestDynamicSelection(t *testing.T) {
394400
t.Fatalf("Should have failed for non-existent cc ID")
395401
}
396402

403+
}
404+
405+
func testCustomLBPolicy(t *testing.T, c core.Config, selectionProvider *SelectionProvider, mychannelUser ChannelUser) {
406+
397407
// Test custom load balancer
398-
selectionProvider, err = New(c, []ChannelUser{mychannelUser}, newCustomLBP())
408+
selectionProvider, err := New(c, []ChannelUser{mychannelUser}, newCustomLBP())
399409
if err != nil {
400410
t.Fatalf("Failed to setup selection provider: %s", err)
401411
}
402412

403-
factory = DynamicSelectionProviderFactory{
413+
factory := DynamicSelectionProviderFactory{
404414
selectionProvider: selectionProvider,
405415
}
406416

407417
// Create SDK setup for channel client with dynamic selection
408418
// This step is performed during the test to allow normal SDK-based initialized of the selection provider
409-
_, err = fabsdk.New(
419+
sdk, err := fabsdk.New(
410420
config.FromFile("../../../../../test/fixtures/config/config_test.yaml"),
411421
fabsdk.WithServicePkg(&factory))
412422
if err != nil {
413423
t.Fatalf("Failed to create new SDK: %s", err)
414424
}
425+
defer sdk.Close()
415426

416427
if selectionProvider.lbp == nil {
417428
t.Fatalf("Failed to set load balancing policy")

pkg/fabsdk/client_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func TestNewGoodClientOpt(t *testing.T) {
2727
if err != nil {
2828
t.Fatalf("Expected no error from New, but got %v", err)
2929
}
30+
defer sdk.Close()
3031

3132
_, err = sdk.NewClient(WithUser(clientValidUser), goodClientOpt()).ResourceMgmt()
3233
if err != nil {
@@ -44,6 +45,7 @@ func TestFromConfigGoodClientOpt(t *testing.T) {
4445
if err != nil {
4546
t.Fatalf("Expected no error from New, but got %v", err)
4647
}
48+
defer sdk.Close()
4749

4850
_, err = sdk.NewClient(WithUser(clientValidUser), goodClientOpt()).ResourceMgmt()
4951
if err != nil {
@@ -62,6 +64,7 @@ func TestNewBadClientOpt(t *testing.T) {
6264
if err != nil {
6365
t.Fatalf("Expected no error from New, but got %v", err)
6466
}
67+
defer sdk.Close()
6568

6669
_, err = sdk.NewClient(WithUser(clientValidUser), badClientOpt()).ResourceMgmt()
6770
if err == nil {
@@ -80,6 +83,7 @@ func TestClient(t *testing.T) {
8083
if err != nil {
8184
t.Fatalf("Expected no error from New, but got %v", err)
8285
}
86+
defer sdk.Close()
8387

8488
_, err = sdk.NewClient(WithUser(clientValidUser)).ResourceMgmt()
8589
if err != nil {
@@ -92,6 +96,7 @@ func TestWithOrg(t *testing.T) {
9296
if err != nil {
9397
t.Fatalf("Expected no error from New, but got %v", err)
9498
}
99+
defer sdk.Close()
95100

96101
_, err = sdk.NewClient(WithUser("notarealuser"), WithOrg(clientValidExtraOrg)).ResourceMgmt()
97102
if err == nil {
@@ -142,6 +147,7 @@ func TestNoIdentity(t *testing.T) {
142147
if err != nil {
143148
t.Fatalf("Expected no error from New, but got %v", err)
144149
}
150+
defer sdk.Close()
145151

146152
_, err = sdk.NewClient(noopIdentityOpt(), goodClientOpt()).ResourceMgmt()
147153
if err == nil {

pkg/fabsdk/context_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestWithUserValid(t *testing.T) {
2323
if err != nil {
2424
t.Fatalf("Expected no error from New, but got %v", err)
2525
}
26+
defer sdk.Close()
2627

2728
opts := identityOptions{}
2829
opt := WithUser(identityValidOptUser)
@@ -40,6 +41,7 @@ func TestWithUserInvalid(t *testing.T) {
4041
if err != nil {
4142
t.Fatalf("Expected no error from New, but got %v", err)
4243
}
44+
defer sdk.Close()
4345

4446
opts := identityOptions{}
4547
opt := WithUser("notarealuser")
@@ -57,6 +59,7 @@ func TestWithIdentity(t *testing.T) {
5759
if err != nil {
5860
t.Fatalf("Expected no error from New, but got %v", err)
5961
}
62+
defer sdk.Close()
6063

6164
identity, err := sdk.newUser(identityValidOptOrg, identityValidOptUser)
6265
if err != nil {

pkg/fabsdk/deprecated_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func TestNewPreEnrolledUserSession(t *testing.T) {
2626
if err != nil {
2727
t.Fatalf("Error initializing SDK: %s", err)
2828
}
29+
defer sdk.Close()
2930

3031
_, err = sdk.newSessionFromIdentityName("org1", txValidClientUser)
3132
if err != nil {

pkg/fabsdk/fabsdk.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,11 @@ func initSDK(sdk *FabricSDK, opts []Option) error {
242242
return nil
243243
}
244244

245+
// Close frees up caches and connections being maintained by the SDK
246+
func (sdk *FabricSDK) Close() {
247+
// TODO: upcoming changes will have Close funcs being called from here.
248+
}
249+
245250
// Config returns the SDK's configuration.
246251
func (sdk *FabricSDK) Config() core.Config {
247252
return sdk.config

pkg/fabsdk/fabsdk_test.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ const (
2424
)
2525

2626
func TestNewGoodOpt(t *testing.T) {
27-
_, err := New(configImpl.FromFile(sdkConfigFile),
27+
sdk, err := New(configImpl.FromFile(sdkConfigFile),
2828
goodOpt())
2929
if err != nil {
3030
t.Fatalf("Expected no error from New, but got %v", err)
3131
}
32+
sdk.Close()
3233
}
3334

3435
func goodOpt() Option {
@@ -38,11 +39,12 @@ func goodOpt() Option {
3839
}
3940

4041
func TestNewBadOpt(t *testing.T) {
41-
_, err := New(configImpl.FromFile(sdkConfigFile),
42+
sdk, err := New(configImpl.FromFile(sdkConfigFile),
4243
badOpt())
4344
if err == nil {
4445
t.Fatalf("Expected error from New")
4546
}
47+
sdk.Close()
4648
}
4749

4850
func badOpt() Option {
@@ -51,17 +53,28 @@ func badOpt() Option {
5153
}
5254
}
5355

56+
func TestDoubleClose(t *testing.T) {
57+
sdk, err := New(configImpl.FromFile(sdkConfigFile),
58+
goodOpt())
59+
if err != nil {
60+
t.Fatalf("Expected no error from New, but got %v", err)
61+
}
62+
sdk.Close()
63+
sdk.Close()
64+
}
65+
5466
func TestWithCorePkg(t *testing.T) {
5567
// Test New SDK with valid config file
5668
c, err := configImpl.FromFile(sdkConfigFile)()
5769
if err != nil {
5870
t.Fatalf("Unexpected error from config: %v", err)
5971
}
6072

61-
_, err = New(WithConfig(c))
73+
sdk, err := New(WithConfig(c))
6274
if err != nil {
6375
t.Fatalf("Error initializing SDK: %s", err)
6476
}
77+
defer sdk.Close()
6578

6679
mockCtrl := gomock.NewController(t)
6780
defer mockCtrl.Finish()
@@ -86,10 +99,11 @@ func TestWithServicePkg(t *testing.T) {
8699
t.Fatalf("Unexpected error from config: %v", err)
87100
}
88101

89-
_, err = New(WithConfig(c))
102+
sdk, err := New(WithConfig(c))
90103
if err != nil {
91104
t.Fatalf("Error initializing SDK: %s", err)
92105
}
106+
defer sdk.Close()
93107

94108
mockCtrl := gomock.NewController(t)
95109
defer mockCtrl.Finish()
@@ -116,20 +130,22 @@ func TestWithSessionPkg(t *testing.T) {
116130
t.Fatalf("Error initializing core factory: %s", err)
117131
}
118132

119-
_, err = New(WithConfig(c))
133+
sdk, err := New(WithConfig(c))
120134
if err != nil {
121135
t.Fatalf("Error initializing SDK: %s", err)
122136
}
137+
sdk.Close()
123138

124139
// Create mock to ensure the provided factory is called.
125140
mockCtrl := gomock.NewController(t)
126141
defer mockCtrl.Finish()
127142
factory := mockapisdk.NewMockSessionClientFactory(mockCtrl)
128143

129-
sdk, err := New(WithConfig(c), WithCorePkg(core), WithSessionPkg(factory))
144+
sdk, err = New(WithConfig(c), WithCorePkg(core), WithSessionPkg(factory))
130145
if err != nil {
131146
t.Fatalf("Error initializing SDK: %s", err)
132147
}
148+
defer sdk.Close()
133149

134150
// Get resource management
135151
_, err = sdk.NewClient(WithUser(sdkValidClientUser)).ResourceMgmt()
@@ -194,6 +210,7 @@ func TestNewDefaultSDKFromByte(t *testing.T) {
194210
if sdk == nil {
195211
t.Fatalf("SDK should not be empty when initialized")
196212
}
213+
sdk.Close()
197214
}
198215

199216
func loadConfigBytesFromFile(t *testing.T, filePath string) ([]byte, error) {
@@ -224,6 +241,7 @@ func TestWithConfigSuccess(t *testing.T) {
224241
if err != nil {
225242
t.Fatalf("Error initializing SDK: %s", err)
226243
}
244+
defer sdk.Close()
227245

228246
client1, err := sdk.config.Client()
229247
if err != nil {

test/integration/e2e/end_to_end.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func Run(t *testing.T, configOpt core.ConfigProvider, sdkOpts ...fabsdk.Option)
4444
if err != nil {
4545
t.Fatalf("Failed to create new SDK: %s", err)
4646
}
47+
defer sdk.Close()
4748

4849
// Channel management client is responsible for managing channels (create/update channel)
4950
// Supply user that has privileges to create channel (in this case orderer admin)

test/integration/e2e/no_orderer_config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func runWithNoOrdererConfig(t *testing.T, configOpt core.ConfigProvider, sdkOpts
3030
if err != nil {
3131
t.Fatalf("Failed to create new SDK: %s", err)
3232
}
33+
defer sdk.Close()
3334

3435
// ************ Test setup complete ************** //
3536

test/integration/fab/channel_ledger_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ func TestLedgerQueries(t *testing.T) {
5858

5959
// Setup tests with a random chaincode ID.
6060
sdk, targets := initializeLedgerTests(t)
61+
defer sdk.Close()
62+
6163
chaincodeID := integration.GenerateRandomID()
6264
if err := integration.InstallAndInstantiateExampleCC(sdk, fabsdk.WithUser("Admin"), orgName, chaincodeID); err != nil {
6365
t.Fatalf("InstallAndInstantiateExampleCC return error: %v", err)

0 commit comments

Comments
 (0)