diff --git a/commonspace/deletion_test.go b/commonspace/deletion_test.go index 6862a472..33745884 100644 --- a/commonspace/deletion_test.go +++ b/commonspace/deletion_test.go @@ -73,7 +73,8 @@ func TestSpaceDeleteIds(t *testing.T) { fx.treeManager.space = spc err = spc.Init(ctx) require.NoError(t, err) - + close(fx.treeManager.waitLoad) + var ids []string for i := 0; i < totalObjs; i++ { // creating a tree @@ -147,6 +148,7 @@ func TestSpaceDeleteIdsIncorrectSnapshot(t *testing.T) { // adding space to tree manager fx.treeManager.space = spc err = spc.Init(ctx) + close(fx.treeManager.waitLoad) require.NoError(t, err) settingsObject := spc.(*space).app.MustComponent(settings.CName).(settings.Settings).SettingsObject() @@ -183,10 +185,12 @@ func TestSpaceDeleteIdsIncorrectSnapshot(t *testing.T) { spc, err = fx.spaceService.NewSpace(ctx, sp) require.NoError(t, err) require.NotNil(t, spc) + fx.treeManager.waitLoad = make(chan struct{}) fx.treeManager.space = spc fx.treeManager.deletedIds = nil err = spc.Init(ctx) require.NoError(t, err) + close(fx.treeManager.waitLoad) // waiting until everything is deleted time.Sleep(3 * time.Second) @@ -230,6 +234,7 @@ func TestSpaceDeleteIdsMarkDeleted(t *testing.T) { fx.treeManager.space = spc err = spc.Init(ctx) require.NoError(t, err) + close(fx.treeManager.waitLoad) settingsObject := spc.(*space).app.MustComponent(settings.CName).(settings.Settings).SettingsObject() var ids []string @@ -259,10 +264,12 @@ func TestSpaceDeleteIdsMarkDeleted(t *testing.T) { require.NoError(t, err) require.NotNil(t, spc) fx.treeManager.space = spc + fx.treeManager.waitLoad = make(chan struct{}) fx.treeManager.deletedIds = nil fx.treeManager.markedIds = nil err = spc.Init(ctx) require.NoError(t, err) + close(fx.treeManager.waitLoad) // waiting until everything is deleted time.Sleep(3 * time.Second) diff --git a/commonspace/deletionstate/deletionstate_test.go b/commonspace/deletionstate/deletionstate_test.go index d95bcd9b..e5489bd8 100644 --- a/commonspace/deletionstate/deletionstate_test.go +++ b/commonspace/deletionstate/deletionstate_test.go @@ -1,7 +1,6 @@ package deletionstate import ( - "github.com/anyproto/any-sync/app/logger" "github.com/anyproto/any-sync/commonspace/spacestorage" "github.com/anyproto/any-sync/commonspace/spacestorage/mock_spacestorage" "github.com/golang/mock/gomock" @@ -19,7 +18,8 @@ type fixture struct { func newFixture(t *testing.T) *fixture { ctrl := gomock.NewController(t) spaceStorage := mock_spacestorage.NewMockSpaceStorage(ctrl) - delState := New(logger.NewNamed("test"), spaceStorage).(*objectDeletionState) + delState := New().(*objectDeletionState) + delState.storage = spaceStorage return &fixture{ ctrl: ctrl, delState: delState, diff --git a/commonspace/headsync/diffsyncer_test.go b/commonspace/headsync/diffsyncer_test.go index b49c2178..7cdb870a 100644 --- a/commonspace/headsync/diffsyncer_test.go +++ b/commonspace/headsync/diffsyncer_test.go @@ -237,219 +237,3 @@ func TestDiffSyncer(t *testing.T) { require.NoError(t, fx.diffSyncer.Sync(ctx)) }) } - -// -//type pushSpaceRequestMatcher struct { -// spaceId string -// aclRootId string -// settingsId string -// credential []byte -// spaceHeader *spacesyncproto.RawSpaceHeaderWithId -//} -// -//func (p pushSpaceRequestMatcher) Matches(x interface{}) bool { -// res, ok := x.(*spacesyncproto.SpacePushRequest) -// if !ok { -// return false -// } -// -// return res.Payload.AclPayloadId == p.aclRootId && res.Payload.SpaceHeader == p.spaceHeader && res.Payload.SpaceSettingsPayloadId == p.settingsId && bytes.Equal(p.credential, res.Credential) -//} -// -//func (p pushSpaceRequestMatcher) String() string { -// return "" -//} -// -//type mockPeer struct{} -// -//func (m mockPeer) Addr() string { -// return "" -//} -// -//func (m mockPeer) TryClose(objectTTL time.Duration) (res bool, err error) { -// return true, m.Close() -//} -// -//func (m mockPeer) Id() string { -// return "mockId" -//} -// -//func (m mockPeer) LastUsage() time.Time { -// return time.Time{} -//} -// -//func (m mockPeer) Secure() sec.SecureConn { -// return nil -//} -// -//func (m mockPeer) UpdateLastUsage() { -//} -// -//func (m mockPeer) Close() error { -// return nil -//} -// -//func (m mockPeer) Closed() <-chan struct{} { -// return make(chan struct{}) -//} -// -//func (m mockPeer) Invoke(ctx context.Context, rpc string, enc drpc.Encoding, in, out drpc.Message) error { -// return nil -//} -// -//func (m mockPeer) NewStream(ctx context.Context, rpc string, enc drpc.Encoding) (drpc.Stream, error) { -// return nil, nil -//} -// -//func newPushSpaceRequestMatcher( -// spaceId string, -// aclRootId string, -// settingsId string, -// credential []byte, -// spaceHeader *spacesyncproto.RawSpaceHeaderWithId) *pushSpaceRequestMatcher { -// return &pushSpaceRequestMatcher{ -// spaceId: spaceId, -// aclRootId: aclRootId, -// settingsId: settingsId, -// credential: credential, -// spaceHeader: spaceHeader, -// } -//} -// -//func TestDiffSyncer_Sync(t *testing.T) { -// // setup -// fx := newHeadSyncFixture(t) -// fx.initDiffSyncer(t) -// defer fx.stop() -// -// diffMock := mock_ldiff.NewMockDiff(ctrl) -// peerManagerMock := mock_peermanager.NewMockPeerManager(ctrl) -// cacheMock := mock_treemanager.NewMockTreeManager(ctrl) -// stMock := mock_spacestorage.NewMockSpaceStorage(ctrl) -// clientMock := mock_spacesyncproto.NewMockDRPCSpaceSyncClient(ctrl) -// factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient { -// return clientMock -// }) -// treeSyncerMock := mock_treemanager.NewMockTreeSyncer(ctrl) -// credentialProvider := mock_credentialprovider.NewMockCredentialProvider(ctrl) -// delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) -// spaceId := "spaceId" -// aclRootId := "aclRootId" -// l := logger.NewNamed(spaceId) -// diffSyncer := newDiffSyncer(spaceId, diffMock, peerManagerMock, cacheMock, stMock, factory, syncstatus.NewNoOpSyncStatus(), credentialProvider, l) -// delState.EXPECT().AddObserver(gomock.Any()) -// cacheMock.EXPECT().NewTreeSyncer(spaceId, gomock.Any()).Return(treeSyncerMock) -// diffSyncer.Init(delState) -// -// t.Run("diff syncer sync", func(t *testing.T) { -// mPeer := mockPeer{} -// peerManagerMock.EXPECT(). -// GetResponsiblePeers(gomock.Any()). -// Return([]peer.Peer{mPeer}, nil) -// diffMock.EXPECT(). -// Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(spaceId, clientMock))). -// Return([]string{"new"}, []string{"changed"}, nil, nil) -// delState.EXPECT().Filter([]string{"new"}).Return([]string{"new"}).Times(1) -// delState.EXPECT().Filter([]string{"changed"}).Return([]string{"changed"}).Times(1) -// delState.EXPECT().Filter(nil).Return(nil).Times(1) -// treeSyncerMock.EXPECT().SyncAll(gomock.Any(), mPeer.Id(), []string{"changed"}, []string{"new"}).Return(nil) -// require.NoError(t, diffSyncer.Sync(ctx)) -// }) -//} -// -// t.Run("diff syncer sync conf error", func(t *testing.T) { -// peerManagerMock.EXPECT(). -// GetResponsiblePeers(gomock.Any()). -// Return(nil, fmt.Errorf("some error")) -// -// require.Error(t, diffSyncer.Sync(ctx)) -// }) -// -// t.Run("deletion state remove objects", func(t *testing.T) { -// deletedId := "id" -// delState.EXPECT().Exists(deletedId).Return(true) -// -// // this should not result in any mock being called -// diffSyncer.UpdateHeads(deletedId, []string{"someHead"}) -// }) -// -// t.Run("update heads updates diff", func(t *testing.T) { -// newId := "newId" -// newHeads := []string{"h1", "h2"} -// hash := "hash" -// diffMock.EXPECT().Set(ldiff.Element{ -// Id: newId, -// Head: concatStrings(newHeads), -// }) -// diffMock.EXPECT().Hash().Return(hash) -// delState.EXPECT().Exists(newId).Return(false) -// stMock.EXPECT().WriteSpaceHash(hash) -// diffSyncer.UpdateHeads(newId, newHeads) -// }) -// -// t.Run("diff syncer sync space missing", func(t *testing.T) { -// aclStorageMock := mock_liststorage.NewMockListStorage(ctrl) -// settingsStorage := mock_treestorage.NewMockTreeStorage(ctrl) -// settingsId := "settingsId" -// aclRoot := &aclrecordproto.RawAclRecordWithId{ -// Id: aclRootId, -// } -// settingsRoot := &treechangeproto.RawTreeChangeWithId{ -// Id: settingsId, -// } -// spaceHeader := &spacesyncproto.RawSpaceHeaderWithId{} -// spaceSettingsId := "spaceSettingsId" -// credential := []byte("credential") -// -// peerManagerMock.EXPECT(). -// GetResponsiblePeers(gomock.Any()). -// Return([]peer.Peer{mockPeer{}}, nil) -// diffMock.EXPECT(). -// Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(spaceId, clientMock))). -// Return(nil, nil, nil, spacesyncproto.ErrSpaceMissing) -// -// stMock.EXPECT().AclStorage().Return(aclStorageMock, nil) -// stMock.EXPECT().SpaceHeader().Return(spaceHeader, nil) -// stMock.EXPECT().SpaceSettingsId().Return(spaceSettingsId) -// stMock.EXPECT().TreeStorage(spaceSettingsId).Return(settingsStorage, nil) -// -// settingsStorage.EXPECT().Root().Return(settingsRoot, nil) -// aclStorageMock.EXPECT(). -// Root(). -// Return(aclRoot, nil) -// credentialProvider.EXPECT(). -// GetCredential(gomock.Any(), spaceHeader). -// Return(credential, nil) -// clientMock.EXPECT(). -// SpacePush(gomock.Any(), newPushSpaceRequestMatcher(spaceId, aclRootId, settingsId, credential, spaceHeader)). -// Return(nil, nil) -// peerManagerMock.EXPECT().SendPeer(gomock.Any(), "mockId", gomock.Any()) -// -// require.NoError(t, diffSyncer.Sync(ctx)) -// }) -// -// t.Run("diff syncer sync unexpected", func(t *testing.T) { -// peerManagerMock.EXPECT(). -// GetResponsiblePeers(gomock.Any()). -// Return([]peer.Peer{mockPeer{}}, nil) -// diffMock.EXPECT(). -// Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(spaceId, clientMock))). -// Return(nil, nil, nil, spacesyncproto.ErrUnexpected) -// -// require.NoError(t, diffSyncer.Sync(ctx)) -// }) -// -// t.Run("diff syncer sync space is deleted error", func(t *testing.T) { -// mPeer := mockPeer{} -// peerManagerMock.EXPECT(). -// GetResponsiblePeers(gomock.Any()). -// Return([]peer.Peer{mPeer}, nil) -// diffMock.EXPECT(). -// Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(spaceId, clientMock))). -// Return(nil, nil, nil, spacesyncproto.ErrSpaceIsDeleted) -// stMock.EXPECT().SpaceSettingsId().Return("settingsId") -// treeSyncerMock.EXPECT().SyncAll(gomock.Any(), mPeer.Id(), []string{"settingsId"}, nil).Return(nil) -// -// require.NoError(t, diffSyncer.Sync(ctx)) -// }) -//} diff --git a/commonspace/settings/deleter_test.go b/commonspace/settings/deleter_test.go index 54feed56..e4a32e84 100644 --- a/commonspace/settings/deleter_test.go +++ b/commonspace/settings/deleter_test.go @@ -2,9 +2,9 @@ package settings import ( "fmt" + "github.com/anyproto/any-sync/commonspace/deletionstate/mock_deletionstate" "github.com/anyproto/any-sync/commonspace/object/tree/treestorage" "github.com/anyproto/any-sync/commonspace/object/treemanager/mock_treemanager" - "github.com/anyproto/any-sync/commonspace/settings/settingsstate/mock_settingsstate" "github.com/anyproto/any-sync/commonspace/spacestorage/mock_spacestorage" "github.com/golang/mock/gomock" "testing" @@ -14,7 +14,7 @@ func TestDeleter_Delete(t *testing.T) { ctrl := gomock.NewController(t) treeManager := mock_treemanager.NewMockTreeManager(ctrl) st := mock_spacestorage.NewMockSpaceStorage(ctrl) - delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) + delState := mock_deletionstate.NewMockObjectDeletionState(ctrl) deleter := newDeleter(st, delState, treeManager) diff --git a/commonspace/settings/deletionmanager_test.go b/commonspace/settings/deletionmanager_test.go index 9e6b4f05..69e8830d 100644 --- a/commonspace/settings/deletionmanager_test.go +++ b/commonspace/settings/deletionmanager_test.go @@ -2,10 +2,10 @@ package settings import ( "context" + "github.com/anyproto/any-sync/commonspace/deletionstate/mock_deletionstate" "github.com/anyproto/any-sync/commonspace/object/treemanager/mock_treemanager" "github.com/anyproto/any-sync/commonspace/settings/mock_settings" "github.com/anyproto/any-sync/commonspace/settings/settingsstate" - "github.com/anyproto/any-sync/commonspace/settings/settingsstate/mock_settingsstate" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "testing" @@ -26,7 +26,7 @@ func TestDeletionManager_UpdateState_NotResponsible(t *testing.T) { onDeleted := func() { deleted = true } - delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) + delState := mock_deletionstate.NewMockObjectDeletionState(ctrl) treeManager := mock_treemanager.NewMockTreeManager(ctrl) delState.EXPECT().Add(state.DeletedIds) @@ -58,7 +58,7 @@ func TestDeletionManager_UpdateState_Responsible(t *testing.T) { onDeleted := func() { deleted = true } - delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) + delState := mock_deletionstate.NewMockObjectDeletionState(ctrl) treeManager := mock_treemanager.NewMockTreeManager(ctrl) provider := mock_settings.NewMockSpaceIdsProvider(ctrl) diff --git a/commonspace/settings/settingsobject_test.go b/commonspace/settings/settingsobject_test.go index 31956c81..9d83d9cd 100644 --- a/commonspace/settings/settingsobject_test.go +++ b/commonspace/settings/settingsobject_test.go @@ -3,6 +3,7 @@ package settings import ( "context" "github.com/anyproto/any-sync/accountservice/mock_accountservice" + "github.com/anyproto/any-sync/commonspace/deletionstate/mock_deletionstate" "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree/mock_objecttree" @@ -54,7 +55,7 @@ type settingsFixture struct { deleter *mock_settings.MockDeleter syncTree *mock_synctree.MockSyncTree historyTree *mock_objecttree.MockObjectTree - delState *mock_settingsstate.MockObjectDeletionState + delState *mock_deletionstate.MockObjectDeletionState account *mock_accountservice.MockService } @@ -66,7 +67,7 @@ func newSettingsFixture(t *testing.T) *settingsFixture { acc := mock_accountservice.NewMockService(ctrl) treeManager := mock_treemanager.NewMockTreeManager(ctrl) st := mock_spacestorage.NewMockSpaceStorage(ctrl) - delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) + delState := mock_deletionstate.NewMockObjectDeletionState(ctrl) delManager := mock_settings.NewMockDeletionManager(ctrl) stateBuilder := mock_settingsstate.NewMockStateBuilder(ctrl) changeFactory := mock_settingsstate.NewMockChangeFactory(ctrl) diff --git a/commonspace/spaceutils_test.go b/commonspace/spaceutils_test.go index c1d40f5c..cc82cecd 100644 --- a/commonspace/spaceutils_test.go +++ b/commonspace/spaceutils_test.go @@ -270,6 +270,7 @@ type mockTreeManager struct { cache ocache.OCache deletedIds []string markedIds []string + waitLoad chan struct{} } func (t *mockTreeManager) NewTreeSyncer(spaceId string, treeManager treemanager.TreeManager) treemanager.TreeSyncer { @@ -283,6 +284,7 @@ func (t *mockTreeManager) MarkTreeDeleted(ctx context.Context, spaceId, treeId s func (t *mockTreeManager) Init(a *app.App) (err error) { t.cache = ocache.New(func(ctx context.Context, id string) (value ocache.Object, err error) { + <-t.waitLoad return t.space.TreeBuilder().BuildTree(ctx, id, objecttreebuilder.BuildTreeOpts{}) }, ocache.WithGCPeriod(time.Minute), @@ -352,7 +354,7 @@ func newFixture(t *testing.T) *spaceFixture { configurationService: &mockConf{}, storageProvider: spacestorage.NewInMemorySpaceStorageProvider(), peermanagerProvider: &mockPeerManagerProvider{}, - treeManager: &mockTreeManager{}, + treeManager: &mockTreeManager{waitLoad: make(chan struct{})}, pool: &mockPool{}, spaceService: New(), }