Update headsync tests
This commit is contained in:
parent
bf7e256065
commit
098120da84
@ -57,7 +57,7 @@ type diffSyncer struct {
|
|||||||
credentialProvider credentialprovider.CredentialProvider
|
credentialProvider credentialprovider.CredentialProvider
|
||||||
syncStatus syncstatus.StatusUpdater
|
syncStatus syncstatus.StatusUpdater
|
||||||
treeSyncer treemanager.TreeSyncer
|
treeSyncer treemanager.TreeSyncer
|
||||||
syncAcl *syncacl.SyncAcl
|
syncAcl syncacl.SyncAcl
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *diffSyncer) Init() {
|
func (d *diffSyncer) Init() {
|
||||||
|
|||||||
@ -14,8 +14,8 @@ import (
|
|||||||
"github.com/anyproto/any-sync/commonspace/spacesyncproto"
|
"github.com/anyproto/any-sync/commonspace/spacesyncproto"
|
||||||
"github.com/anyproto/any-sync/consensus/consensusproto"
|
"github.com/anyproto/any-sync/consensus/consensusproto"
|
||||||
"github.com/anyproto/any-sync/net/peer"
|
"github.com/anyproto/any-sync/net/peer"
|
||||||
"github.com/golang/mock/gomock"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"go.uber.org/mock/gomock"
|
||||||
"storj.io/drpc"
|
"storj.io/drpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -62,7 +62,7 @@ type headSync struct {
|
|||||||
credentialProvider credentialprovider.CredentialProvider
|
credentialProvider credentialprovider.CredentialProvider
|
||||||
syncStatus syncstatus.StatusService
|
syncStatus syncstatus.StatusService
|
||||||
deletionState deletionstate.ObjectDeletionState
|
deletionState deletionstate.ObjectDeletionState
|
||||||
syncAcl *syncacl.SyncAcl
|
syncAcl syncacl.SyncAcl
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() HeadSync {
|
func New() HeadSync {
|
||||||
@ -74,7 +74,7 @@ var createDiffSyncer = newDiffSyncer
|
|||||||
func (h *headSync) Init(a *app.App) (err error) {
|
func (h *headSync) Init(a *app.App) (err error) {
|
||||||
shared := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
shared := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||||
cfg := a.MustComponent("config").(config2.ConfigGetter)
|
cfg := a.MustComponent("config").(config2.ConfigGetter)
|
||||||
h.syncAcl = a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
|
h.syncAcl = a.MustComponent(syncacl.CName).(syncacl.SyncAcl)
|
||||||
h.spaceId = shared.SpaceId
|
h.spaceId = shared.SpaceId
|
||||||
h.spaceIsDeleted = shared.SpaceIsDeleted
|
h.spaceIsDeleted = shared.SpaceIsDeleted
|
||||||
h.syncPeriod = cfg.GetSpace().SyncPeriod
|
h.syncPeriod = cfg.GetSpace().SyncPeriod
|
||||||
|
|||||||
@ -11,6 +11,9 @@ import (
|
|||||||
"github.com/anyproto/any-sync/commonspace/deletionstate"
|
"github.com/anyproto/any-sync/commonspace/deletionstate"
|
||||||
"github.com/anyproto/any-sync/commonspace/deletionstate/mock_deletionstate"
|
"github.com/anyproto/any-sync/commonspace/deletionstate/mock_deletionstate"
|
||||||
"github.com/anyproto/any-sync/commonspace/headsync/mock_headsync"
|
"github.com/anyproto/any-sync/commonspace/headsync/mock_headsync"
|
||||||
|
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||||
|
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl"
|
||||||
|
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl/mock_syncacl"
|
||||||
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage/mock_treestorage"
|
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage/mock_treestorage"
|
||||||
"github.com/anyproto/any-sync/commonspace/object/treemanager"
|
"github.com/anyproto/any-sync/commonspace/object/treemanager"
|
||||||
"github.com/anyproto/any-sync/commonspace/object/treemanager/mock_treemanager"
|
"github.com/anyproto/any-sync/commonspace/object/treemanager/mock_treemanager"
|
||||||
@ -23,8 +26,8 @@ import (
|
|||||||
"github.com/anyproto/any-sync/commonspace/syncstatus"
|
"github.com/anyproto/any-sync/commonspace/syncstatus"
|
||||||
"github.com/anyproto/any-sync/nodeconf"
|
"github.com/anyproto/any-sync/nodeconf"
|
||||||
"github.com/anyproto/any-sync/nodeconf/mock_nodeconf"
|
"github.com/anyproto/any-sync/nodeconf/mock_nodeconf"
|
||||||
"github.com/golang/mock/gomock"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"go.uber.org/mock/gomock"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
@ -60,6 +63,7 @@ type headSyncFixture struct {
|
|||||||
treeSyncerMock *mock_treemanager.MockTreeSyncer
|
treeSyncerMock *mock_treemanager.MockTreeSyncer
|
||||||
diffMock *mock_ldiff.MockDiff
|
diffMock *mock_ldiff.MockDiff
|
||||||
clientMock *mock_spacesyncproto.MockDRPCSpaceSyncClient
|
clientMock *mock_spacesyncproto.MockDRPCSpaceSyncClient
|
||||||
|
aclMock *mock_syncacl.MockSyncAcl
|
||||||
headSync *headSync
|
headSync *headSync
|
||||||
diffSyncer *diffSyncer
|
diffSyncer *diffSyncer
|
||||||
}
|
}
|
||||||
@ -87,9 +91,13 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture {
|
|||||||
treeSyncerMock := mock_treemanager.NewMockTreeSyncer(ctrl)
|
treeSyncerMock := mock_treemanager.NewMockTreeSyncer(ctrl)
|
||||||
diffMock := mock_ldiff.NewMockDiff(ctrl)
|
diffMock := mock_ldiff.NewMockDiff(ctrl)
|
||||||
clientMock := mock_spacesyncproto.NewMockDRPCSpaceSyncClient(ctrl)
|
clientMock := mock_spacesyncproto.NewMockDRPCSpaceSyncClient(ctrl)
|
||||||
|
aclMock := mock_syncacl.NewMockSyncAcl(ctrl)
|
||||||
|
aclMock.EXPECT().Name().AnyTimes().Return(syncacl.CName)
|
||||||
|
aclMock.EXPECT().SetHeadUpdater(gomock.Any()).AnyTimes()
|
||||||
hs := &headSync{}
|
hs := &headSync{}
|
||||||
a := &app.App{}
|
a := &app.App{}
|
||||||
a.Register(spaceState).
|
a.Register(spaceState).
|
||||||
|
Register(aclMock).
|
||||||
Register(mockConfig{}).
|
Register(mockConfig{}).
|
||||||
Register(configurationMock).
|
Register(configurationMock).
|
||||||
Register(storageMock).
|
Register(storageMock).
|
||||||
@ -115,6 +123,7 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture {
|
|||||||
treeSyncerMock: treeSyncerMock,
|
treeSyncerMock: treeSyncerMock,
|
||||||
diffMock: diffMock,
|
diffMock: diffMock,
|
||||||
clientMock: clientMock,
|
clientMock: clientMock,
|
||||||
|
aclMock: aclMock,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,6 +153,8 @@ func TestHeadSync(t *testing.T) {
|
|||||||
treeMock := mock_treestorage.NewMockTreeStorage(fx.ctrl)
|
treeMock := mock_treestorage.NewMockTreeStorage(fx.ctrl)
|
||||||
fx.storageMock.EXPECT().StoredIds().Return(ids, nil)
|
fx.storageMock.EXPECT().StoredIds().Return(ids, nil)
|
||||||
fx.storageMock.EXPECT().TreeStorage(ids[0]).Return(treeMock, nil)
|
fx.storageMock.EXPECT().TreeStorage(ids[0]).Return(treeMock, nil)
|
||||||
|
fx.aclMock.EXPECT().Id().AnyTimes().Return("aclId")
|
||||||
|
fx.aclMock.EXPECT().Head().AnyTimes().Return(&list.AclRecord{Id: "headId"})
|
||||||
treeMock.EXPECT().Heads().Return([]string{"h1", "h2"}, nil)
|
treeMock.EXPECT().Heads().Return([]string{"h1", "h2"}, nil)
|
||||||
fx.diffMock.EXPECT().Set(ldiff.Element{
|
fx.diffMock.EXPECT().Set(ldiff.Element{
|
||||||
Id: "id1",
|
Id: "id1",
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
//go:generate mockgen -destination mock_syncacl/mock_syncacl.go github.com/anyproto/any-sync/commonspace/object/acl/syncacl SyncAcl,SyncClient,RequestFactory,AclSyncProtocol
|
||||||
package syncacl
|
package syncacl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package syncacl
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/anyproto/any-sync/commonspace/object/syncobjectgetter"
|
||||||
|
|
||||||
"github.com/anyproto/any-sync/accountservice"
|
"github.com/anyproto/any-sync/accountservice"
|
||||||
"github.com/anyproto/any-sync/app"
|
"github.com/anyproto/any-sync/app"
|
||||||
@ -25,15 +26,23 @@ var (
|
|||||||
ErrSyncAclClosed = errors.New("sync acl is closed")
|
ErrSyncAclClosed = errors.New("sync acl is closed")
|
||||||
)
|
)
|
||||||
|
|
||||||
func New() *SyncAcl {
|
type SyncAcl interface {
|
||||||
return &SyncAcl{}
|
app.ComponentRunnable
|
||||||
|
list.AclList
|
||||||
|
syncobjectgetter.SyncObject
|
||||||
|
SetHeadUpdater(updater HeadUpdater)
|
||||||
|
SyncWithPeer(ctx context.Context, peerId string) (err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() SyncAcl {
|
||||||
|
return &syncAcl{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type HeadUpdater interface {
|
type HeadUpdater interface {
|
||||||
UpdateHeads(id string, heads []string)
|
UpdateHeads(id string, heads []string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncAcl struct {
|
type syncAcl struct {
|
||||||
list.AclList
|
list.AclList
|
||||||
syncClient SyncClient
|
syncClient SyncClient
|
||||||
syncHandler synchandler.SyncHandler
|
syncHandler synchandler.SyncHandler
|
||||||
@ -41,23 +50,23 @@ type SyncAcl struct {
|
|||||||
isClosed bool
|
isClosed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) Run(ctx context.Context) (err error) {
|
func (s *syncAcl) Run(ctx context.Context) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) HandleRequest(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (response *spacesyncproto.ObjectSyncMessage, err error) {
|
func (s *syncAcl) HandleRequest(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (response *spacesyncproto.ObjectSyncMessage, err error) {
|
||||||
return s.syncHandler.HandleRequest(ctx, senderId, request)
|
return s.syncHandler.HandleRequest(ctx, senderId, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) SetHeadUpdater(updater HeadUpdater) {
|
func (s *syncAcl) SetHeadUpdater(updater HeadUpdater) {
|
||||||
s.headUpdater = updater
|
s.headUpdater = updater
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) HandleMessage(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *syncAcl) HandleMessage(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
return s.syncHandler.HandleMessage(ctx, senderId, request)
|
return s.syncHandler.HandleMessage(ctx, senderId, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) Init(a *app.App) (err error) {
|
func (s *syncAcl) Init(a *app.App) (err error) {
|
||||||
storage := a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
storage := a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||||
aclStorage, err := storage.AclStorage()
|
aclStorage, err := storage.AclStorage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -77,7 +86,7 @@ func (s *SyncAcl) Init(a *app.App) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) AddRawRecord(rawRec *consensusproto.RawRecordWithId) (err error) {
|
func (s *syncAcl) AddRawRecord(rawRec *consensusproto.RawRecordWithId) (err error) {
|
||||||
if s.isClosed {
|
if s.isClosed {
|
||||||
return ErrSyncAclClosed
|
return ErrSyncAclClosed
|
||||||
}
|
}
|
||||||
@ -91,7 +100,7 @@ func (s *SyncAcl) AddRawRecord(rawRec *consensusproto.RawRecordWithId) (err erro
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) AddRawRecords(rawRecords []*consensusproto.RawRecordWithId) (err error) {
|
func (s *syncAcl) AddRawRecords(rawRecords []*consensusproto.RawRecordWithId) (err error) {
|
||||||
if s.isClosed {
|
if s.isClosed {
|
||||||
return ErrSyncAclClosed
|
return ErrSyncAclClosed
|
||||||
}
|
}
|
||||||
@ -105,20 +114,20 @@ func (s *SyncAcl) AddRawRecords(rawRecords []*consensusproto.RawRecordWithId) (e
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) SyncWithPeer(ctx context.Context, peerId string) (err error) {
|
func (s *syncAcl) SyncWithPeer(ctx context.Context, peerId string) (err error) {
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
headUpdate := s.syncClient.CreateHeadUpdate(s, nil)
|
headUpdate := s.syncClient.CreateHeadUpdate(s, nil)
|
||||||
return s.syncClient.SendUpdate(peerId, headUpdate)
|
return s.syncClient.SendUpdate(peerId, headUpdate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) Close(ctx context.Context) (err error) {
|
func (s *syncAcl) Close(ctx context.Context) (err error) {
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
s.isClosed = true
|
s.isClosed = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) Name() (name string) {
|
func (s *syncAcl) Name() (name string) {
|
||||||
return CName
|
return CName
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ func (o *objectManager) Init(a *app.App) (err error) {
|
|||||||
o.spaceId = state.SpaceId
|
o.spaceId = state.SpaceId
|
||||||
o.spaceIsClosed = state.SpaceIsClosed
|
o.spaceIsClosed = state.SpaceIsClosed
|
||||||
settingsObject := a.MustComponent(settings.CName).(settings.Settings).SettingsObject()
|
settingsObject := a.MustComponent(settings.CName).(settings.Settings).SettingsObject()
|
||||||
acl := a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
|
acl := a.MustComponent(syncacl.CName).(syncacl.SyncAcl)
|
||||||
o.AddObject(settingsObject)
|
o.AddObject(settingsObject)
|
||||||
o.AddObject(acl)
|
o.AddObject(acl)
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -82,7 +82,7 @@ func (t *treeBuilder) Init(a *app.App) (err error) {
|
|||||||
t.isClosed = state.SpaceIsClosed
|
t.isClosed = state.SpaceIsClosed
|
||||||
t.treesUsed = state.TreesUsed
|
t.treesUsed = state.TreesUsed
|
||||||
t.builder = state.TreeBuilderFunc
|
t.builder = state.TreeBuilderFunc
|
||||||
t.aclList = a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
|
t.aclList = a.MustComponent(syncacl.CName).(syncacl.SyncAcl)
|
||||||
t.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
t.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||||
t.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
t.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||||
t.headsNotifiable = a.MustComponent(headsync.CName).(headsync.HeadSync)
|
t.headsNotifiable = a.MustComponent(headsync.CName).(headsync.HeadSync)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user