Skip to content

Commit 41195be

Browse files
wenjianqiaoyacovm
authored andcommitted
[FAB-11941] Commit token tx via custom processor
- Register token tx Processor with customtx - Correct the method name in FabricIdentityDeserializerManager Change-Id: I3dc1c7aa1eac1b37bf6a7eeaac08484806f7fb69 Signed-off-by: Wenjian Qiao <wenjianq@gmail.com>
1 parent 8352c4b commit 41195be

File tree

4 files changed

+35
-39
lines changed

4 files changed

+35
-39
lines changed

core/peer/configtx_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
genesisconfig "github.com/hyperledger/fabric/common/tools/configtxgen/localconfig"
2525
"github.com/hyperledger/fabric/core/config/configtest"
2626
"github.com/hyperledger/fabric/core/ledger"
27+
"github.com/hyperledger/fabric/core/ledger/customtx"
2728
"github.com/hyperledger/fabric/core/ledger/ledgermgmt"
2829
mspmgmt "github.com/hyperledger/fabric/msp/mgmt"
2930
ordererconfig "github.com/hyperledger/fabric/orderer/common/localconfig"
@@ -130,6 +131,21 @@ func TestGenesisBlockCreateLedger(t *testing.T) {
130131
t.Logf("chanConf = %s", chanConf)
131132
}
132133

134+
func TestCustomTxProcessors(t *testing.T) {
135+
cleanup := setupPeerFS(t)
136+
defer cleanup()
137+
138+
ledgermgmt.InitializeExistingTestEnvWithInitializer(&ledgermgmt.Initializer{
139+
CustomTxProcessors: ConfigTxProcessors,
140+
})
141+
defer ledgermgmt.CleanupTestEnv()
142+
143+
processor := customtx.GetProcessor(common.HeaderType_CONFIG)
144+
assert.NotNil(t, processor)
145+
processor = customtx.GetProcessor(common.HeaderType_TOKEN_TRANSACTION)
146+
assert.NotNil(t, processor)
147+
}
148+
133149
type testHelper struct {
134150
t *testing.T
135151
}

