Skip to content

Commit 3d81881

Browse files
authored
rework token/services/db/sql/common/identity.go #1167 (#1168)
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 2472caa commit 3d81881

File tree

32 files changed

+416
-90
lines changed

32 files changed

+416
-90
lines changed

docs/core/extension/zkatdlog/nogh/v2/driver/base.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (d *base) newWalletService(
7373
if err != nil {
7474
return nil, errors.Wrapf(err, "failed to open identity db for tms [%s]", tmsID)
7575
}
76-
baseKeyStore, err := storageProvider.Keystore()
76+
baseKeyStore, err := storageProvider.Keystore(tmsID)
7777
if err != nil {
7878
return nil, errors.Wrapf(err, "failed to open keystore for tms [%s]", tmsID)
7979
}
@@ -90,11 +90,7 @@ func (d *base) newWalletService(
9090
// we have one key manager for fabtoken and one for each idemix issuer public key
9191
kmps := make([]membership.KeyManagerProvider, 0, len(pp.IdemixIssuerPublicKeys)+1)
9292
for _, key := range pp.IdemixIssuerPublicKeys {
93-
backend, err := storageProvider.Keystore()
94-
if err != nil {
95-
return nil, errors.Wrapf(err, "failed to get new keystore backend")
96-
}
97-
keyStore, err := msp2.NewKeyStore(key.Curve, backend)
93+
keyStore, err := msp2.NewKeyStore(key.Curve, baseKeyStore)
9894
if err != nil {
9995
return nil, errors.Wrapf(err, "failed to instantiate bccsp key store")
10096
}

integration/token/common/sdk/identity/provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ func (s *KVSStorageProvider) IdentityStore(tmsID token.TMSID) (driver.IdentitySt
2929
return kvs.NewIdentityStore(s.kvs, tmsID), nil
3030
}
3131

32-
func (s *KVSStorageProvider) Keystore() (driver2.Keystore, error) {
32+
func (s *KVSStorageProvider) Keystore(token.TMSID) (driver2.Keystore, error) {
3333
return kvs.Keystore(s.kvs), nil
3434
}

token/core/fabtoken/v1/driver/base.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (d *base) newWalletService(
5858
if err != nil {
5959
return nil, errors.Wrapf(err, "failed to open identity db for tms [%s]", tmsID)
6060
}
61-
baseKeyStore, err := storageProvider.Keystore()
61+
baseKeyStore, err := storageProvider.Keystore(tmsID)
6262
if err != nil {
6363
return nil, errors.Wrapf(err, "failed to open keystore for tms [%s]", tmsID)
6464
}

token/core/zkatdlog/nogh/v1/driver/base.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (d *base) newWalletService(
7373
if err != nil {
7474
return nil, errors.Wrapf(err, "failed to open identity db for tms [%s]", tmsID)
7575
}
76-
baseKeyStore, err := storageProvider.Keystore()
76+
baseKeyStore, err := storageProvider.Keystore(tmsID)
7777
if err != nil {
7878
return nil, errors.Wrapf(err, "failed to open keystore for tms [%s]", tmsID)
7979
}
@@ -90,11 +90,7 @@ func (d *base) newWalletService(
9090
// we have one key manager for fabtoken and one for each idemix issuer public key
9191
kmps := make([]membership.KeyManagerProvider, 0, len(pp.IdemixIssuerPublicKeys)+1)
9292
for _, key := range pp.IdemixIssuerPublicKeys {
93-
backend, err := storageProvider.Keystore()
94-
if err != nil {
95-
return nil, errors.Wrapf(err, "failed to get new keystore backend")
96-
}
97-
keyStore, err := msp2.NewKeyStore(key.Curve, backend)
93+
keyStore, err := msp2.NewKeyStore(key.Curve, baseKeyStore)
9894
if err != nil {
9995
return nil, errors.Wrapf(err, "failed to instantiate bccsp key store")
10096
}

token/sdk/dig/sdk.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ import (
3838
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/postgres"
3939
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/sqlite"
4040
identity2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity"
41-
driver4 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/driver"
42-
kvs2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/storage/kvs"
4341
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identitydb"
4442
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
4543
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
@@ -48,6 +46,7 @@ import (
4846
sdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/driver"
4947
"github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/sherdlock"
5048
selector "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/simple"
49+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/storage/keystoredb"
5150
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokendb"
5251
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokenlockdb"
5352
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
@@ -138,9 +137,9 @@ func (p *SDK) Install() error {
138137
p.Container().Provide(auditdb.NewStoreServiceManager),
139138
p.Container().Provide(digutils.Identity[auditdb.StoreServiceManager](), dig.As(new(auditor.StoreServiceManager))),
140139
p.Container().Provide(identitydb.NewStoreServiceManager),
140+
p.Container().Provide(keystoredb.NewStoreServiceManager),
141141
p.Container().Provide(walletdb.NewStoreServiceManager),
142142
p.Container().Provide(tokenlockdb.NewStoreServiceManager),
143-
p.Container().Provide(func(kvs *kvs.KVS) driver4.Keystore { return kvs2.Keystore(kvs) }),
144143
p.Container().Provide(identity.NewDBStorageProvider),
145144
p.Container().Provide(digutils.Identity[*identity.DBStorageProvider](), dig.As(new(identity2.StorageProvider))),
146145
p.Container().Provide(NewAuditorCheckServiceProvider),
@@ -189,6 +188,7 @@ func (p *SDK) Install() error {
189188
digutils.Register[tokendb.StoreServiceManager](p.Container()),
190189
digutils.Register[auditdb.StoreServiceManager](p.Container()),
191190
digutils.Register[identitydb.StoreServiceManager](p.Container()),
191+
digutils.Register[keystoredb.StoreServiceManager](p.Container()),
192192
digutils.Register[*vault.Provider](p.Container()),
193193
digutils.Register[driver.ConfigService](p.Container()),
194194
digutils.Register[*identity.DBStorageProvider](p.Container()),

token/sdk/identity/provider.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,25 @@ import (
1010
"github.com/hyperledger-labs/fabric-token-sdk/token"
1111
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/driver"
1212
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identitydb"
13+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/storage/keystoredb"
1314
"github.com/hyperledger-labs/fabric-token-sdk/token/services/walletdb"
1415
)
1516

1617
type DBStorageProvider struct {
17-
kvs driver.Keystore
1818
identityStoreServiceManager identitydb.StoreServiceManager
1919
walletStoreServiceManager walletdb.StoreServiceManager
20+
keyStoreStoreServiceManager keystoredb.StoreServiceManager
2021
}
2122

2223
func NewDBStorageProvider(
23-
kvs driver.Keystore,
2424
identityStoreServiceManager identitydb.StoreServiceManager,
2525
walletStoreServiceManager walletdb.StoreServiceManager,
26+
keyStoreStoreServiceManager keystoredb.StoreServiceManager,
2627
) *DBStorageProvider {
2728
return &DBStorageProvider{
28-
kvs: kvs,
2929
identityStoreServiceManager: identityStoreServiceManager,
3030
walletStoreServiceManager: walletStoreServiceManager,
31+
keyStoreStoreServiceManager: keyStoreStoreServiceManager,
3132
}
3233
}
3334

@@ -39,6 +40,6 @@ func (s *DBStorageProvider) IdentityStore(tmsID token.TMSID) (driver.IdentitySto
3940
return s.identityStoreServiceManager.StoreServiceByTMSId(tmsID)
4041
}
4142

42-
func (s *DBStorageProvider) Keystore() (driver.Keystore, error) {
43-
return s.kvs, nil
43+
func (s *DBStorageProvider) Keystore(tmsID token.TMSID) (driver.Keystore, error) {
44+
return s.keyStoreStoreServiceManager.StoreServiceByTMSId(tmsID)
4445
}

token/services/db/dbtest/identity.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,20 @@ func TConfigurations(t *testing.T, db driver.IdentityStore) {
5454

5555
it, err := db.IteratorConfigurations(ctx, expected.Type)
5656
assert.NoError(t, err)
57-
assert.True(t, it.HasNext())
5857
c, err := it.Next()
5958
assert.NoError(t, err)
60-
assert.True(t, reflect.DeepEqual(expected, c))
61-
assert.NoError(t, it.Close())
59+
assert.True(t, reflect.DeepEqual(expected, *c))
60+
it.Close()
6261

6362
exists, err := db.ConfigurationExists(ctx, expected.ID, expected.Type, expected.URL)
6463
assert.NoError(t, err)
6564
assert.True(t, exists)
6665

6766
_, err = db.IteratorConfigurations(ctx, "no core")
6867
assert.NoError(t, err)
69-
assert.False(t, it.HasNext())
68+
next, err := it.Next()
69+
assert.NoError(t, err)
70+
assert.Nil(t, next)
7071

7172
exists, err = db.ConfigurationExists(ctx, "pineapple", "no core", expected.URL)
7273
assert.NoError(t, err)
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package dbtest
8+
9+
import (
10+
"testing"
11+
12+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver"
13+
"github.com/stretchr/testify/assert"
14+
"github.com/test-go/testify/require"
15+
)
16+
17+
func KeyStoreTest(t *testing.T, cfgProvider cfgProvider) {
18+
t.Helper()
19+
for _, c := range KeyStoreCases {
20+
driver := cfgProvider(c.Name)
21+
db, err := driver.NewKeyStore("", c.Name)
22+
if err != nil {
23+
t.Fatal(err)
24+
}
25+
t.Run(c.Name, func(xt *testing.T) {
26+
c.Fn(xt, db)
27+
})
28+
}
29+
}
30+
31+
var KeyStoreCases = []struct {
32+
Name string
33+
Fn func(*testing.T, driver.KeyStore)
34+
}{
35+
{"TKeyStoreAddGet", TKeyStoreAddGet},
36+
}
37+
38+
func TKeyStoreAddGet(t *testing.T, db driver.KeyStore) {
39+
t.Helper()
40+
41+
keys := []string{"v1", "v2", "v3"}
42+
for _, k := range keys {
43+
require.NoError(t, db.Put(k, &Value{V: k + "_value"}))
44+
}
45+
46+
for _, k := range keys {
47+
v := &Value{}
48+
require.NoError(t, db.Get(k, v))
49+
assert.Equal(t, k+"_value", v.V)
50+
}
51+
}
52+
53+
type Value struct {
54+
V string
55+
}

token/services/db/driver/driver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ type Driver interface {
2929
NewAuditTransaction(driver.PersistenceName, ...string) (AuditTransactionStore, error)
3030

3131
NewOwnerTransaction(driver.PersistenceName, ...string) (TokenTransactionStore, error)
32+
33+
NewKeyStore(name driver.PersistenceName, params ...string) (KeyStore, error)
3234
}

token/services/db/driver/identity.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ package driver
88

99
import (
1010
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
11-
driver2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/driver"
11+
idriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/driver"
1212
)
1313

1414
type (
15-
WalletID = driver2.WalletID
15+
WalletID = idriver.WalletID
1616
IdentityConfiguration = driver.IdentityConfiguration
17-
WalletStore = driver2.WalletStoreService
18-
IdentityStore = driver2.IdentityStoreService
17+
WalletStore = idriver.WalletStoreService
18+
IdentityStore = idriver.IdentityStoreService
19+
KeyStore = idriver.Keystore
1920
)

0 commit comments

Comments
 (0)