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 {
|
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)
|
||||||
|
|||||||
@ -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"
|
||||||
|
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
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.
|
// 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))
|
||||||
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user