Skip to content

Commit

Permalink
[FAB-7661] Functional parameters for fabsdk.New
Browse files Browse the repository at this point in the history
This patch adjusts fabsdk to use a functional parameter
style to provide more explicit options and better
flexibility.

Change-Id: Ib2bc77062f68447d3550aff82952e756fd5f1556
Signed-off-by: Troy Ronda <troy@troyronda.com>
  • Loading branch information
troyronda committed Jan 12, 2018
1 parent 06a1bae commit ab16930
Show file tree
Hide file tree
Showing 9 changed files with 248 additions and 251 deletions.
59 changes: 40 additions & 19 deletions def/fabapi/deprecated.go
Expand Up @@ -4,13 +4,18 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

// Package fabapi is deprecated and will be removed - see pkg/fabsdk
package fabapi

import (
"github.com/hyperledger/fabric-sdk-go/api/apilogging"
"github.com/hyperledger/fabric-sdk-go/def/factory/defclient"
"github.com/hyperledger/fabric-sdk-go/def/factory/defcore"
"github.com/hyperledger/fabric-sdk-go/def/factory/defsvc"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
apisdk "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/api"
"github.com/hyperledger/fabric-sdk-go/pkg/logging"
"github.com/hyperledger/fabric-sdk-go/pkg/logging/deflogger"
)

