Skip to content

Commit 930cb54

Browse files
shutter-service: added helpers to test
1 parent 85e4578 commit 930cb54

File tree

2 files changed

+79
-53
lines changed

2 files changed

+79
-53
lines changed

rolling-shutter/keyperimpl/shutterservice/handlers_test.go

+78-52
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package shutterservice
33
import (
44
"bytes"
55
"context"
6+
"crypto/ecdsa"
67
"encoding/binary"
78
"testing"
89

@@ -14,6 +15,7 @@ import (
1415
corekeyperdatabase "github.com/shutter-network/rolling-shutter/rolling-shutter/keyper/database"
1516
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/database"
1617
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/serviceztypes"
18+
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testkeygen"
1719
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testsetup"
1820
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2p"
1921
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2pmsg"
@@ -91,73 +93,26 @@ func TestHandleDecryptionKeySharesThresholdNotReached(t *testing.T) {
9193
assert.Equal(t, len(msgs), 0)
9294
}
9395

94-
//nolint
9596
func TestHandleDecryptionKeySharesThresholdReached(t *testing.T) {
9697
if testing.Short() {
9798
t.Skip("skipping integration test")
9899
}
99100
ctx := context.Background()
100-
101101
dbpool, dbclose := testsetup.NewTestDBPool(ctx, t, database.Definition)
102102
t.Cleanup(dbclose)
103-
104-
obsKeyperDB := obskeyperdatabase.New(dbpool)
105103
keyperCoreDB := corekeyperdatabase.New(dbpool)
104+
106105
keyper1PrivateKey, keyper1Address, err := generateRandomAccount()
107106
assert.NilError(t, err)
108107
keyper2PrivateKey, keyper2Address, err := generateRandomAccount()
109108
assert.NilError(t, err)
110-
keyperIndex := uint64(1)
111109
keyperConfigIndex := uint64(1)
112110

113-
err = obsKeyperDB.InsertKeyperSet(ctx, obskeyperdatabase.InsertKeyperSetParams{
114-
KeyperConfigIndex: int64(keyperConfigIndex),
115-
ActivationBlockNumber: 1,
116-
Keypers: shdb.EncodeAddresses([]common.Address{keyper1Address, keyper2Address}),
117-
Threshold: 2,
118-
})
119-
assert.NilError(t, err)
120-
identityPreimages := []serviceztypes.IdentityPreimage{}
121-
for i := 0; i < 3; i++ {
122-
identityPreimage := serviceztypes.IdentityPreimage{
123-
Bytes: intTo32ByteArray(i),
124-
}
125-
identityPreimages = append(identityPreimages, identityPreimage)
126-
}
111+
keys, handler := initiateHandler(t, keyper1Address, keyper2Address, keyperConfigIndex)
127112

128-
decryptionData := &serviceztypes.DecryptionSignatureData{
129-
InstanceID: config.GetInstanceID(),
130-
Eon: keyperConfigIndex,
131-
IdentityPreimages: identityPreimages,
132-
}
133-
134-
keyper1Signature, err := decryptionData.ComputeSignature(keyper1PrivateKey)
135-
assert.NilError(t, err)
113+
identityPreimages := generateIdentityPreimages(t)
136114

137-
keys := testsetup.InitializeEon(ctx, t, dbpool, config, keyperIndex)
138-
139-
var handler p2p.MessageHandler = &DecryptionKeySharesHandler{dbpool: dbpool}
140-
141-
// threshold is two, so no outgoing message after first input
142-
shares := []*p2pmsg.KeyShare{}
143-
for _, identityPreimage := range identityPreimages {
144-
share := &p2pmsg.KeyShare{
145-
IdentityPreimage: identityPreimage.Bytes,
146-
Share: keys.EpochSecretKeyShare(identityPreimage.Bytes, 0).Marshal(),
147-
}
148-
shares = append(shares, share)
149-
}
150-
msg := &p2pmsg.DecryptionKeyShares{
151-
InstanceId: config.GetInstanceID(),
152-
Eon: keyperConfigIndex,
153-
KeyperIndex: 0,
154-
Shares: shares,
155-
Extra: &p2pmsg.DecryptionKeyShares_Service{
156-
Service: &p2pmsg.ShutterServiceDecryptionKeySharesExtra{
157-
Signature: keyper1Signature,
158-
},
159-
},
160-
}
115+
decryptionData, msg := generateDecryptionMessage(t, keyperConfigIndex, 0, identityPreimages, keyper1PrivateKey, keys)
161116
validation, err := handler.ValidateMessage(ctx, msg)
162117
assert.NilError(t, err, "validation returned error")
163118
assert.Equal(t, validation, pubsub.ValidationAccept)
@@ -171,7 +126,7 @@ func TestHandleDecryptionKeySharesThresholdReached(t *testing.T) {
171126

172127
// now thrsehold will be reached after this message causing to send out
173128
// the message
174-
shares = []*p2pmsg.KeyShare{}
129+
shares := []*p2pmsg.KeyShare{}
175130
encodedDecryptionKeys := [][]byte{}
176131
for _, identityPreimage := range identityPreimages {
177132
share := &p2pmsg.KeyShare{
@@ -219,6 +174,77 @@ func TestHandleDecryptionKeySharesThresholdReached(t *testing.T) {
219174
}
220175
}
221176

177+
func initiateHandler(t *testing.T, keyper1Address, keyper2Address common.Address,
178+
keyperConfigIndex uint64,
179+
) (*testkeygen.EonKeys, p2p.MessageHandler) {
180+
t.Helper()
181+
ctx := context.Background()
182+
dbpool, dbclose := testsetup.NewTestDBPool(ctx, t, database.Definition)
183+
t.Cleanup(dbclose)
184+
185+
obsKeyperDB := obskeyperdatabase.New(dbpool)
186+
187+
keyperIndex := uint64(1)
188+
189+
err := obsKeyperDB.InsertKeyperSet(ctx, obskeyperdatabase.InsertKeyperSetParams{
190+
KeyperConfigIndex: int64(keyperConfigIndex),
191+
ActivationBlockNumber: 1,
192+
Keypers: shdb.EncodeAddresses([]common.Address{keyper1Address, keyper2Address}),
193+
Threshold: 2,
194+
})
195+
assert.NilError(t, err)
196+
197+
keys := testsetup.InitializeEon(ctx, t, dbpool, config, keyperIndex)
198+
return keys, &DecryptionKeySharesHandler{dbpool: dbpool}
199+
}
200+
201+
func generateIdentityPreimages(t *testing.T) []serviceztypes.IdentityPreimage {
202+
t.Helper()
203+
identityPreimages := []serviceztypes.IdentityPreimage{}
204+
for i := 0; i < 3; i++ {
205+
identityPreimage := serviceztypes.IdentityPreimage{
206+
Bytes: intTo32ByteArray(i),
207+
}
208+
identityPreimages = append(identityPreimages, identityPreimage)
209+
}
210+
return identityPreimages
211+
}
212+
213+
func generateDecryptionMessage(t *testing.T, keyperConfigIndex, keyperIndex uint64, identityPreimages []serviceztypes.IdentityPreimage,
214+
pvtKey *ecdsa.PrivateKey, keys *testkeygen.EonKeys,
215+
) (*serviceztypes.DecryptionSignatureData, *p2pmsg.DecryptionKeyShares) {
216+
t.Helper()
217+
decryptionData := &serviceztypes.DecryptionSignatureData{
218+
InstanceID: config.GetInstanceID(),
219+
Eon: keyperConfigIndex,
220+
IdentityPreimages: identityPreimages,
221+
}
222+
223+
signature, err := decryptionData.ComputeSignature(pvtKey)
224+
assert.NilError(t, err)
225+
// threshold is two, so no outgoing message after first input
226+
shares := []*p2pmsg.KeyShare{}
227+
for _, identityPreimage := range identityPreimages {
228+
share := &p2pmsg.KeyShare{
229+
IdentityPreimage: identityPreimage.Bytes,
230+
Share: keys.EpochSecretKeyShare(identityPreimage.Bytes, 0).Marshal(),
231+
}
232+
shares = append(shares, share)
233+
}
234+
msg := &p2pmsg.DecryptionKeyShares{
235+
InstanceId: config.GetInstanceID(),
236+
Eon: keyperConfigIndex,
237+
KeyperIndex: keyperIndex,
238+
Shares: shares,
239+
Extra: &p2pmsg.DecryptionKeyShares_Service{
240+
Service: &p2pmsg.ShutterServiceDecryptionKeySharesExtra{
241+
Signature: signature,
242+
},
243+
},
244+
}
245+
return decryptionData, msg
246+
}
247+
222248
func TestValidateAndHandleDecryptionKey(t *testing.T) {
223249
if testing.Short() {
224250
t.Skip("skipping integration test")

rolling-shutter/shmsg/shmsg.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)