Skip to content

Commit d0a8ec0

Browse files
Integration test without SP
Signed-off-by: Alexandros Filios <[email protected]>
1 parent c14bfbb commit d0a8ec0

File tree

33 files changed

+733
-216
lines changed

33 files changed

+733
-216
lines changed

Diff for: Makefile

-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ monitoring-docker-images:
7777
docker pull prom/prometheus:latest
7878
docker pull grafana/grafana:latest
7979
docker pull jaegertracing/all-in-one:latest
80-
docker pull otel/opentelemetry-collector:latest
8180

8281
.PHONY: orion-server-images
8382
orion-server-images:

Diff for: integration/fabric/atsa/fsc/views/agree.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"encoding/json"
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/fsc/states"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1314
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
1415
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
1516
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
@@ -28,7 +29,7 @@ type AgreeToSellView struct {
2829

2930
func (a *AgreeToSellView) Call(context view.Context) (interface{}, error) {
3031
// The asset owner creates a new transaction, and
31-
tx, err := state.NewAnonymousTransaction(context)
32+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
3233
assert.NoError(err, "failed creating transaction")
3334

3435
// Sets the namespace where the state should appear, and
@@ -94,7 +95,7 @@ type AgreeToBuyView struct {
9495

9596
func (a *AgreeToBuyView) Call(context view.Context) (interface{}, error) {
9697
// Prepare transaction
97-
tx, err := state.NewAnonymousTransaction(context)
98+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
9899
assert.NoError(err, "failed creating transaction")
99100
tx.SetNamespace("asset_transfer")
100101
fns, err := fabric.GetDefaultFNS(context)

Diff for: integration/fabric/atsa/fsc/views/transfer.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package views
99
import (
1010
"encoding/json"
1111

12+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1213
"github.com/pkg/errors"
1314

1415
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/fsc/states"
@@ -35,7 +36,7 @@ func (f *TransferView) Call(context view.Context) (interface{}, error) {
3536
assert.NoError(err, "failed getting recipient identity")
3637

3738
// Prepare transaction
38-
tx, err := state.NewAnonymousTransaction(context)
39+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
3940
assert.NoError(err, "failed creating transaction")
4041
tx.SetNamespace("asset_transfer")
4142

Diff for: integration/fabric/common/views/finality.go

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ func (a *FinalityView) Call(context view.Context) (interface{}, error) {
3131
return nil, err
3232
}
3333

34+
func NewFinalityViewFactory() *FinalityViewFactory {
35+
return &FinalityViewFactory{}
36+
}
37+
3438
type FinalityViewFactory struct{}
3539

3640
func (c *FinalityViewFactory) NewView(in []byte) (view.View, error) {

Diff for: integration/fabric/iou/iou_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ func (s *TestSuite) TestSucceeded() {
8282
iou.CheckState(s.II, "borrower", iouState, 5)
8383
iou.CheckState(s.II, "lender", iouState, 5)
8484

85-
iou.CheckLocalMetrics(s.II, "borrower", "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/collectEndorsementsView")
86-
iou.CheckPrometheusMetrics(s.II, "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/collectEndorsementsView")
85+
iou.CheckLocalMetrics(s.II, "borrower", "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/CollectEndorsementsView")
86+
iou.CheckPrometheusMetrics(s.II, "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/CollectEndorsementsView")
8787
}
8888

8989
func (s *TestSuite) TestSucceededWithReplicas() {

Diff for: integration/fabric/iou/sdk.go

+92-16
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,114 @@ package iou
99
import (
1010
"errors"
1111

12+
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/iou/views"
1213
"github.com/hyperledger-labs/fabric-smart-client/pkg/node"
1314
dig2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/sdk/dig"
14-
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
15-
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
1615
sdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
16+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
1717
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
18-
"github.com/hyperledger-labs/fabric-smart-client/platform/view/core/id"
19-
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
20-
view3 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view"
21-
"go.opentelemetry.io/otel/trace"
18+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/vfsdk"
2219
)
2320

2421
type SDK struct {
2522
dig2.SDK
2623
}
2724

2825
func NewSDK(registry node.Registry) *SDK {
29-
return &SDK{SDK: sdk.NewSDK(registry)}
26+
return NewFrom(sdk.NewFrom(vfsdk.NewSDK(registry)))
27+
}
28+
29+
func NewFrom(sdk dig2.SDK) *SDK {
30+
return &SDK{SDK: sdk}
3031
}
3132

3233
func (p *SDK) Install() error {
33-
if err := p.SDK.Install(); err != nil {
34+
err := errors.Join(
35+
p.Container().Provide(endorser.NewEndorseViewFactory),
36+
p.Container().Provide(endorser.NewCollectEndorsementsViewFactory),
37+
p.Container().Provide(state.NewRespondExchangeRecipientIdentitiesViewFactory),
38+
p.Container().Provide(state.NewExchangeRecipientIdentitiesViewFactory),
39+
p.Container().Provide(endorser.NewOrderingAndFinalityViewFactory),
40+
p.Container().Provide(state.NewReceiveTransactionViewFactory),
41+
p.Container().Provide(state.NewViewFactory),
42+
)
43+
if err != nil {
44+
return err
45+
}
46+
47+
return p.SDK.Install()
48+
}
49+
50+
func NewApproverSDK(registry node.Registry) *ApproverSDK {
51+
return NewApproverSDKFrom(NewSDK(registry))
52+
}
53+
54+
func NewApproverSDKFrom(sdk dig2.SDK) *ApproverSDK {
55+
return &ApproverSDK{SDK: sdk}
56+
}
57+
58+
type ApproverSDK struct {
59+
dig2.SDK
60+
}
61+
62+
func (p *ApproverSDK) Install() error {
63+
err := errors.Join(
64+
p.Container().Provide(views.NewApproverViewFactory, vfsdk.WithInitiators(&views.CreateIOUView{}, &views.UpdateIOUView{})),
65+
p.Container().Provide(views.NewApproverInitViewFactory, vfsdk.WithFactoryId("init")),
66+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
67+
)
68+
if err != nil {
69+
return err
70+
}
71+
return p.SDK.Install()
72+
}
73+
74+
func NewBorrowerSDK(registry node.Registry) *BorrowerSDK {
75+
return NewBorrowerSDKFrom(NewSDK(registry))
76+
}
77+
78+
func NewBorrowerSDKFrom(sdk dig2.SDK) *BorrowerSDK {
79+
return &BorrowerSDK{SDK: sdk}
80+
}
81+
82+
type BorrowerSDK struct {
83+
dig2.SDK
84+
}
85+
86+
func (p *BorrowerSDK) Install() error {
87+
err := errors.Join(
88+
p.Container().Provide(views.NewCreateIOUViewFactory, vfsdk.WithFactoryId("create")),
89+
p.Container().Provide(views.NewUpdateIOUViewFactory, vfsdk.WithFactoryId("update")),
90+
p.Container().Provide(views.NewQueryViewFactory, vfsdk.WithFactoryId("query")),
91+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
92+
)
93+
if err != nil {
3494
return err
3595
}
96+
return p.SDK.Install()
97+
}
3698

37-
return errors.Join(
38-
digutils.Register[state.VaultService](p.Container()),
39-
digutils.Register[trace.TracerProvider](p.Container()),
40-
digutils.Register[driver.EndpointService](p.Container()),
41-
digutils.Register[view3.IdentityProvider](p.Container()),
42-
digutils.Register[node.ViewManager](p.Container()), // Need to add it as a field in the node
43-
digutils.Register[id.SigService](p.Container()),
44-
digutils.Register[*fabric.NetworkServiceProvider](p.Container()), // GetFabricNetworkService is used by many components
99+
func NewLenderSDK(registry node.Registry) *LenderSDK {
100+
return NewLenderSDKFrom(NewSDK(registry))
101+
}
102+
103+
func NewLenderSDKFrom(sdk dig2.SDK) *LenderSDK {
104+
return &LenderSDK{SDK: sdk}
105+
}
106+
107+
type LenderSDK struct {
108+
dig2.SDK
109+
}
110+
111+
func (p *LenderSDK) Install() error {
112+
err := errors.Join(
113+
p.Container().Provide(views.NewCreateIOUResponderViewFactory, vfsdk.WithInitiators(&views.CreateIOUView{})),
114+
p.Container().Provide(views.NewUpdateIOUResponderViewFactory, vfsdk.WithInitiators(&views.UpdateIOUView{})),
115+
p.Container().Provide(views.NewQueryViewFactory, vfsdk.WithFactoryId("query")),
116+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
45117
)
118+
if err != nil {
119+
return err
120+
}
121+
return p.SDK.Install()
46122
}

Diff for: integration/fabric/iou/topology.go

+4-21
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ package iou
88

99
import (
1010
"github.com/hyperledger-labs/fabric-smart-client/integration"
11-
cviews "github.com/hyperledger-labs/fabric-smart-client/integration/fabric/common/views"
12-
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/iou/views"
1311
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/api"
1412
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric"
1513
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc"
@@ -50,48 +48,33 @@ func Topology(opts *Opts) []api.Topology {
5048
// Therefore, the approver is an endorser of the Fabric namespace we defined above.
5149
AddOptions(fabric.WithOrganization("Org1")).
5250
AddOptions(opts.ReplicationOpts.For("approver1")...).
53-
RegisterResponder(&views.ApproverView{}, &views.CreateIOUView{}).
54-
RegisterResponder(&views.ApproverView{}, &views.UpdateIOUView{}).
55-
RegisterViewFactory("init", &views.ApproverInitViewFactory{}).
56-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
51+
AddSDK(&ApproverSDK{})
5752

5853
// Add another approver as well
5954
fscTopology.AddNodeByName("approver2").
6055
// This option equips the approver's FSC node with an identity belonging to Org1.
6156
// Therefore, the approver is an endorser of the Fabric namespace we defined above.
6257
AddOptions(fabric.WithOrganization("Org1")).
6358
AddOptions(opts.ReplicationOpts.For("approver2")...).
64-
RegisterResponder(&views.ApproverView{}, &views.CreateIOUView{}).
65-
RegisterResponder(&views.ApproverView{}, &views.UpdateIOUView{}).
66-
RegisterViewFactory("init", &views.ApproverInitViewFactory{}).
67-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
59+
AddSDK(&ApproverSDK{})
6860

6961
// Add the borrower's FSC node
7062
fscTopology.AddNodeByName("borrower").
7163
AddOptions(fabric.WithOrganization("Org2")).
7264
AddOptions(opts.ReplicationOpts.For("borrower")...).
73-
RegisterViewFactory("create", &views.CreateIOUViewFactory{}).
74-
RegisterViewFactory("update", &views.UpdateIOUViewFactory{}).
75-
RegisterViewFactory("query", &views.QueryViewFactory{}).
76-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
65+
AddSDK(&BorrowerSDK{})
7766

7867
// Add the lender's FSC node
7968
fscTopology.AddNodeByName("lender").
8069
AddOptions(fabric.WithOrganization("Org3")).
8170
AddOptions(opts.ReplicationOpts.For("lender")...).
82-
RegisterResponder(&views.CreateIOUResponderView{}, &views.CreateIOUView{}).
83-
RegisterResponder(&views.UpdateIOUResponderView{}, &views.UpdateIOUView{}).
84-
RegisterViewFactory("query", &views.QueryViewFactory{}).
85-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
71+
AddSDK(&LenderSDK{})
8672

8773
// Monitoring
8874
monitoringTopology := monitoring.NewTopology()
8975
monitoringTopology.EnablePrometheusGrafana()
9076
monitoringTopology.EnableOPTL()
9177

92-
// Add Fabric SDK to FSC Nodes
93-
fscTopology.AddSDK(opts.SDK)
94-
9578
return []api.Topology{
9679
fabricTopology,
9780
fscTopology,

Diff for: integration/fabric/iou/views/approver.go

+48-12
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ import (
1919
"github.com/pkg/errors"
2020
)
2121

22-
type ApproverView struct{}
22+
type ApproverView struct {
23+
stateView *state.ViewFactory
24+
fnsProvider *fabric.NetworkServiceProvider
25+
}
2326

2427
func (i *ApproverView) Call(context view.Context) (interface{}, error) {
2528
// When the borrower runs the CollectEndorsementsView, at some point, the borrower sends the assembled transaction
2629
// to the approver. Therefore, the approver waits to receive the transaction.
27-
tx, err := state.ReceiveTransaction(context)
30+
tx, err := i.stateView.ReceiveTransaction(context)
2831
assert.NoError(err, "failed receiving transaction")
2932

3033
// The approver can now inspect the transaction to ensure it is as expected.
@@ -72,20 +75,22 @@ func (i *ApproverView) Call(context view.Context) (interface{}, error) {
7275
}
7376

7477
// The approver is ready to send back the transaction signed
75-
_, err = context.RunView(state.NewEndorseView(tx))
78+
_, err = context.RunView(i.stateView.NewEndorseView(tx))
7679
assert.NoError(err)
7780

7881
// Check committer events
7982
var wg sync.WaitGroup
8083
wg.Add(1)
81-
_, ch, err := fabric.GetDefaultChannel(context)
84+
fns, err := i.fnsProvider.FabricNetworkService(fabric.DefaultNetwork)
85+
assert.NoError(err)
86+
ch, err := fns.Channel(fabric.DefaultChannel)
8287
assert.NoError(err)
8388
committer := ch.Committer()
8489
assert.NoError(err, committer.AddFinalityListener(tx.ID(), NewFinalityListener(tx.ID(), driver.Valid, &wg)), "failed to add committer listener")
8590
assert.Error(committer.AddFinalityListener("", NewFinalityListener(tx.ID(), driver.Valid, &wg)), "must have failed")
8691

8792
// Finally, the approver waits that the transaction completes its lifecycle
88-
_, err = context.RunView(state.NewFinalityWithTimeoutView(tx, 1*time.Minute))
93+
_, err = context.RunView(i.stateView.NewFinalityWithTimeoutView(tx, 1*time.Minute))
8994
assert.NoError(err, "failed to run finality view")
9095
wg.Wait()
9196

@@ -97,18 +102,49 @@ func (i *ApproverView) Call(context view.Context) (interface{}, error) {
97102
return nil, nil
98103
}
99104

100-
type ApproverInitView struct{}
105+
type ApproverViewFactory struct {
106+
stateView *state.ViewFactory
107+
fnsProvider *fabric.NetworkServiceProvider
108+
}
109+
110+
func NewApproverViewFactory(
111+
stateView *state.ViewFactory,
112+
fnsProvider *fabric.NetworkServiceProvider,
113+
) *ApproverViewFactory {
114+
return &ApproverViewFactory{
115+
stateView: stateView,
116+
fnsProvider: fnsProvider,
117+
}
118+
}
119+
120+
func (c *ApproverViewFactory) NewView([]byte) (view.View, error) {
121+
return &ApproverView{
122+
stateView: c.stateView,
123+
fnsProvider: c.fnsProvider,
124+
}, nil
125+
}
126+
127+
type ApproverInitView struct {
128+
fnsProvider *fabric.NetworkServiceProvider
129+
}
101130

102-
func (a *ApproverInitView) Call(context view.Context) (interface{}, error) {
103-
_, ch, err := fabric.GetDefaultChannel(context)
131+
func (a *ApproverInitView) Call(view.Context) (interface{}, error) {
132+
fns, err := a.fnsProvider.FabricNetworkService(fabric.DefaultNetwork)
133+
assert.NoError(err)
134+
ch, err := fns.Channel(fabric.DefaultChannel)
104135
assert.NoError(err)
105136
assert.NoError(ch.Committer().ProcessNamespace("iou"), "failed to setup namespace to process")
106137
return nil, nil
107138
}
108139

109-
type ApproverInitViewFactory struct{}
140+
func NewApproverInitViewFactory(fnsProvider *fabric.NetworkServiceProvider) *ApproverInitViewFactory {
141+
return &ApproverInitViewFactory{fnsProvider: fnsProvider}
142+
}
143+
144+
type ApproverInitViewFactory struct {
145+
fnsProvider *fabric.NetworkServiceProvider
146+
}
110147

111-
func (c *ApproverInitViewFactory) NewView(in []byte) (view.View, error) {
112-
f := &ApproverInitView{}
113-
return f, nil
148+
func (c *ApproverInitViewFactory) NewView([]byte) (view.View, error) {
149+
return &ApproverInitView{fnsProvider: c.fnsProvider}, nil
114150
}

0 commit comments

Comments
 (0)