Skip to content

Commit 9f7a312

Browse files
committed
Unit tests and documentations
Signed-off-by: AkramBitar <akram@il.ibm.com>
1 parent 0ee62f7 commit 9f7a312

36 files changed

Lines changed: 2898 additions & 21 deletions

token/sdk/db/checks.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ import (
1616
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx"
1717
)
1818

19+
// AuditorCheckServiceProvider creates check services for auditors.
20+
// It combines default checkers with custom checkers for database validation.
1921
type AuditorCheckServiceProvider struct {
2022
tmsProvider common.TokenManagementServiceProvider
2123
networkProvider common.NetworkProvider
2224
checkers []common.NamedChecker
2325
}
2426

27+
// NewAuditorCheckServiceProvider creates a new auditor check service provider.
2528
func NewAuditorCheckServiceProvider(tmsProvider common.TokenManagementServiceProvider, networkProvider common.NetworkProvider, checkers []common.NamedChecker) *AuditorCheckServiceProvider {
2629
return &AuditorCheckServiceProvider{
2730
tmsProvider: tmsProvider,
@@ -30,16 +33,21 @@ func NewAuditorCheckServiceProvider(tmsProvider common.TokenManagementServicePro
3033
}
3134
}
3235

36+
// CheckService creates a check service for the given TMS ID and databases.
37+
// It combines default checkers with custom checkers provided during initialization.
3338
func (a *AuditorCheckServiceProvider) CheckService(id token.TMSID, adb *auditdb.StoreService, tdb *tokens.Service) (auditor.CheckService, error) {
3439
return common.NewChecksService(append(common.NewDefaultCheckers(a.tmsProvider, a.networkProvider, adb, tdb, id), a.checkers...)), nil
3540
}
3641

42+
// OwnerCheckServiceProvider creates check services for token owners.
43+
// It combines default checkers with custom checkers for database validation.
3744
type OwnerCheckServiceProvider struct {
3845
tmsProvider common.TokenManagementServiceProvider
3946
networkProvider common.NetworkProvider
4047
checkers []common.NamedChecker
4148
}
4249

50+
// NewOwnerCheckServiceProvider creates a new owner check service provider.
4351
func NewOwnerCheckServiceProvider(tmsProvider common.TokenManagementServiceProvider, networkProvider common.NetworkProvider, checkers []common.NamedChecker) *OwnerCheckServiceProvider {
4452
return &OwnerCheckServiceProvider{
4553
tmsProvider: tmsProvider,
@@ -48,6 +56,8 @@ func NewOwnerCheckServiceProvider(tmsProvider common.TokenManagementServiceProvi
4856
}
4957
}
5058

59+
// CheckService creates a check service for the given TMS ID and databases.
60+
// It combines default checkers with custom checkers provided during initialization.
5161
func (a *OwnerCheckServiceProvider) CheckService(id token.TMSID, txdb *ttxdb.StoreService, tdb *tokens.Service) (ttx.CheckService, error) {
5262
return common.NewChecksService(append(common.NewDefaultCheckers(a.tmsProvider, a.networkProvider, txdb, tdb, id), a.checkers...)), nil
5363
}

token/sdk/db/checks_test.go

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package db
8+
9+
import (
10+
"context"
11+
"testing"
12+
13+
"github.com/hyperledger-labs/fabric-token-sdk/token"
14+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/storage/db/common"
15+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/storage/db/common/mock"
16+
"github.com/stretchr/testify/assert"
17+
"github.com/stretchr/testify/require"
18+
)
19+
20+
// TestNewAuditorCheckServiceProvider verifies that NewAuditorCheckServiceProvider
21+
// correctly initializes an AuditorCheckServiceProvider with the given dependencies.
22+
func TestNewAuditorCheckServiceProvider(t *testing.T) {
23+
tmsProvider := &mock.TokenManagementServiceProvider{}
24+
networkProvider := &mock.NetworkProvider{}
25+
checkers := []common.NamedChecker{
26+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
27+
{Name: "checker2", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
28+
}
29+
30+
provider := NewAuditorCheckServiceProvider(tmsProvider, networkProvider, checkers)
31+
32+
assert.NotNil(t, provider)
33+
assert.Equal(t, tmsProvider, provider.tmsProvider)
34+
assert.Equal(t, networkProvider, provider.networkProvider)
35+
assert.Equal(t, checkers, provider.checkers)
36+
}
37+
38+
// TestAuditorCheckServiceProvider_CheckService verifies that CheckService
39+
// creates a check service with default and custom checkers.
40+
func TestAuditorCheckServiceProvider_CheckService(t *testing.T) {
41+
tmsProvider := &mock.TokenManagementServiceProvider{}
42+
networkProvider := &mock.NetworkProvider{}
43+
checkers := []common.NamedChecker{
44+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
45+
}
46+
47+
provider := NewAuditorCheckServiceProvider(tmsProvider, networkProvider, checkers)
48+
49+
tmsID := token.TMSID{
50+
Network: "test-network",
51+
Channel: "test-channel",
52+
Namespace: "test-namespace",
53+
}
54+
55+
// Note: This test will return a service but we can't fully test it without mocking the dependencies
56+
// The actual CheckService creation requires valid auditdb and tokens services
57+
service, err := provider.CheckService(tmsID, nil, nil)
58+
59+
// We expect the service to be created even with nil dependencies
60+
// as the common.NewChecksService should handle it
61+
assert.NotNil(t, service)
62+
assert.NoError(t, err)
63+
}
64+
65+
// TestNewOwnerCheckServiceProvider verifies that NewOwnerCheckServiceProvider
66+
// correctly initializes an OwnerCheckServiceProvider with the given dependencies.
67+
func TestNewOwnerCheckServiceProvider(t *testing.T) {
68+
tmsProvider := &mock.TokenManagementServiceProvider{}
69+
networkProvider := &mock.NetworkProvider{}
70+
checkers := []common.NamedChecker{
71+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
72+
{Name: "checker2", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
73+
}
74+
75+
provider := NewOwnerCheckServiceProvider(tmsProvider, networkProvider, checkers)
76+
77+
assert.NotNil(t, provider)
78+
assert.Equal(t, tmsProvider, provider.tmsProvider)
79+
assert.Equal(t, networkProvider, provider.networkProvider)
80+
assert.Equal(t, checkers, provider.checkers)
81+
}
82+
83+
// TestOwnerCheckServiceProvider_CheckService verifies that CheckService
84+
// creates a check service with default and custom checkers.
85+
func TestOwnerCheckServiceProvider_CheckService(t *testing.T) {
86+
tmsProvider := &mock.TokenManagementServiceProvider{}
87+
networkProvider := &mock.NetworkProvider{}
88+
checkers := []common.NamedChecker{
89+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
90+
}
91+
92+
provider := NewOwnerCheckServiceProvider(tmsProvider, networkProvider, checkers)
93+
94+
tmsID := token.TMSID{
95+
Network: "test-network",
96+
Channel: "test-channel",
97+
Namespace: "test-namespace",
98+
}
99+
100+
// Note: This test will return a service but we can't fully test it without mocking the dependencies
101+
service, err := provider.CheckService(tmsID, nil, nil)
102+
103+
// We expect the service to be created even with nil dependencies
104+
assert.NotNil(t, service)
105+
assert.NoError(t, err)
106+
}
107+
108+
// TestAuditorCheckServiceProvider_WithMultipleCheckers verifies that the provider
109+
// correctly handles multiple custom checkers.
110+
func TestAuditorCheckServiceProvider_WithMultipleCheckers(t *testing.T) {
111+
tmsProvider := &mock.TokenManagementServiceProvider{}
112+
networkProvider := &mock.NetworkProvider{}
113+
114+
// Test with multiple checkers
115+
checkers := []common.NamedChecker{
116+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
117+
{Name: "checker2", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
118+
{Name: "checker3", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
119+
}
120+
121+
provider := NewAuditorCheckServiceProvider(tmsProvider, networkProvider, checkers)
122+
require.NotNil(t, provider)
123+
assert.Len(t, provider.checkers, 3)
124+
}
125+
126+
// TestOwnerCheckServiceProvider_WithMultipleCheckers verifies that the provider
127+
// correctly handles multiple custom checkers.
128+
func TestOwnerCheckServiceProvider_WithMultipleCheckers(t *testing.T) {
129+
tmsProvider := &mock.TokenManagementServiceProvider{}
130+
networkProvider := &mock.NetworkProvider{}
131+
132+
// Test with multiple checkers
133+
checkers := []common.NamedChecker{
134+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
135+
{Name: "checker2", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
136+
{Name: "checker3", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
137+
}
138+
139+
provider := NewOwnerCheckServiceProvider(tmsProvider, networkProvider, checkers)
140+
require.NotNil(t, provider)
141+
assert.Len(t, provider.checkers, 3)
142+
}
143+
144+
// TestAuditorCheckServiceProvider_WithEmptyCheckers verifies that the provider
145+
// works correctly with an empty checkers list.
146+
func TestAuditorCheckServiceProvider_WithEmptyCheckers(t *testing.T) {
147+
tmsProvider := &mock.TokenManagementServiceProvider{}
148+
networkProvider := &mock.NetworkProvider{}
149+
checkers := []common.NamedChecker{}
150+
151+
provider := NewAuditorCheckServiceProvider(tmsProvider, networkProvider, checkers)
152+
require.NotNil(t, provider)
153+
assert.Empty(t, provider.checkers)
154+
}
155+
156+
// TestOwnerCheckServiceProvider_WithEmptyCheckers verifies that the provider
157+
// works correctly with an empty checkers list.
158+
func TestOwnerCheckServiceProvider_WithEmptyCheckers(t *testing.T) {
159+
tmsProvider := &mock.TokenManagementServiceProvider{}
160+
networkProvider := &mock.NetworkProvider{}
161+
checkers := []common.NamedChecker{}
162+
163+
provider := NewOwnerCheckServiceProvider(tmsProvider, networkProvider, checkers)
164+
require.NotNil(t, provider)
165+
assert.Empty(t, provider.checkers)
166+
}
167+
168+
// TestAuditorCheckServiceProvider_WithNilProviders verifies that the provider
169+
// can be created with nil TMS and network providers.
170+
func TestAuditorCheckServiceProvider_WithNilProviders(t *testing.T) {
171+
checkers := []common.NamedChecker{
172+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
173+
}
174+
175+
// Test with nil providers - should still create the provider
176+
provider := NewAuditorCheckServiceProvider(nil, nil, checkers)
177+
require.NotNil(t, provider)
178+
assert.Nil(t, provider.tmsProvider)
179+
assert.Nil(t, provider.networkProvider)
180+
assert.Len(t, provider.checkers, 1)
181+
}
182+
183+
// TestOwnerCheckServiceProvider_WithNilProviders verifies that the provider
184+
// can be created with nil TMS and network providers.
185+
func TestOwnerCheckServiceProvider_WithNilProviders(t *testing.T) {
186+
checkers := []common.NamedChecker{
187+
{Name: "checker1", Checker: func(ctx context.Context) ([]string, error) { return nil, nil }},
188+
}
189+
190+
// Test with nil providers - should still create the provider
191+
provider := NewOwnerCheckServiceProvider(nil, nil, checkers)
192+
require.NotNil(t, provider)
193+
assert.Nil(t, provider.tmsProvider)
194+
assert.Nil(t, provider.networkProvider)
195+
assert.Len(t, provider.checkers, 1)
196+
}

token/sdk/dig/checks.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"go.uber.org/dig"
1313
)
1414

15+
// NewAuditorCheckServiceProvider creates an auditor check service provider using dependency injection.
16+
// It aggregates TMS provider, network provider, and custom checkers from the DI container.
1517
func NewAuditorCheckServiceProvider(in struct {
1618
dig.In
1719
TMSProvider common.TokenManagementServiceProvider
@@ -21,6 +23,8 @@ func NewAuditorCheckServiceProvider(in struct {
2123
return db.NewAuditorCheckServiceProvider(in.TMSProvider, in.NetworkProvider, in.Checkers)
2224
}
2325

26+
// NewOwnerCheckServiceProvider creates an owner check service provider using dependency injection.
27+
// It aggregates TMS provider, network provider, and custom checkers from the DI container.
2428
func NewOwnerCheckServiceProvider(in struct {
2529
dig.In
2630
TMSProvider common.TokenManagementServiceProvider

0 commit comments

Comments
 (0)