var logger = logging.NewLogger("fabric_sdk_go")
Expand Down Expand Up @@ -42,36 +47,52 @@ type StateStoreOpts struct {
// NewSDK wraps the NewSDK func moved to the pkg folder.
// Notice: this wrapper is deprecated and will be removed.
func NewSDK(options Options) (*fabsdk.FabricSDK, error) {
opts := newSDKOptionsFromWrapper(options)
sdk, err := fabsdk.NewSDK(opts)
sdk, err := fabsdk.New(
fabsdk.ConfigBytes(options.ConfigByte, options.ConfigType),
fabsdk.ConfigFile(options.ConfigFile),
fabsdk.StateStorePath(options.StateStoreOpts.Path),
pkgSuiteFromOptions(options))

if err != nil {
return nil, err
}

logger.Info("fabapi.NewSDK is depecated - please use fabsdk.NewSDK")
logger.Debug("fabapi.NewSDK is deprecated - please use fabsdk.New")

return sdk, nil
}

// newSDKOptionsFromWrapper populates the SDK options with the default implementation referenced by the fabapi package
func newSDKOptionsFromWrapper(opt Options) fabsdk.Options {
stateStoreOpts := fabsdk.StateStoreOpts{
Path: opt.StateStoreOpts.Path,
func pkgSuiteFromOptions(options Options) fabsdk.SDKOption {
impl := apisdk.PkgSuite{}
if options.CoreFactory != nil {
impl.Core = options.CoreFactory
} else {
impl.Core = defcore.NewProviderFactory()
}

if options.ServiceFactory != nil {
impl.Service = options.ServiceFactory
} else {
impl.Service = defsvc.NewProviderFactory()
}

sdkOpt := fabsdk.Options{
ConfigFile: opt.ConfigFile,
ConfigByte: opt.ConfigByte,
ConfigType: opt.ConfigType,
StateStoreOpts: stateStoreOpts,
CoreFactory: opt.CoreFactory,
ServiceFactory: opt.ServiceFactory,
ContextFactory: opt.ContextFactory,
SessionFactory: opt.SessionFactory,
LoggerFactory: opt.LoggerFactory,
if options.ContextFactory != nil {
impl.Context = options.ContextFactory
} else {
impl.Context = defclient.NewOrgClientFactory()
}

PopulateSDKOpts(&sdkOpt)
if options.SessionFactory != nil {
impl.Session = options.SessionFactory
} else {
impl.Session = defclient.NewSessionClientFactory()
}

if options.LoggerFactory != nil {
impl.Logger = options.LoggerFactory
} else {
impl.Logger = deflogger.LoggerProvider()
}

return sdkOpt
return fabsdk.PkgSuiteAsOpt(impl)
}
46 changes: 0 additions & 46 deletions def/fabapi/fabapi.go

This file was deleted.

42 changes: 0 additions & 42 deletions def/fabapi/fabapi_test.go

This file was deleted.

33 changes: 33 additions & 0 deletions def/pkgsuite/defpkgsuite/pkgsuite.go
@@ -0,0 +1,33 @@
/*
Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

// Package defpkgsuite provides a default implementation of the fabric API for fabsdk
package defpkgsuite

import (
"github.com/hyperledger/fabric-sdk-go/def/factory/defclient"
"github.com/hyperledger/fabric-sdk-go/def/factory/defcore"
"github.com/hyperledger/fabric-sdk-go/def/factory/defsvc"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
sdkapi "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/api"
"github.com/hyperledger/fabric-sdk-go/pkg/logging/deflogger"
)

// SDKOpt provides the default implementation for the SDK
func SDKOpt() fabsdk.SDKOption {
return fabsdk.PkgSuiteAsOpt(newPkgSuite())
}

func newPkgSuite() sdkapi.PkgSuite {
pkgSuite := sdkapi.PkgSuite{
Core: defcore.NewProviderFactory(),
Service: defsvc.NewProviderFactory(),
Context: defclient.NewOrgClientFactory(),
Session: defclient.NewSessionClientFactory(),
Logger: deflogger.LoggerProvider(),
}
return pkgSuite
}
42 changes: 42 additions & 0 deletions def/pkgsuite/defpkgsuite/pkgsuite_test.go
@@ -0,0 +1,42 @@
/*
Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package defpkgsuite

import (
"testing"

"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
)

func TestSDKOpt(t *testing.T) {
opt := SDKOpt()

_, err := fabsdk.New(opt, fabsdk.ConfigFile("../../../test/fixtures/config/config_test.yaml"))
if err != nil {
t.Fatalf("Unexpected error constructing SDK: %v", err)
}
}

func TestNewPkgSuite(t *testing.T) {
pkgsuite := newPkgSuite()

if pkgsuite.Context == nil {
t.Fatalf("Context is nil")
}
if pkgsuite.Core == nil {
t.Fatalf("Core is nil")
}
if pkgsuite.Logger == nil {
t.Fatalf("Logger is nil")
}
if pkgsuite.Service == nil {
t.Fatalf("Service is nil")
}
if pkgsuite.Session == nil {
t.Fatalf("Session is nil")
}
}
10 changes: 10 additions & 0 deletions pkg/fabsdk/api/factory.go
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/hyperledger/fabric-sdk-go/api/apicore"
"github.com/hyperledger/fabric-sdk-go/api/apicryptosuite"
fab "github.com/hyperledger/fabric-sdk-go/api/apifabclient"
"github.com/hyperledger/fabric-sdk-go/api/apilogging"
txn "github.com/hyperledger/fabric-sdk-go/api/apitxn"
chmgmt "github.com/hyperledger/fabric-sdk-go/api/apitxn/chmgmtclient"
resmgmt "github.com/hyperledger/fabric-sdk-go/api/apitxn/resmgmtclient"
Expand Down Expand Up @@ -61,3 +62,12 @@ type SessionClientFactory interface {
NewResourceMgmtClient(context SDK, session Session, config apiconfig.Config, filter resmgmt.TargetFilter) (resmgmt.ResourceMgmtClient, error)
NewChannelClient(context SDK, session Session, config apiconfig.Config, channelID string) (txn.ChannelClient, error)
}

// PkgSuite holds the package factories that create clients and providers
type PkgSuite struct {
Core CoreProviderFactory
Service ServiceProviderFactory
Context OrgClientFactory
Session SessionClientFactory
Logger apilogging.LoggerProvider
}

0 comments on commit ab16930

Please sign in to comment.