From adec5fa746cb050c9800d1cf9715543001b9a48c Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Fri, 10 Feb 2023 14:23:45 +0100 Subject: [PATCH 1/2] RWLocker iface: add TryLock --- commonspace/object/tree/objecttree/objecttree.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/commonspace/object/tree/objecttree/objecttree.go b/commonspace/object/tree/objecttree/objecttree.go index 58c254da..8e5d7c84 100644 --- a/commonspace/object/tree/objecttree/objecttree.go +++ b/commonspace/object/tree/objecttree/objecttree.go @@ -4,19 +4,22 @@ package objecttree import ( "context" "errors" + "sync" + "github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto" - list "github.com/anytypeio/any-sync/commonspace/object/acl/list" + "github.com/anytypeio/any-sync/commonspace/object/acl/list" "github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto" "github.com/anytypeio/any-sync/commonspace/object/tree/treestorage" "github.com/anytypeio/any-sync/util/keys/symmetric" "github.com/anytypeio/any-sync/util/slice" - "sync" ) type RWLocker interface { sync.Locker RLock() RUnlock() + TryRLock() bool + TryLock() bool } var ( From 06016850404699441ac73c459de1fe93677a38d1 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Fri, 10 Feb 2023 14:40:45 +0100 Subject: [PATCH 2/2] fix tests --- .../mock_objecttree/mock_objecttree.go | 28 +++++++++++++++++++ .../synctree/mock_synctree/mock_synctree.go | 28 +++++++++++++++++++ .../tree/synctree/synctreehandler_test.go | 23 +++++++++++++-- 3 files changed, 76 insertions(+), 3 deletions(-) diff --git a/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go b/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go index 6915f927..95dd7a00 100644 --- a/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go +++ b/commonspace/object/tree/objecttree/mock_objecttree/mock_objecttree.go @@ -321,6 +321,34 @@ func (mr *MockObjectTreeMockRecorder) Storage() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Storage", reflect.TypeOf((*MockObjectTree)(nil).Storage)) } +// TryLock mocks base method. +func (m *MockObjectTree) TryLock() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TryLock") + ret0, _ := ret[0].(bool) + return ret0 +} + +// TryLock indicates an expected call of TryLock. +func (mr *MockObjectTreeMockRecorder) TryLock() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryLock", reflect.TypeOf((*MockObjectTree)(nil).TryLock)) +} + +// TryRLock mocks base method. +func (m *MockObjectTree) TryRLock() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TryRLock") + ret0, _ := ret[0].(bool) + return ret0 +} + +// TryRLock indicates an expected call of TryRLock. +func (mr *MockObjectTreeMockRecorder) TryRLock() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryRLock", reflect.TypeOf((*MockObjectTree)(nil).TryRLock)) +} + // Unlock mocks base method. func (m *MockObjectTree) Unlock() { m.ctrl.T.Helper() diff --git a/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go b/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go index 992ae5c6..1928e62d 100644 --- a/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go +++ b/commonspace/object/tree/synctree/mock_synctree/mock_synctree.go @@ -472,6 +472,34 @@ func (mr *MockSyncTreeMockRecorder) SyncWithPeer(arg0, arg1 interface{}) *gomock return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncWithPeer", reflect.TypeOf((*MockSyncTree)(nil).SyncWithPeer), arg0, arg1) } +// TryLock mocks base method. +func (m *MockSyncTree) TryLock() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TryLock") + ret0, _ := ret[0].(bool) + return ret0 +} + +// TryLock indicates an expected call of TryLock. +func (mr *MockSyncTreeMockRecorder) TryLock() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryLock", reflect.TypeOf((*MockSyncTree)(nil).TryLock)) +} + +// TryRLock mocks base method. +func (m *MockSyncTree) TryRLock() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TryRLock") + ret0, _ := ret[0].(bool) + return ret0 +} + +// TryRLock indicates an expected call of TryRLock. +func (mr *MockSyncTreeMockRecorder) TryRLock() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryRLock", reflect.TypeOf((*MockSyncTree)(nil).TryRLock)) +} + // Unlock mocks base method. func (m *MockSyncTree) Unlock() { m.ctrl.T.Helper() diff --git a/commonspace/object/tree/synctree/synctreehandler_test.go b/commonspace/object/tree/synctree/synctreehandler_test.go index 389d55d4..052479d2 100644 --- a/commonspace/object/tree/synctree/synctreehandler_test.go +++ b/commonspace/object/tree/synctree/synctreehandler_test.go @@ -3,6 +3,9 @@ package synctree import ( "context" "fmt" + "sync" + "testing" + "github.com/anytypeio/any-sync/app/logger" "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree/mock_objecttree" @@ -12,13 +15,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "go.uber.org/zap" - "sync" - "testing" ) type testObjTreeMock struct { *mock_objecttree.MockObjectTree - m sync.Mutex + m sync.RWMutex } func newTestObjMock(mockTree *mock_objecttree.MockObjectTree) *testObjTreeMock { @@ -31,10 +32,26 @@ func (t *testObjTreeMock) Lock() { t.m.Lock() } +func (t *testObjTreeMock) RLock() { + t.m.RLock() +} + func (t *testObjTreeMock) Unlock() { t.m.Unlock() } +func (t *testObjTreeMock) RUnlock() { + t.m.RUnlock() +} + +func (t *testObjTreeMock) TryLock() bool { + return t.m.TryLock() +} + +func (t *testObjTreeMock) TryRLock() bool { + return t.m.TryRLock() +} + type syncHandlerFixture struct { ctrl *gomock.Controller syncClientMock *mock_synctree.MockSyncClient