Add deletionmanager tests
This commit is contained in:
parent
ad639f66be
commit
b7c4bf8f1e
@ -106,7 +106,7 @@ func TestDiffSyncer_Sync(t *testing.T) {
|
||||
factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient {
|
||||
return clientMock
|
||||
})
|
||||
delState := mock_settingsstate.NewMockDeletionState(ctrl)
|
||||
delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
|
||||
spaceId := "spaceId"
|
||||
aclRootId := "aclRootId"
|
||||
l := logger.NewNamed(spaceId)
|
||||
|
||||
@ -24,7 +24,7 @@ func TestDiffService(t *testing.T) {
|
||||
treeStorageMock := mock_treestorage.NewMockTreeStorage(ctrl)
|
||||
diffMock := mock_ldiff.NewMockDiff(ctrl)
|
||||
syncer := mock_headsync.NewMockDiffSyncer(ctrl)
|
||||
delState := mock_settingsstate.NewMockDeletionState(ctrl)
|
||||
delState := mock_settingsstate.NewMockObjectDeletionState(ctrl)
|
||||
syncPeriod := 1
|
||||
initId := "initId"
|
||||
|
||||
|
||||
@ -6,7 +6,6 @@ import (
|
||||
"github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
|
||||
"github.com/anytypeio/any-sync/util/slice"
|
||||
"go.uber.org/zap"
|
||||
"time"
|
||||
)
|
||||
|
||||
type SpaceIdsProvider interface {
|
||||
@ -21,39 +20,36 @@ func newDeletionManager(
|
||||
spaceId string,
|
||||
settingsId string,
|
||||
isResponsible bool,
|
||||
deletionInterval time.Duration,
|
||||
treeGetter treegetter.TreeGetter,
|
||||
deletionState settingsstate.ObjectDeletionState,
|
||||
provider SpaceIdsProvider,
|
||||
onSpaceDelete func()) DeletionManager {
|
||||
return &deletionManager{
|
||||
treeGetter: treeGetter,
|
||||
isResponsible: isResponsible,
|
||||
spaceId: spaceId,
|
||||
settingsId: settingsId,
|
||||
deletionState: deletionState,
|
||||
provider: provider,
|
||||
deletionInterval: deletionInterval,
|
||||
onSpaceDelete: onSpaceDelete,
|
||||
treeGetter: treeGetter,
|
||||
isResponsible: isResponsible,
|
||||
spaceId: spaceId,
|
||||
settingsId: settingsId,
|
||||
deletionState: deletionState,
|
||||
provider: provider,
|
||||
onSpaceDelete: onSpaceDelete,
|
||||
}
|
||||
}
|
||||
|
||||
type deletionManager struct {
|
||||
deletionState settingsstate.ObjectDeletionState
|
||||
provider SpaceIdsProvider
|
||||
treeGetter treegetter.TreeGetter
|
||||
deletionInterval time.Duration
|
||||
spaceId string
|
||||
settingsId string
|
||||
isResponsible bool
|
||||
onSpaceDelete func()
|
||||
deletionState settingsstate.ObjectDeletionState
|
||||
provider SpaceIdsProvider
|
||||
treeGetter treegetter.TreeGetter
|
||||
spaceId string
|
||||
settingsId string
|
||||
isResponsible bool
|
||||
onSpaceDelete func()
|
||||
}
|
||||
|
||||
func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate.State) error {
|
||||
log := log.With(zap.String("spaceId", d.spaceId))
|
||||
err := d.deletionState.Add(state.DeletedIds)
|
||||
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 == "" {
|
||||
return nil
|
||||
@ -69,7 +65,7 @@ func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate.
|
||||
})
|
||||
err := d.deletionState.Add(allIds)
|
||||
if err != nil {
|
||||
return err
|
||||
log.Debug("failed to add all ids to deletion state")
|
||||
}
|
||||
}
|
||||
d.onSpaceDelete()
|
||||
|
||||
81
commonspace/settings/deletionmanager_test.go
Normal file
81
commonspace/settings/deletionmanager_test.go
Normal 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)
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
// 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
|
||||
@ -83,3 +83,40 @@ func (mr *MockDeleterMockRecorder) Delete() *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
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))
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
import (
|
||||
@ -18,13 +18,10 @@ import (
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/exp/slices"
|
||||
"time"
|
||||
)
|
||||
|
||||
var log = logger.NewNamed("common.commonspace.settings")
|
||||
|
||||
const spaceDeletionInterval = time.Hour * 24 * 7
|
||||
|
||||
type SettingsObject interface {
|
||||
synctree.SyncTree
|
||||
Init(ctx context.Context) (err error)
|
||||
@ -92,7 +89,6 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) {
|
||||
spaceId,
|
||||
deps.Store.SpaceSettingsId(),
|
||||
deps.Configuration.IsResponsible(spaceId),
|
||||
spaceDeletionInterval,
|
||||
deps.TreeGetter,
|
||||
deps.DeletionState,
|
||||
deps.Provider,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user