Skip to content

Commit f3547c6

Browse files
authored
feat: Support top level service options rdvp and relay nodes (#112)
* chore: Move service_outofstoremessage.go to pkg/outofstoremessage Signed-off-by: Jeff Thompson <jeff@thefirst.org> * feat: In NewInMemoryServiceClient and NewPersistentServiceClient, add options Signed-off-by: Jeff Thompson <jeff@thefirst.org> --------- Signed-off-by: Jeff Thompson <jeff@thefirst.org>
1 parent 3baf0ee commit f3547c6

3 files changed

Lines changed: 61 additions & 18 deletions

File tree

outofstoremessage_test.go renamed to pkg/outofstoremessage/outofstoremessage_test.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package weshnet
1+
package outofstoremessage
22

33
import (
44
"context"
@@ -9,6 +9,7 @@ import (
99
"github.com/stretchr/testify/require"
1010
"google.golang.org/protobuf/proto"
1111

12+
"berty.tech/weshnet/v2"
1213
"berty.tech/weshnet/v2/pkg/protocoltypes"
1314
"berty.tech/weshnet/v2/pkg/secretstore"
1415
"berty.tech/weshnet/v2/pkg/testutil"
@@ -18,10 +19,10 @@ func Test_sealPushMessage_OutOfStoreReceive(t *testing.T) {
1819
ctx, cancel := context.WithCancel(context.Background())
1920
defer cancel()
2021

21-
tp, cancel := NewTestingProtocol(ctx, t, &TestingOpts{}, nil)
22+
tp, cancel := weshnet.NewTestingProtocol(ctx, t, &weshnet.TestingOpts{}, nil)
2223
defer cancel()
2324

24-
g, _, err := NewGroupMultiMember()
25+
g, _, err := weshnet.NewGroupMultiMember()
2526
require.NoError(t, err)
2627

2728
s := tp.Service
@@ -38,7 +39,7 @@ func Test_sealPushMessage_OutOfStoreReceive(t *testing.T) {
3839
_, err = s.ActivateGroup(ctx, &protocoltypes.ActivateGroup_Request{GroupPk: gPKRaw})
3940
require.NoError(t, err)
4041

41-
gc, err := s.(ServiceMethods).GetContextGroupForID(g.PublicKey)
42+
gc, err := s.(weshnet.ServiceMethods).GetContextGroupForID(g.PublicKey)
4243
require.NoError(t, err)
4344

4445
otherSecretStore, cancel := createVirtualOtherPeerSecrets(t, ctx, gc)
@@ -85,10 +86,10 @@ func Test_OutOfStoreMessageFlow(t *testing.T) {
8586
logger, cleanup := testutil.Logger(t)
8687
defer cleanup()
8788

88-
tp, cancel := NewTestingProtocol(ctx, t, &TestingOpts{Logger: logger}, nil)
89+
tp, cancel := weshnet.NewTestingProtocol(ctx, t, &weshnet.TestingOpts{Logger: logger}, nil)
8990
defer cancel()
9091

91-
g, _, err := NewGroupMultiMember()
92+
g, _, err := weshnet.NewGroupMultiMember()
9293
require.NoError(t, err)
9394

9495
s := tp.Service
@@ -134,7 +135,7 @@ func Test_OutOfStoreMessageFlow(t *testing.T) {
134135
require.Equal(t, message, encryptedMessage.Plaintext)
135136
}
136137

137-
func createVirtualOtherPeerSecrets(t testing.TB, ctx context.Context, gc *GroupContext) (secretstore.SecretStore, func()) {
138+
func createVirtualOtherPeerSecrets(t testing.TB, ctx context.Context, gc *weshnet.GroupContext) (secretstore.SecretStore, func()) {
138139
secretStore, err := secretstore.NewInMemSecretStore(nil)
139140
require.NoError(t, err)
140141

@@ -145,7 +146,7 @@ func createVirtualOtherPeerSecrets(t testing.TB, ctx context.Context, gc *GroupC
145146
// Manually adding another member to the group
146147
otherMD, err := secretStore.GetOwnMemberDeviceForGroup(gc.Group())
147148
require.NoError(t, err)
148-
_, err = MetadataStoreAddDeviceToGroup(ctx, gc.MetadataStore(), gc.Group(), otherMD)
149+
_, err = weshnet.MetadataStoreAddDeviceToGroup(ctx, gc.MetadataStore(), gc.Group(), otherMD)
149150
require.NoError(t, err)
150151

151152
memberDevice, err := gc.SecretStore().GetOwnMemberDeviceForGroup(gc.Group())
@@ -154,7 +155,7 @@ func createVirtualOtherPeerSecrets(t testing.TB, ctx context.Context, gc *GroupC
154155
ds, err := secretStore.GetShareableChainKey(ctx, gc.Group(), memberDevice.Member())
155156
require.NoError(t, err)
156157

157-
_, err = MetadataStoreSendSecret(ctx, gc.MetadataStore(), gc.Group(), otherMD, memberDevice.Member(), ds)
158+
_, err = weshnet.MetadataStoreSendSecret(ctx, gc.MetadataStore(), gc.Group(), otherMD, memberDevice.Member(), ds)
158159
require.NoError(t, err)
159160

160161
time.Sleep(time.Millisecond * 200)

service_outofstoremessage.go renamed to pkg/outofstoremessage/service_outofstoremessage.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package weshnet
1+
package outofstoremessage
22

33
import (
44
"context"
@@ -12,6 +12,7 @@ import (
1212
"go.uber.org/zap"
1313
"google.golang.org/grpc"
1414

15+
"berty.tech/weshnet/v2"
1516
"berty.tech/weshnet/v2/pkg/errcode"
1617
"berty.tech/weshnet/v2/pkg/grpcutil"
1718
"berty.tech/weshnet/v2/pkg/outofstoremessagetypes"
@@ -89,7 +90,7 @@ func (c *oosmClient) Close() error {
8990
}
9091

9192
func newClientFromService(ctx context.Context, s *grpc.Server, svc OOSMService, opts ...grpc.DialOption) (OOSMServiceClient, error) {
92-
bl := grpcutil.NewBufListener(ClientBufferSize)
93+
bl := grpcutil.NewBufListener(weshnet.ClientBufferSize)
9394
cc, err := bl.NewClientConn(ctx, opts...)
9495
if err != nil {
9596
return nil, err
@@ -127,8 +128,8 @@ func (s *oosmService) Close() error {
127128
return nil
128129
}
129130

130-
func (s *oosmService) Status() (Status, error) {
131-
return Status{}, nil
131+
func (s *oosmService) Status() (weshnet.Status, error) {
132+
return weshnet.Status{}, nil
132133
}
133134

134135
func (s *oosmService) IpfsCoreAPI() coreiface.CoreAPI {

service_client.go

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@ type ServiceClient interface {
2828
io.Closer
2929
}
3030

31+
type ServiceOption func(*Opts) error
32+
33+
// WithLogger sets the given logger
34+
var WithLogger = func(l *zap.Logger) ServiceOption {
35+
return func(s *Opts) error {
36+
s.Logger = l
37+
return nil
38+
}
39+
}
40+
41+
// WithP2PStaticRelays sets the given P2P static relays
42+
var WithP2PStaticRelays = func(p []string) ServiceOption {
43+
return func(s *Opts) error {
44+
s.P2PStaticRelays = p
45+
return nil
46+
}
47+
}
48+
49+
// WithP2PRdvpMaddrs sets the given P2P rendezvous point addresses
50+
var WithP2PRdvpMaddrs = func(p []string) ServiceOption {
51+
return func(s *Opts) error {
52+
s.P2PRdvpMaddrs = p
53+
return nil
54+
}
55+
}
56+
3157
// NewServiceClient initializes a new ServiceClient using the opts.
3258
// If opts.RootDatastore is nil and opts.DatastoreDir is "" or InMemoryDirectory, then set
3359
// opts.RootDatastore to an in-memory data store. Otherwise, if opts.RootDatastore is nil then set
@@ -70,8 +96,14 @@ func NewServiceClient(opts Opts) (ServiceClient, error) {
7096
// This creates a new Wesh account where the key store is in memory. (If you don't
7197
// export the data then it is lost when you call Close(). ) The IPFS node, cached data,
7298
// and configuration are also in memory.
73-
func NewInMemoryServiceClient() (ServiceClient, error) {
99+
func NewInMemoryServiceClient(options ...ServiceOption) (ServiceClient, error) {
74100
var opts Opts
101+
for _, opt := range options {
102+
if err := opt(&opts); err != nil {
103+
return nil, err
104+
}
105+
}
106+
75107
opts.DatastoreDir = InMemoryDirectory
76108
return NewServiceClient(opts)
77109
}
@@ -83,8 +115,13 @@ func NewInMemoryServiceClient() (ServiceClient, error) {
83115
// if the persistent storage files already exist, then this opens them to use the existing Wesh
84116
// account and peer identity. This returns a gRPC ServiceClient which uses a direct in-memory
85117
// connection. When finished, you must call Close().
86-
func NewPersistentServiceClient(path string) (ServiceClient, error) {
118+
func NewPersistentServiceClient(path string, options ...ServiceOption) (ServiceClient, error) {
87119
var opts Opts
120+
for _, opt := range options {
121+
if err := opt(&opts); err != nil {
122+
return nil, err
123+
}
124+
}
88125

89126
opts.DatastoreDir = path
90127

@@ -94,13 +131,17 @@ func NewPersistentServiceClient(path string) (ServiceClient, error) {
94131
}
95132

96133
var cleanupLogger func()
97-
if opts.Logger, cleanupLogger, err = setupDefaultLogger(); err != nil {
98-
return nil, fmt.Errorf("uanble to setup logger: %w", err)
134+
if opts.Logger == nil {
135+
if opts.Logger, cleanupLogger, err = setupDefaultLogger(); err != nil {
136+
return nil, fmt.Errorf("uanble to setup logger: %w", err)
137+
}
99138
}
100139

101140
mrepo := ipfs_mobile.NewRepoMobile(path, repo)
102141
mnode, err := ipfsutil.NewIPFSMobile(context.TODO(), mrepo, &ipfsutil.MobileOptions{
103-
Logger: opts.Logger,
142+
Logger: opts.Logger,
143+
P2PStaticRelays: opts.P2PStaticRelays,
144+
PeerStorePeers: opts.P2PRdvpMaddrs,
104145
})
105146
if err != nil {
106147
return nil, err

0 commit comments

Comments
 (0)