Add deletionmanager tests

This commit is contained in:
mcrakhman 2023-02-26 00:05:28 +01:00 committed by Mikhail Iudin
parent ad639f66be
commit b7c4bf8f1e
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
6 changed files with 138 additions and 28 deletions

View File

@ -106,7 +106,7 @@ func TestDiffSyncer_Sync(t *testing.T) {
factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient { factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient {
return clientMock return clientMock
}) })
delState := mock_settingsstate.NewMockDeletionState(ctrl) delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
spaceId := "spaceId" spaceId := "spaceId"
aclRootId := "aclRootId" aclRootId := "aclRootId"
l := logger.NewNamed(spaceId) l := logger.NewNamed(spaceId)

View File

@ -24,7 +24,7 @@ func TestDiffService(t *testing.T) {
treeStorageMock := mock_treestorage.NewMockTreeStorage(ctrl) treeStorageMock := mock_treestorage.NewMockTreeStorage(ctrl)
diffMock := mock_ldiff.NewMockDiff(ctrl) diffMock := mock_ldiff.NewMockDiff(ctrl)
syncer := mock_headsync.NewMockDiffSyncer(ctrl) syncer := mock_headsync.NewMockDiffSyncer(ctrl)
delState := mock_settingsstate.NewMockDeletionState(ctrl) delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
syncPeriod := 1 syncPeriod := 1
initId := "initId" initId := "initId"

View File

@ -6,7 +6,6 @@ import (
"github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
"github.com/anytypeio/any-sync/util/slice" "github.com/anytypeio/any-sync/util/slice"
"go.uber.org/zap" "go.uber.org/zap"
"time"
) )
type SpaceIdsProvider interface { type SpaceIdsProvider interface {
@ -21,39 +20,36 @@ func newDeletionManager(
spaceId string, spaceId string,
settingsId string, settingsId string,
isResponsible bool, isResponsible bool,
deletionInterval time.Duration,
treeGetter treegetter.TreeGetter, treeGetter treegetter.TreeGetter,
deletionState settingsstate.ObjectDeletionState, deletionState settingsstate.ObjectDeletionState,
provider SpaceIdsProvider, provider SpaceIdsProvider,
onSpaceDelete func()) DeletionManager { onSpaceDelete func()) DeletionManager {
return &deletionManager{ return &deletionManager{
treeGetter: treeGetter, treeGetter: treeGetter,
isResponsible: isResponsible, isResponsible: isResponsible,
spaceId: spaceId, spaceId: spaceId,
settingsId: settingsId, settingsId: settingsId,
deletionState: deletionState, deletionState: deletionState,
provider: provider, provider: provider,
deletionInterval: deletionInterval, onSpaceDelete: onSpaceDelete,
onSpaceDelete: onSpaceDelete,
} }
} }
type deletionManager struct { type deletionManager struct {
deletionState settingsstate.ObjectDeletionState deletionState settingsstate.ObjectDeletionState
provider SpaceIdsProvider provider SpaceIdsProvider
treeGetter treegetter.TreeGetter treeGetter treegetter.TreeGetter
deletionInterval time.Duration spaceId string
spaceId string settingsId string
settingsId string isResponsible bool
isResponsible bool onSpaceDelete func()
onSpaceDelete func()
} }
func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate.State) error { func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate.State) error {
log := log.With(zap.String("spaceId", d.spaceId)) log := log.With(zap.String("spaceId", d.spaceId))
err := d.deletionState.Add(state.DeletedIds) err := d.deletionState.Add(state.DeletedIds)
if err != nil { if err != nil {
log.Warn("failed to add deleted ids to deletion state") log.Debug("failed to add deleted ids to deletion state")
} }
if state.DeleterId == "" { if state.DeleterId == "" {
return nil return nil
@ -69,7 +65,7 @@ func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate.
}) })
err := d.deletionState.Add(allIds) err := d.deletionState.Add(allIds)
if err != nil { if err != nil {
return err log.Debug("failed to add all ids to deletion state")
} }
} }
d.onSpaceDelete() d.onSpaceDelete()

View File

