Skip to content

Commit 8490db1

Browse files
committed
provider tests
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 78f9cf2 commit 8490db1

File tree

1 file changed

+193
-0
lines changed

1 file changed

+193
-0
lines changed
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package identity_test
8+
9+
import (
10+
"errors"
11+
"testing"
12+
13+
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
14+
drvmock "github.com/hyperledger-labs/fabric-token-sdk/token/driver/mock"
15+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity"
16+
idmock "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/mock"
17+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
18+
"github.com/stretchr/testify/assert"
19+
"github.com/stretchr/testify/require"
20+
)
21+
22+
func TestProvider_RegisterRecipientData(t *testing.T) {
23+
storage := &idmock.Storage{}
24+
des := &idmock.Deserializer{}
25+
nbs := &idmock.NetworkBinderService{}
26+
eidu := &idmock.EnrollmentIDUnmarshaler{}
27+
28+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
29+
30+
data := &driver.RecipientData{
31+
Identity: driver.Identity("an_id"),
32+
AuditInfo: []byte("audit"),
33+
TokenMetadata: []byte("meta"),
34+
TokenMetadataAuditInfo: []byte("meta_audit"),
35+
}
36+
37+
storage.StoreIdentityDataReturns(nil)
38+
39+
err := p.RegisterRecipientData(t.Context(), data)
40+
require.NoError(t, err)
41+
42+
// assert storage called once with expected args
43+
_, id, ai, tm, tmai := storage.StoreIdentityDataArgsForCall(0)
44+
assert.Equal(t, []byte("an_id"), id)
45+
assert.Equal(t, []byte("audit"), ai)
46+
assert.Equal(t, []byte("meta"), tm)
47+
assert.Equal(t, []byte("meta_audit"), tmai)
48+
}
49+
50+
func TestProvider_RegisterSigner_And_IsMe(t *testing.T) {
51+
storage := &idmock.Storage{}
52+
des := &idmock.Deserializer{}
53+
nbs := &idmock.NetworkBinderService{}
54+
eidu := &idmock.EnrollmentIDUnmarshaler{}
55+
56+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
57+
58+
id := driver.Identity("signer_id")
59+
signer := &drvmock.Signer{}
60+
verifier := &drvmock.Verifier{}
61+
62+
// storage.RegisterIdentityDescriptor should be invoked
63+
storage.RegisterIdentityDescriptorReturns(nil)
64+
65+
err := p.RegisterSigner(t.Context(), id, signer, verifier, []byte("si"), false)
66+
require.NoError(t, err)
67+
68+
// storage called
69+
require.Equal(t, 1, storage.RegisterIdentityDescriptorCallCount())
70+
71+
// provider should now consider this identity as "me"
72+
isMe := p.IsMe(t.Context(), id)
73+
assert.True(t, isMe)
74+
}
75+
76+
func TestProvider_GetSigner_Deserializable(t *testing.T) {
77+
storage := &idmock.Storage{}
78+
des := &idmock.Deserializer{}
79+
nbs := &idmock.NetworkBinderService{}
80+
eidu := &idmock.EnrollmentIDUnmarshaler{}
81+
82+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
83+
84+
id := driver.Identity("an_identity")
85+
expected := &drvmock.Signer{}
86+
87+
// deserializer should return the signer
88+
des.DeserializeSignerReturns(expected, nil)
89+
storage.StoreSignerInfoReturns(nil)
90+
91+
s, err := p.GetSigner(t.Context(), id)
92+
require.NoError(t, err)
93+
assert.Equal(t, expected, s)
94+
95+
// ensure StoreSignerInfo was invoked to persist signer info
96+
require.Equal(t, 1, storage.StoreSignerInfoCallCount())
97+
}
98+
99+
func TestProvider_GetSigner_TypedIdentityFallback(t *testing.T) {
100+
storage := &idmock.Storage{}
101+
des := &idmock.Deserializer{}
102+
nbs := &idmock.NetworkBinderService{}
103+
eidu := &idmock.EnrollmentIDUnmarshaler{}
104+
105+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
106+
107+
// create a typed identity wrapping an inner identity
108+
inner := driver.Identity("inner")
109+
ti := identity.TypedIdentity{Type: "x-custom", Identity: inner}
110+
outerBytes, err := ti.Bytes()
111+
require.NoError(t, err)
112+
outer := driver.Identity(outerBytes)
113+
114+
expected := &drvmock.Signer{}
115+
116+
// Deserializer should fail for outer identity but succeed for inner
117+
des.DeserializeSignerReturnsOnCall(0, nil, errors.New("not deserializable"))
118+
des.DeserializeSignerReturnsOnCall(1, expected, nil)
119+
storage.StoreSignerInfoReturns(nil)
120+
121+
s, err := p.GetSigner(t.Context(), outer)
122+
require.NoError(t, err)
123+
assert.Equal(t, expected, s)
124+
// persisted
125+
require.Equal(t, 2, storage.StoreSignerInfoCallCount())
126+
}
127+
128+
func TestProvider_Bind(t *testing.T) {
129+
storage := &idmock.Storage{}
130+
des := &idmock.Deserializer{}
131+
nbs := &idmock.NetworkBinderService{}
132+
eidu := &idmock.EnrollmentIDUnmarshaler{}
133+
134+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
135+
136+
longTerm := driver.Identity("lt")
137+
e1 := driver.Identity("e1")
138+
e2 := driver.Identity("e2")
139+
140+
nbs.BindReturns(nil)
141+
142+
err := p.Bind(t.Context(), longTerm, e1, e2)
143+
require.NoError(t, err)
144+
145+
// bind should be called twice (for e1 and e2)
146+
require.Equal(t, 2, nbs.BindCallCount())
147+
}
148+
149+
func TestProvider_EnrollmentIDHelpers(t *testing.T) {
150+
storage := &idmock.Storage{}
151+
des := &idmock.Deserializer{}
152+
nbs := &idmock.NetworkBinderService{}
153+
eidu := &idmock.EnrollmentIDUnmarshaler{}
154+
155+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
156+
157+
id := driver.Identity("who")
158+
audit := []byte("audit")
159+
160+
eidu.GetEnrollmentIDReturns("e-id", nil)
161+
v, err := p.GetEnrollmentID(t.Context(), id, audit)
162+
require.NoError(t, err)
163+
assert.Equal(t, "e-id", v)
164+
165+
eidu.GetRevocationHandlerReturns("rh", nil)
166+
rh, err := p.GetRevocationHandler(t.Context(), id, audit)
167+
require.NoError(t, err)
168+
assert.Equal(t, "rh", rh)
169+
170+
eidu.GetEIDAndRHReturns("e2", "rh2", nil)
171+
eid, erh, err := p.GetEIDAndRH(t.Context(), id, audit)
172+
require.NoError(t, err)
173+
assert.Equal(t, "e2", eid)
174+
assert.Equal(t, "rh2", erh)
175+
}
176+
177+
func TestProvider_GetAuditInfo(t *testing.T) {
178+
storage := &idmock.Storage{}
179+
des := &idmock.Deserializer{}
180+
nbs := &idmock.NetworkBinderService{}
181+
eidu := &idmock.EnrollmentIDUnmarshaler{}
182+
183+
p := identity.NewProvider(logging.MustGetLogger(), storage, des, nbs, eidu)
184+
185+
id := driver.Identity("who")
186+
audit := []byte("audit-data")
187+
storage.GetAuditInfoReturns(audit, nil)
188+
189+
ai, err := p.GetAuditInfo(t.Context(), id)
190+
require.NoError(t, err)
191+
assert.Equal(t, audit, ai)
192+
require.Equal(t, 1, storage.GetAuditInfoCallCount())
193+
}

0 commit comments

Comments
 (0)