core/peer/peer.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ import (
3939
"github.com/hyperledger/fabric/protos/common"
4040
pb "github.com/hyperledger/fabric/protos/peer"
4141
"github.com/hyperledger/fabric/protos/utils"
42+
"github.com/hyperledger/fabric/token/tms/manager"
43+
"github.com/hyperledger/fabric/token/transaction"
4244
"github.com/pkg/errors"
4345
"github.com/spf13/viper"
4446
"golang.org/x/sync/semaphore"
@@ -49,8 +51,12 @@ var peerLogger = flogging.MustGetLogger("peer")
4951
var peerServer *comm.GRPCServer
5052

5153
var configTxProcessor = newConfigTxProcessor()
54+
var tokenTxProcessor = &transaction.Processor{
55+
TMSManager: &manager.Manager{
56+
IdentityDeserializerManager: &manager.FabricIdentityDeserializerManager{}}}
5257
var ConfigTxProcessors = customtx.Processors{
53-
common.HeaderType_CONFIG: configTxProcessor,
58+
common.HeaderType_CONFIG: configTxProcessor,
59+
common.HeaderType_TOKEN_TRANSACTION: tokenTxProcessor,
5460
}
5561

5662
// singleton instance to manage credentials for the peer across channel config changes

token/tms/manager/manager.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,22 @@ SPDX-License-Identifier: Apache-2.0
77
package manager
88

99
import (
10+
"github.com/hyperledger/fabric/msp/mgmt"
1011
"github.com/hyperledger/fabric/token/identity"
1112
"github.com/hyperledger/fabric/token/tms/plain"
1213
"github.com/hyperledger/fabric/token/transaction"
1314
"github.com/pkg/errors"
1415
)
1516

16-
// FabricIdentityDeserializerManager implements a DeserializerManager
17-
// by routing the call to a mapping function.
17+
//go:generate counterfeiter -o mock/identity_deserializer_manager.go -fake-name DeserializerManager . DeserializerManager
18+
19+
// FabricIdentityDeserializerManager implements an DeserializerManager
20+
// by routing the call to the msp/mgmt package
1821
type FabricIdentityDeserializerManager struct {
19-
// Mapper maps channel names to deserializer.
20-
// For example, it can be implemented by using the msp/mgmt package,
21-
// i.e. mgmt.GetDeserializers()[channel]
22-
Mapper func(channel string) (identity.Deserializer, bool)
2322
}
2423

25-
func (m *FabricIdentityDeserializerManager) Deserializer(channel string) (identity.Deserializer, error) {
26-
id, ok := m.Mapper(channel)
24+
func (*FabricIdentityDeserializerManager) Deserializer(channel string) (identity.Deserializer, error) {
25+
id, ok := mgmt.GetDeserializers()[channel]
2726
if !ok {
2827
return nil, errors.New("channel not found")
2928
}

token/tms/manager/manager_test.go

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0
77
package manager_test
88

99
import (
10-
"github.com/hyperledger/fabric/token/identity"
1110
"github.com/hyperledger/fabric/token/identity/mock"
1211
"github.com/hyperledger/fabric/token/tms/manager"
1312
"github.com/hyperledger/fabric/token/tms/plain"
@@ -29,11 +28,11 @@ var _ = Describe("Manager", func() {
2928

3029
Describe("Get a TxProcessor for a non-existent channel", func() {
3130
BeforeEach(func() {
32-
fakeIdentityDeserializerManager.DeserializerReturns(nil, errors.New("GetIdentityDeserializerReturns no-way-man"))
31+
fakeIdentityDeserializerManager.DeserializerReturns(nil, errors.New("GetDeserializerReturns no-way-man"))
3332
})
3433
It("returns an error", func() {
3534
_, err := mgm.GetTxProcessor("boguschannel")
36-
Expect(err.Error()).To(Equal("failed getting identity deserialiser manager for channel 'boguschannel': GetIdentityDeserializerReturns no-way-man"))
35+
Expect(err.Error()).To(Equal("failed getting identity deserialiser manager for channel 'boguschannel': GetDeserializerReturns no-way-man"))
3736
})
3837
})
3938

@@ -60,36 +59,12 @@ var _ = Describe("Manager", func() {
6059
})
6160

6261
var _ = Describe("FabricIdentityDeserializerManager", func() {
63-
var (
64-
fabricIdentityDeserializerManager *manager.FabricIdentityDeserializerManager
65-
)
66-
67-
Describe("Get an IdentityDeserializer for an existent channel", func() {
62+
Describe("Get an IdentityDeserializer for a non-existent channel", func() {
6863
var (
69-
fakeDeserilizer *mock.Deserializer
64+
fabricIdentityDeserializerManager *manager.FabricIdentityDeserializerManager
7065
)
7166
BeforeEach(func() {
72-
fakeDeserilizer = &mock.Deserializer{}
73-
fabricIdentityDeserializerManager = &manager.FabricIdentityDeserializerManager{
74-
Mapper: func(channel string) (identity.Deserializer, bool) {
75-
return fakeDeserilizer, true
76-
},
77-
}
78-
})
79-
It("returns a deserializer", func() {
80-
d, err := fabricIdentityDeserializerManager.Deserializer("boguschannel")
81-
Expect(err).NotTo(HaveOccurred())
82-
Expect(d).To(Equal(fakeDeserilizer))
83-
})
84-
})
85-
86-
Describe("Get an IdentityDeserializer for a non-existent channel", func() {
87-
BeforeEach(func() {
88-
fabricIdentityDeserializerManager = &manager.FabricIdentityDeserializerManager{
89-
Mapper: func(channel string) (identity.Deserializer, bool) {
90-
return nil, false
91-
},
92-
}
67+
fabricIdentityDeserializerManager = &manager.FabricIdentityDeserializerManager{}
9368
})
9469
It("returns an error", func() {
9570
_, err := fabricIdentityDeserializerManager.Deserializer("boguschannel")

0 commit comments

Comments
 (0)