@ -0,0 +1,81 @@
package settings
import (
"context"
"github.com/anytypeio/any-sync/commonspace/object/treegetter/mock_treegetter"
"github.com/anytypeio/any-sync/commonspace/settings/mock_settings"
"github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
"github.com/anytypeio/any-sync/commonspace/settings/settingsstate/mock_settingsstate"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"testing"
)
func TestDeletionManager_UpdateState_NotResponsible(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
ctx := context.Background()
spaceId := "spaceId"
settingsId := "settingsId"
state := &settingsstate.State{
DeletedIds: []string{"id"},
DeleterId: "deleterId",
}
deleted := false
onDeleted := func() {
deleted = true
}
delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
treeGetter := mock_treegetter.NewMockTreeGetter(ctrl)
delState.EXPECT().Add(state.DeletedIds).Return(nil)
treeGetter.EXPECT().DeleteSpace(ctx, spaceId).Return(nil)
delManager := newDeletionManager(spaceId,
settingsId,
false,
treeGetter,
delState,
nil,
onDeleted)
err := delManager.UpdateState(ctx, state)
require.NoError(t, err)
require.True(t, deleted)
}
func TestDeletionManager_UpdateState_Responsible(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
ctx := context.Background()
spaceId := "spaceId"
settingsId := "settingsId"
state := &settingsstate.State{
DeletedIds: []string{"id"},
DeleterId: "deleterId",
}
deleted := false
onDeleted := func() {
deleted = true
}
delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
treeGetter := mock_treegetter.NewMockTreeGetter(ctrl)
provider := mock_settings.NewMockSpaceIdsProvider(ctrl)
delState.EXPECT().Add(state.DeletedIds).Return(nil)
treeGetter.EXPECT().DeleteSpace(ctx, spaceId).Return(nil)
provider.EXPECT().AllIds().Return([]string{"id", "otherId", settingsId})
delState.EXPECT().Add([]string{"id", "otherId"}).Return(nil)
delManager := newDeletionManager(spaceId,
settingsId,
true,
treeGetter,
delState,
provider,
onDeleted)
err := delManager.UpdateState(ctx, state)
require.NoError(t, err)
require.True(t, deleted)
}

View File

@ -1,5 +1,5 @@
// Code generated by MockGen. DO NOT EDIT. // Code generated by MockGen. DO NOT EDIT.
// Source: github.com/anytypeio/any-sync/commonspace/settings (interfaces: DeletionManager,Deleter) // Source: github.com/anytypeio/any-sync/commonspace/settings (interfaces: DeletionManager,Deleter,SpaceIdsProvider)
// Package mock_settings is a generated GoMock package. // Package mock_settings is a generated GoMock package.
package mock_settings package mock_settings
@ -83,3 +83,40 @@ func (mr *MockDeleterMockRecorder) Delete() *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeleter)(nil).Delete)) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeleter)(nil).Delete))
} }
// MockSpaceIdsProvider is a mock of SpaceIdsProvider interface.
type MockSpaceIdsProvider struct {
ctrl *gomock.Controller
recorder *MockSpaceIdsProviderMockRecorder
}
// MockSpaceIdsProviderMockRecorder is the mock recorder for MockSpaceIdsProvider.
type MockSpaceIdsProviderMockRecorder struct {
mock *MockSpaceIdsProvider
}
// NewMockSpaceIdsProvider creates a new mock instance.
func NewMockSpaceIdsProvider(ctrl *gomock.Controller) *MockSpaceIdsProvider {
mock := &MockSpaceIdsProvider{ctrl: ctrl}
mock.recorder = &MockSpaceIdsProviderMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockSpaceIdsProvider) EXPECT() *MockSpaceIdsProviderMockRecorder {
return m.recorder
}
// AllIds mocks base method.
func (m *MockSpaceIdsProvider) AllIds() []string {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "AllIds")
ret0, _ := ret[0].([]string)
return ret0
}
// AllIds indicates an expected call of AllIds.
func (mr *MockSpaceIdsProviderMockRecorder) AllIds() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllIds", reflect.TypeOf((*MockSpaceIdsProvider)(nil).AllIds))
}

View File

@ -1,4 +1,4 @@
//go:generate mockgen -destination mock_settings/mock_settings.go github.com/anytypeio/any-sync/commonspace/settings DeletionManager,Deleter //go:generate mockgen -destination mock_settings/mock_settings.go github.com/anytypeio/any-sync/commonspace/settings DeletionManager,Deleter,SpaceIdsProvider
package settings package settings
import ( import (
@ -18,13 +18,10 @@ import (
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"go.uber.org/zap" "go.uber.org/zap"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"time"
) )
var log = logger.NewNamed("common.commonspace.settings") var log = logger.NewNamed("common.commonspace.settings")
const spaceDeletionInterval = time.Hour * 24 * 7
type SettingsObject interface { type SettingsObject interface {
synctree.SyncTree synctree.SyncTree
Init(ctx context.Context) (err error) Init(ctx context.Context) (err error)
@ -92,7 +89,6 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) {
spaceId, spaceId,
deps.Store.SpaceSettingsId(), deps.Store.SpaceSettingsId(),
deps.Configuration.IsResponsible(spaceId), deps.Configuration.IsResponsible(spaceId),
spaceDeletionInterval,
deps.TreeGetter, deps.TreeGetter,
deps.DeletionState, deps.DeletionState,
deps.Provider, deps.Provider,