diff --git a/commonspace/headsync/diffsyncer_test.go b/commonspace/headsync/diffsyncer_test.go index d805c9f6..4c6fcdc9 100644 --- a/commonspace/headsync/diffsyncer_test.go +++ b/commonspace/headsync/diffsyncer_test.go @@ -1,13 +1,57 @@ package headsync import ( + "context" + "github.com/anyproto/any-sync/commonspace/spacesyncproto" + "github.com/anyproto/any-sync/net/peer" "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + "storj.io/drpc" "testing" + "time" ) +type mockPeer struct { +} + +func (m mockPeer) Id() string { + return "peerId" +} + +func (m mockPeer) Context() context.Context { + return context.Background() +} + +func (m mockPeer) AcquireDrpcConn(ctx context.Context) (drpc.Conn, error) { + return nil, nil +} + +func (m mockPeer) ReleaseDrpcConn(conn drpc.Conn) { + return +} + +func (m mockPeer) DoDrpc(ctx context.Context, do func(conn drpc.Conn) error) error { + return nil +} + +func (m mockPeer) IsClosed() bool { + return false +} + +func (m mockPeer) TryClose(objectTTL time.Duration) (res bool, err error) { + return false, err +} + +func (m mockPeer) Close() (err error) { + return nil +} + func (fx *headSyncFixture) initDiffSyncer(t *testing.T) { fx.init(t) - fx.diffSyncer = newDiffSyncer(fx.headSync) + fx.diffSyncer = newDiffSyncer(fx.headSync).(*diffSyncer) + fx.diffSyncer.clientFactory = spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient { + return fx.clientMock + }) fx.deletionStateMock.EXPECT().AddObserver(gomock.Any()) fx.treeManagerMock.EXPECT().NewTreeSyncer(fx.spaceState.SpaceId, fx.treeManagerMock).Return(fx.treeSyncerMock) fx.diffSyncer.Init() @@ -17,6 +61,22 @@ func TestDiffSyncer(t *testing.T) { fx := newHeadSyncFixture(t) fx.initDiffSyncer(t) defer fx.stop() + ctx := context.Background() + + t.Run("diff syncer sync", func(t *testing.T) { + mPeer := mockPeer{} + fx.peerManagerMock.EXPECT(). + GetResponsiblePeers(gomock.Any()). + Return([]peer.Peer{mPeer}, nil) + fx.diffMock.EXPECT(). + Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(fx.spaceState.SpaceId, fx.clientMock))). + Return([]string{"new"}, []string{"changed"}, nil, nil) + fx.deletionStateMock.EXPECT().Filter([]string{"new"}).Return([]string{"new"}).Times(1) + fx.deletionStateMock.EXPECT().Filter([]string{"changed"}).Return([]string{"changed"}).Times(1) + fx.deletionStateMock.EXPECT().Filter(nil).Return(nil).Times(1) + fx.treeSyncerMock.EXPECT().SyncAll(gomock.Any(), mPeer.Id(), []string{"changed"}, []string{"new"}).Return(nil) + require.NoError(t, fx.diffSyncer.Sync(ctx)) + }) } // @@ -99,9 +159,9 @@ func TestDiffSyncer(t *testing.T) { // //func TestDiffSyncer_Sync(t *testing.T) { // // setup -// ctx := context.Background() -// ctrl := gomock.NewController(t) -// defer ctrl.Finish() +// fx := newHeadSyncFixture(t) +// fx.initDiffSyncer(t) +// defer fx.stop() // // diffMock := mock_ldiff.NewMockDiff(ctrl) // peerManagerMock := mock_peermanager.NewMockPeerManager(ctrl) @@ -136,6 +196,7 @@ func TestDiffSyncer(t *testing.T) { // 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(). diff --git a/commonspace/headsync/headsync_test.go b/commonspace/headsync/headsync_test.go index cdb4b293..4f14d084 100644 --- a/commonspace/headsync/headsync_test.go +++ b/commonspace/headsync/headsync_test.go @@ -3,6 +3,8 @@ package headsync import ( "context" "github.com/anyproto/any-sync/app" + "github.com/anyproto/any-sync/app/ldiff" + "github.com/anyproto/any-sync/app/ldiff/mock_ldiff" "github.com/anyproto/any-sync/commonspace/config" "github.com/anyproto/any-sync/commonspace/credentialprovider" "github.com/anyproto/any-sync/commonspace/credentialprovider/mock_credentialprovider" @@ -17,6 +19,7 @@ import ( "github.com/anyproto/any-sync/commonspace/spacestate" "github.com/anyproto/any-sync/commonspace/spacestorage" "github.com/anyproto/any-sync/commonspace/spacestorage/mock_spacestorage" + "github.com/anyproto/any-sync/commonspace/spacesyncproto/mock_spacesyncproto" "github.com/anyproto/any-sync/commonspace/syncstatus" "github.com/anyproto/any-sync/nodeconf" "github.com/anyproto/any-sync/nodeconf/mock_nodeconf" @@ -55,8 +58,10 @@ type headSyncFixture struct { deletionStateMock *mock_deletionstate.MockObjectDeletionState diffSyncerMock *mock_headsync.MockDiffSyncer treeSyncerMock *mock_treemanager.MockTreeSyncer + diffMock *mock_ldiff.MockDiff + clientMock *mock_spacesyncproto.MockDRPCSpaceSyncClient headSync *headSync - diffSyncer DiffSyncer + diffSyncer *diffSyncer } func newHeadSyncFixture(t *testing.T) *headSyncFixture { @@ -80,6 +85,8 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture { deletionStateMock.EXPECT().Name().AnyTimes().Return(deletionstate.CName) diffSyncerMock := mock_headsync.NewMockDiffSyncer(ctrl) treeSyncerMock := mock_treemanager.NewMockTreeSyncer(ctrl) + diffMock := mock_ldiff.NewMockDiff(ctrl) + clientMock := mock_spacesyncproto.NewMockDRPCSpaceSyncClient(ctrl) hs := &headSync{} a := &app.App{} a.Register(spaceState). @@ -106,6 +113,8 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture { headSync: hs, diffSyncerMock: diffSyncerMock, treeSyncerMock: treeSyncerMock, + diffMock: diffMock, + clientMock: clientMock, } } @@ -116,6 +125,7 @@ func (fx *headSyncFixture) init(t *testing.T) { fx.diffSyncerMock.EXPECT().Init() err := fx.headSync.Init(fx.app) require.NoError(t, err) + fx.headSync.diff = fx.diffMock } func (fx *headSyncFixture) stop() { @@ -134,8 +144,13 @@ func TestHeadSync(t *testing.T) { treeMock := mock_treestorage.NewMockTreeStorage(fx.ctrl) fx.storageMock.EXPECT().StoredIds().Return(ids, nil) fx.storageMock.EXPECT().TreeStorage(ids[0]).Return(treeMock, nil) - treeMock.EXPECT().Heads().Return([]string{"h1"}, nil) - fx.storageMock.EXPECT().WriteSpaceHash(gomock.Any()).Return(nil) + treeMock.EXPECT().Heads().Return([]string{"h1", "h2"}, nil) + fx.diffMock.EXPECT().Set(ldiff.Element{ + Id: "id1", + Head: "h1h2", + }) + fx.diffMock.EXPECT().Hash().Return("hash") + fx.storageMock.EXPECT().WriteSpaceHash("hash").Return(nil) fx.diffSyncerMock.EXPECT().Sync(gomock.Any()).Return(nil) fx.diffSyncerMock.EXPECT().Close().Return(nil) err := fx.headSync.Run(ctx)