mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
Make integration test compile
This commit is contained in:
parent
abd98768e8
commit
f30ab827d2
5 changed files with 97 additions and 18 deletions
|
@ -14,6 +14,7 @@ import (
|
||||||
|
|
||||||
anystore "github.com/anyproto/any-store"
|
anystore "github.com/anyproto/any-store"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -141,6 +142,7 @@ func createNamedStore(ctx context.Context, t *testing.T, name string) anystore.D
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
err := db.Close()
|
err := db.Close()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
unix.Rmdir(path)
|
||||||
})
|
})
|
||||||
return testStore{
|
return testStore{
|
||||||
DB: db,
|
DB: db,
|
||||||
|
|
|
@ -105,7 +105,7 @@ func (s *spaceService) CreateSpace(ctx context.Context, payload SpaceCreatePaylo
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
store, err := s.createSpaceStorage(storageCreate)
|
store, err := s.createSpaceStorage(ctx, storageCreate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == spacestorage.ErrSpaceStorageExists {
|
if err == spacestorage.ErrSpaceStorageExists {
|
||||||
return storageCreate.SpaceHeaderWithId.Id, nil
|
return storageCreate.SpaceHeaderWithId.Id, nil
|
||||||
|
@ -130,7 +130,7 @@ func (s *spaceService) DeriveSpace(ctx context.Context, payload SpaceDerivePaylo
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
store, err := s.createSpaceStorage(storageCreate)
|
store, err := s.createSpaceStorage(ctx, storageCreate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == spacestorage.ErrSpaceStorageExists {
|
if err == spacestorage.ErrSpaceStorageExists {
|
||||||
return storageCreate.SpaceHeaderWithId.Id, nil
|
return storageCreate.SpaceHeaderWithId.Id, nil
|
||||||
|
@ -211,7 +211,7 @@ func (s *spaceService) addSpaceStorage(ctx context.Context, spaceDescription Spa
|
||||||
Id: spaceDescription.SpaceSettingsId,
|
Id: spaceDescription.SpaceSettingsId,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
st, err = s.createSpaceStorage(payload)
|
st, err = s.createSpaceStorage(ctx, payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = spacesyncproto.ErrUnexpected
|
err = spacesyncproto.ErrUnexpected
|
||||||
if err == spacestorage.ErrSpaceStorageExists {
|
if err == spacestorage.ErrSpaceStorageExists {
|
||||||
|
@ -286,7 +286,7 @@ func (s *spaceService) spacePullWithPeer(ctx context.Context, p peer.Peer, id st
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.createSpaceStorage(spacestorage.SpaceStorageCreatePayload{
|
return s.createSpaceStorage(ctx, spacestorage.SpaceStorageCreatePayload{
|
||||||
AclWithId: &consensusproto.RawRecordWithId{
|
AclWithId: &consensusproto.RawRecordWithId{
|
||||||
Payload: res.Payload.AclPayload,
|
Payload: res.Payload.AclPayload,
|
||||||
Id: res.Payload.AclPayloadId,
|
Id: res.Payload.AclPayloadId,
|
||||||
|
@ -299,10 +299,10 @@ func (s *spaceService) spacePullWithPeer(ctx context.Context, p peer.Peer, id st
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *spaceService) createSpaceStorage(payload spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) {
|
func (s *spaceService) createSpaceStorage(ctx context.Context, payload spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) {
|
||||||
err := validateSpaceStorageCreatePayload(payload)
|
err := validateSpaceStorageCreatePayload(payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return s.storageProvider.CreateSpaceStorage(payload)
|
return s.storageProvider.CreateSpaceStorage(ctx, payload)
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ type SpaceStorageProvider interface {
|
||||||
app.Component
|
app.Component
|
||||||
WaitSpaceStorage(ctx context.Context, id string) (SpaceStorage, error)
|
WaitSpaceStorage(ctx context.Context, id string) (SpaceStorage, error)
|
||||||
SpaceExists(id string) bool
|
SpaceExists(id string) bool
|
||||||
CreateSpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error)
|
CreateSpaceStorage(ctx context.Context, payload SpaceStorageCreatePayload) (SpaceStorage, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Create(ctx context.Context, store anystore.DB, payload SpaceStorageCreatePayload) (SpaceStorage, error) {
|
func Create(ctx context.Context, store anystore.DB, payload SpaceStorageCreatePayload) (SpaceStorage, error) {
|
||||||
|
|
|
@ -645,7 +645,7 @@ func newFixture(t *testing.T) *spaceFixture {
|
||||||
configurationService: &mockConf{},
|
configurationService: &mockConf{},
|
||||||
streamOpener: newStreamOpener("spaceId"),
|
streamOpener: newStreamOpener("spaceId"),
|
||||||
peerManagerProvider: &testPeerManagerProvider{},
|
peerManagerProvider: &testPeerManagerProvider{},
|
||||||
storageProvider: spacestorage.NewInMemorySpaceStorageProvider(),
|
storageProvider: &spaceStorageProvider{rootPath: t.TempDir()},
|
||||||
treeManager: newMockTreeManager("spaceId"),
|
treeManager: newMockTreeManager("spaceId"),
|
||||||
pool: &mockPool{},
|
pool: &mockPool{},
|
||||||
spaceService: New(),
|
spaceService: New(),
|
||||||
|
@ -674,7 +674,10 @@ func newFixture(t *testing.T) *spaceFixture {
|
||||||
return fx
|
return fx
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPeerFixture(t *testing.T, spaceId string, keys *accountdata.AccountKeys, peerPool *synctest.PeerGlobalPool, provider *spacestorage.InMemorySpaceStorageProvider) *spaceFixture {
|
func Test(t *testing.T) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPeerFixture(t *testing.T, spaceId string, keys *accountdata.AccountKeys, peerPool *synctest.PeerGlobalPool, provider *spaceStorageProvider) *spaceFixture {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
||||||
fx := &spaceFixture{
|
fx := &spaceFixture{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
|
@ -765,26 +768,31 @@ func newMultiPeerFixture(t *testing.T, peerNum int) *multiPeerFixture {
|
||||||
var (
|
var (
|
||||||
allKeys []*accountdata.AccountKeys
|
allKeys []*accountdata.AccountKeys
|
||||||
allRecords []*consensusproto.RawRecordWithId
|
allRecords []*consensusproto.RawRecordWithId
|
||||||
providers []*spacestorage.InMemorySpaceStorageProvider
|
providers []*spaceStorageProvider
|
||||||
peerIds []string
|
peerIds []string
|
||||||
)
|
)
|
||||||
allRecords, err = executor.ActualAccounts()["0"].Acl.RecordsAfter(context.Background(), "")
|
allRecords, err = executor.ActualAccounts()["0"].Acl.RecordsAfter(context.Background(), "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
ctx := context.Background()
|
||||||
for i := 0; i < peerNum; i++ {
|
for i := 0; i < peerNum; i++ {
|
||||||
allKeys = append(allKeys, executor.ActualAccounts()[fmt.Sprint(i)].Keys)
|
allKeys = append(allKeys, executor.ActualAccounts()[fmt.Sprint(i)].Keys)
|
||||||
peerIds = append(peerIds, executor.ActualAccounts()[fmt.Sprint(i)].Keys.PeerId)
|
peerIds = append(peerIds, executor.ActualAccounts()[fmt.Sprint(i)].Keys.PeerId)
|
||||||
provider := spacestorage.NewInMemorySpaceStorageProvider().(*spacestorage.InMemorySpaceStorageProvider)
|
provider := &spaceStorageProvider{rootPath: t.TempDir()}
|
||||||
providers = append(providers, provider)
|
providers = append(providers, provider)
|
||||||
spaceStore, err := provider.CreateSpaceStorage(createSpace)
|
spaceStore, err := provider.CreateSpaceStorage(ctx, createSpace)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
listStorage, err := spaceStore.AclStorage()
|
listStorage, err := spaceStore.AclStorage()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
for _, rec := range allRecords {
|
for i, rec := range allRecords {
|
||||||
err = listStorage.AddRawRecord(context.Background(), rec)
|
prevRec := ""
|
||||||
|
if i > 0 {
|
||||||
|
prevRec = allRecords[i-1].Id
|
||||||
|
}
|
||||||
|
err := listStorage.AddAll(ctx, []list.StorageRecord{
|
||||||
|
{RawRecord: rec.Payload, Id: rec.Id, PrevId: prevRec, Order: i + 1, ChangeSize: len(rec.Payload)},
|
||||||
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
err = listStorage.SetHead(allRecords[len(allRecords)-1].Id)
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
}
|
||||||
peerPool := synctest.NewPeerGlobalPool(peerIds)
|
peerPool := synctest.NewPeerGlobalPool(peerIds)
|
||||||
peerPool.MakePeers()
|
peerPool.MakePeers()
|
||||||
|
@ -808,9 +816,9 @@ func Test_Sync(t *testing.T) {
|
||||||
for _, fx := range mpFixture.peerFixtures {
|
for _, fx := range mpFixture.peerFixtures {
|
||||||
sp, err := fx.app.MustComponent(RpcName).(*RpcServer).GetSpace(context.Background(), fx.process.spaceId)
|
sp, err := fx.app.MustComponent(RpcName).(*RpcServer).GetSpace(context.Background(), fx.process.spaceId)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
spaceHash, err := sp.Storage().ReadSpaceHash()
|
state, err := sp.Storage().StateStorage().GetState(context.Background())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
hashes = append(hashes, spaceHash)
|
hashes = append(hashes, state.Hash)
|
||||||
}
|
}
|
||||||
for i := 1; i < len(hashes); i++ {
|
for i := 1; i < len(hashes); i++ {
|
||||||
require.Equal(t, hashes[0], hashes[i])
|
require.Equal(t, hashes[0], hashes[i])
|
||||||
|
|
69
commonspace/storageutils_test.go
Normal file
69
commonspace/storageutils_test.go
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
package commonspace
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
|
anystore "github.com/anyproto/any-store"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
"github.com/anyproto/any-sync/app"
|
||||||
|
"github.com/anyproto/any-sync/commonspace/spacestorage"
|
||||||
|
)
|
||||||
|
|
||||||
|
type spaceStorageProvider struct {
|
||||||
|
rootPath string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) Run(ctx context.Context) (err error) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) Close(ctx context.Context) (err error) {
|
||||||
|
return unix.Rmdir(s.rootPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) Init(a *app.App) (err error) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) Name() (name string) {
|
||||||
|
return spacestorage.CName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) WaitSpaceStorage(ctx context.Context, id string) (spacestorage.SpaceStorage, error) {
|
||||||
|
dbPath := path.Join(s.rootPath, id)
|
||||||
|
if _, err := os.Stat(dbPath); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
db, err := anystore.Open(ctx, dbPath, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return spacestorage.New(id, db), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) SpaceExists(id string) bool {
|
||||||
|
if id == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
dbPath := path.Join(s.rootPath, id)
|
||||||
|
if _, err := os.Stat(dbPath); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spaceStorageProvider) CreateSpaceStorage(ctx context.Context, payload spacestorage.SpaceStorageCreatePayload) (spacestorage.SpaceStorage, error) {
|
||||||
|
id := payload.SpaceHeaderWithId.Id
|
||||||
|
if s.SpaceExists(id) {
|
||||||
|
return nil, spacestorage.ErrSpaceStorageExists
|
||||||
|
}
|
||||||
|
dbPath := path.Join(s.rootPath, id)
|
||||||
|
db, err := anystore.Open(ctx, dbPath, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return spacestorage.Create(ctx, db, payload)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue