1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00

Fix tests

This commit is contained in:
Mikhail Rakhmanov 2025-03-31 22:50:08 +02:00
parent 875ca9c48a
commit e735d23f04
No known key found for this signature in database
GPG key ID: DED12CFEF5B8396B
5 changed files with 139 additions and 26 deletions

View file

@ -1,7 +1,7 @@
// Package ldiff provides a container of elements with fixed id and changeable content.
// Diff can calculate the difference with another diff container (you can make it remote) with minimum hops and traffic.
//
//go:generate mockgen -destination mock_ldiff/mock_ldiff.go github.com/anyproto/any-sync/app/ldiff Diff,Remote
//go:generate mockgen -destination mock_ldiff/mock_ldiff.go github.com/anyproto/any-sync/app/ldiff Diff,Remote,DiffContainer
package ldiff
import (

View file

@ -1,9 +1,9 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: github.com/anyproto/any-sync/app/ldiff (interfaces: Diff,Remote)
// Source: github.com/anyproto/any-sync/app/ldiff (interfaces: Diff,Remote,DiffContainer)
//
// Generated by this command:
//
// mockgen -destination mock_ldiff/mock_ldiff.go github.com/anyproto/any-sync/app/ldiff Diff,Remote
// mockgen -destination mock_ldiff/mock_ldiff.go github.com/anyproto/any-sync/app/ldiff Diff,Remote,DiffContainer
//
// Package mock_ldiff is a generated GoMock package.
package mock_ldiff
@ -224,3 +224,100 @@ func (mr *MockRemoteMockRecorder) Ranges(arg0, arg1, arg2 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ranges", reflect.TypeOf((*MockRemote)(nil).Ranges), arg0, arg1, arg2)
}
// MockDiffContainer is a mock of DiffContainer interface.
type MockDiffContainer struct {
ctrl *gomock.Controller
recorder *MockDiffContainerMockRecorder
}
// MockDiffContainerMockRecorder is the mock recorder for MockDiffContainer.
type MockDiffContainerMockRecorder struct {
mock *MockDiffContainer
}
// NewMockDiffContainer creates a new mock instance.
func NewMockDiffContainer(ctrl *gomock.Controller) *MockDiffContainer {
mock := &MockDiffContainer{ctrl: ctrl}
mock.recorder = &MockDiffContainerMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockDiffContainer) EXPECT() *MockDiffContainerMockRecorder {
return m.recorder
}
// DiffTypeCheck mocks base method.
func (m *MockDiffContainer) DiffTypeCheck(arg0 context.Context, arg1 ldiff.RemoteTypeChecker) (bool, ldiff.Diff, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DiffTypeCheck", arg0, arg1)
ret0, _ := ret[0].(bool)
ret1, _ := ret[1].(ldiff.Diff)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// DiffTypeCheck indicates an expected call of DiffTypeCheck.
func (mr *MockDiffContainerMockRecorder) DiffTypeCheck(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DiffTypeCheck", reflect.TypeOf((*MockDiffContainer)(nil).DiffTypeCheck), arg0, arg1)
}
// NewDiff mocks base method.
func (m *MockDiffContainer) NewDiff() ldiff.Diff {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "NewDiff")
ret0, _ := ret[0].(ldiff.Diff)
return ret0
}
// NewDiff indicates an expected call of NewDiff.
func (mr *MockDiffContainerMockRecorder) NewDiff() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDiff", reflect.TypeOf((*MockDiffContainer)(nil).NewDiff))
}
// OldDiff mocks base method.
func (m *MockDiffContainer) OldDiff() ldiff.Diff {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "OldDiff")
ret0, _ := ret[0].(ldiff.Diff)
return ret0
}
// OldDiff indicates an expected call of OldDiff.
func (mr *MockDiffContainerMockRecorder) OldDiff() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OldDiff", reflect.TypeOf((*MockDiffContainer)(nil).OldDiff))
}
// RemoveId mocks base method.
func (m *MockDiffContainer) RemoveId(arg0 string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "RemoveId", arg0)
ret0, _ := ret[0].(error)
return ret0
}
// RemoveId indicates an expected call of RemoveId.
func (mr *MockDiffContainerMockRecorder) RemoveId(arg0 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveId", reflect.TypeOf((*MockDiffContainer)(nil).RemoveId), arg0)
}
// Set mocks base method.
func (m *MockDiffContainer) Set(arg0 ...ldiff.Element) {
m.ctrl.T.Helper()
varargs := []any{}
for _, a := range arg0 {
varargs = append(varargs, a)
}
m.ctrl.Call(m, "Set", varargs...)
}
// Set indicates an expected call of Set.
func (mr *MockDiffContainerMockRecorder) Set(arg0 ...any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Set", reflect.TypeOf((*MockDiffContainer)(nil).Set), arg0...)
}

View file

@ -80,6 +80,7 @@ func TestDiffSyncer(t *testing.T) {
fx.peerManagerMock.EXPECT().
GetResponsiblePeers(gomock.Any()).
Return([]peer.Peer{mPeer}, nil)
fx.diffContainerMock.EXPECT().DiffTypeCheck(gomock.Any(), gomock.Any()).Return(true, fx.diffMock, nil)
fx.diffMock.EXPECT().
Diff(gomock.Any(), gomock.Eq(NewRemoteDiff(fx.spaceState.SpaceId, fx.clientMock))).
Return([]string{"new"}, []string{"changed"}, nil, nil)
@ -103,6 +104,7 @@ func TestDiffSyncer(t *testing.T) {
fx.peerManagerMock.EXPECT().
GetResponsiblePeers(gomock.Any()).
Return([]peer.Peer{mPeer}, nil)
fx.diffContainerMock.EXPECT().DiffTypeCheck(gomock.Any(), gomock.Any()).Return(true, fx.diffMock, nil)
fx.diffMock.EXPECT().
Diff(gomock.Any(), gomock.Eq(remDiff)).
Return([]string{"new"}, []string{"changed"}, nil, nil)
@ -133,9 +135,12 @@ func TestDiffSyncer(t *testing.T) {
fx.initDiffSyncer(t)
defer fx.stop()
deletedId := "id"
fx.diffMock.EXPECT().RemoveId(deletedId).Return(nil)
fx.diffMock.EXPECT().Hash().Return("hash")
//fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash").Return(nil)
fx.diffContainerMock.EXPECT().RemoveId(deletedId).Return(nil)
fx.diffContainerMock.EXPECT().NewDiff().Return(fx.diffMock)
fx.diffContainerMock.EXPECT().OldDiff().Return(fx.diffMock)
fx.diffMock.EXPECT().Hash().AnyTimes().Return("hash")
fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash", "hash").Return(nil)
upd := headstorage.DeletedStatusDeleted
fx.diffSyncer.updateHeads(headstorage.HeadsUpdate{
Id: "id",
@ -150,11 +155,14 @@ func TestDiffSyncer(t *testing.T) {
updatedId := "id"
fx.diffMock.EXPECT().Hash().Return("hash")
fx.deletionStateMock.EXPECT().Exists(updatedId).Return(false)
fx.diffMock.EXPECT().Set(ldiff.Element{
fx.diffContainerMock.EXPECT().Set(ldiff.Element{
Id: updatedId,
Head: "head",
})
//fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash").Return(nil)
fx.diffContainerMock.EXPECT().NewDiff().Return(fx.diffMock)
fx.diffContainerMock.EXPECT().OldDiff().Return(fx.diffMock)
fx.diffMock.EXPECT().Hash().AnyTimes().Return("hash")
fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash", "hash").Return(nil)
fx.diffSyncer.updateHeads(headstorage.HeadsUpdate{
Id: "id",
Heads: []string{"head"},
@ -180,6 +188,7 @@ func TestDiffSyncer(t *testing.T) {
fx.peerManagerMock.EXPECT().
GetResponsiblePeers(gomock.Any()).
Return([]peer.Peer{rpctest.MockPeer{}}, nil)
fx.diffContainerMock.EXPECT().DiffTypeCheck(gomock.Any(), gomock.Any()).Return(true, fx.diffMock, nil)
fx.diffMock.EXPECT().
Diff(gomock.Any(), gomock.Eq(remDiff)).
Return(nil, nil, nil, spacesyncproto.ErrSpaceMissing)
@ -219,6 +228,8 @@ func TestDiffSyncer(t *testing.T) {
fx.peerManagerMock.EXPECT().
GetResponsiblePeers(gomock.Any()).
Return([]peer.Peer{rpctest.MockPeer{}}, nil)
fx.diffContainerMock.EXPECT().DiffTypeCheck(gomock.Any(), gomock.Any()).Return(true, fx.diffMock, nil)
fx.diffMock.EXPECT().
Diff(gomock.Any(), gomock.Eq(remDiff)).
Return(nil, nil, nil, spacesyncproto.ErrUnexpected)
@ -232,15 +243,12 @@ func TestDiffSyncer(t *testing.T) {
fx.initDiffSyncer(t)
defer fx.stop()
mPeer := rpctest.MockPeer{}
remDiff := NewRemoteDiff(fx.spaceState.SpaceId, fx.clientMock)
fx.treeSyncerMock.EXPECT().ShouldSync(gomock.Any()).Return(true)
fx.aclMock.EXPECT().Id().AnyTimes().Return("aclId")
fx.peerManagerMock.EXPECT().
GetResponsiblePeers(gomock.Any()).
Return([]peer.Peer{mPeer}, nil)
fx.diffMock.EXPECT().
Diff(gomock.Any(), gomock.Eq(remDiff)).
Return(nil, nil, nil, spacesyncproto.ErrSpaceIsDeleted)
fx.diffContainerMock.EXPECT().DiffTypeCheck(gomock.Any(), gomock.Any()).Return(true, fx.diffMock, spacesyncproto.ErrSpaceIsDeleted)
fx.peerManagerMock.EXPECT().KeepAlive(gomock.Any())
require.NoError(t, fx.diffSyncer.Sync(ctx))

View file

@ -65,6 +65,7 @@ type headSyncFixture struct {
diffSyncerMock *mock_headsync.MockDiffSyncer
treeSyncerMock *mock_treesyncer.MockTreeSyncer
diffMock *mock_ldiff.MockDiff
diffContainerMock *mock_ldiff.MockDiffContainer
clientMock *mock_spacesyncproto.MockDRPCSpaceSyncClient
aclMock *mock_syncacl.MockSyncAcl
headStorage *mock_headstorage.MockHeadStorage
@ -91,6 +92,7 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture {
deletionStateMock := mock_deletionstate.NewMockObjectDeletionState(ctrl)
deletionStateMock.EXPECT().Name().AnyTimes().Return(deletionstate.CName)
diffSyncerMock := mock_headsync.NewMockDiffSyncer(ctrl)
diffContainerMock := mock_ldiff.NewMockDiffContainer(ctrl)
treeSyncerMock := mock_treesyncer.NewMockTreeSyncer(ctrl)
headStorage := mock_headstorage.NewMockHeadStorage(ctrl)
stateStorage := mock_statestorage.NewMockStateStorage(ctrl)
@ -121,6 +123,7 @@ func newHeadSyncFixture(t *testing.T) *headSyncFixture {
app: a,
configurationMock: configurationMock,
storageMock: storageMock,
diffContainerMock: diffContainerMock,
peerManagerMock: peerManagerMock,
credentialProviderMock: credentialProviderMock,
treeManagerMock: treeManagerMock,
@ -144,7 +147,7 @@ func (fx *headSyncFixture) init(t *testing.T) {
fx.headStorage.EXPECT().AddObserver(gomock.Any())
err := fx.headSync.Init(fx.app)
require.NoError(t, err)
//fx.headSync.diff = fx.diffMock
fx.headSync.diffContainer = fx.diffContainerMock
}
func (fx *headSyncFixture) stop() {
@ -183,7 +186,7 @@ func TestHeadSync(t *testing.T) {
fx.aclMock.EXPECT().Id().AnyTimes().Return("aclId")
fx.aclMock.EXPECT().Head().AnyTimes().Return(&list.AclRecord{Id: "headId"})
fx.diffMock.EXPECT().Set(ldiff.Element{
fx.diffContainerMock.EXPECT().Set(ldiff.Element{
Id: "id1",
Head: "h1h2",
}, ldiff.Element{
@ -193,8 +196,10 @@ func TestHeadSync(t *testing.T) {
Id: "aclId",
Head: "headId",
})
fx.diffMock.EXPECT().Hash().Return("hash")
//fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash").Return(nil)
fx.diffContainerMock.EXPECT().NewDiff().Return(fx.diffMock)
fx.diffContainerMock.EXPECT().OldDiff().Return(fx.diffMock)
fx.diffMock.EXPECT().Hash().AnyTimes().Return("hash")
fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash", "hash").Return(nil)
fx.diffSyncerMock.EXPECT().Sync(gomock.Any()).Return(nil)
fx.diffSyncerMock.EXPECT().Close()
err := fx.headSync.Run(ctx)
@ -232,15 +237,17 @@ func TestHeadSync(t *testing.T) {
fx.aclMock.EXPECT().Id().AnyTimes().Return("aclId")
fx.aclMock.EXPECT().Head().AnyTimes().Return(&list.AclRecord{Id: "headId"})
fx.diffMock.EXPECT().Set(ldiff.Element{
fx.diffContainerMock.EXPECT().Set(ldiff.Element{
Id: "id2",
Head: "h3h4",
}, ldiff.Element{
Id: "aclId",
Head: "headId",
})
fx.diffMock.EXPECT().Hash().Return("hash")
//fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash").Return(nil)
fx.diffContainerMock.EXPECT().NewDiff().Return(fx.diffMock)
fx.diffContainerMock.EXPECT().OldDiff().Return(fx.diffMock)
fx.diffMock.EXPECT().Hash().AnyTimes().Return("hash")
fx.stateStorage.EXPECT().SetHash(gomock.Any(), "hash", "hash").Return(nil)
fx.diffSyncerMock.EXPECT().Sync(gomock.Any()).Return(nil)
fx.diffSyncerMock.EXPECT().Close()
err := fx.headSync.Run(ctx)

View file

@ -10,12 +10,13 @@ import (
"github.com/stretchr/testify/require"
"github.com/anyproto/any-sync/app/ldiff"
"github.com/anyproto/any-sync/app/olddiff"
"github.com/anyproto/any-sync/commonspace/spacesyncproto"
)
func benchmarkDifferentDiffs(t *testing.T, diffFactory func() ldiff.Diff, headLength int) {
moduloValues := []int{1, 10, 100, 1000, 10000, 100000}
totalElements := 1000000
totalElements := 100000
for _, modVal := range moduloValues {
t.Run(fmt.Sprintf("New_%d", totalElements/modVal), func(t *testing.T) {
@ -66,12 +67,12 @@ func TestBenchRemoteWithDifferentCounts(t *testing.T) {
return ldiff.New(32, 256)
}, 32)
})
// old has higher head lengths because of hashes
//t.Run("OldLdiff", func(t *testing.T) {
// benchmarkDifferentDiffs(t, func() ldiff.Diff {
// return olddiff.New(32, 256)
// }, 100)
//})
//old has higher head lengths because of hashes
t.Run("OldLdiff", func(t *testing.T) {
benchmarkDifferentDiffs(t, func() ldiff.Diff {
return olddiff.New(32, 256)
}, 100)
})
}
type mockClient struct {