diff --git a/bindings/collective_test.go b/bindings/collective_test.go index 1404c0cc34f446a33f3192ffb1f91d518b04c390..bfe136fa546da94d17f56cce7c879ce2ece94510 100644 --- a/bindings/collective_test.go +++ b/bindings/collective_test.go @@ -12,7 +12,11 @@ import ( "encoding/json" "fmt" "math/rand" + "sync" "testing" + + "github.com/stretchr/testify/require" + "gitlab.com/xx_network/primitives/netTime" ) const ( @@ -196,32 +200,52 @@ func TestGetChannelInfo(t *testing.T) { // return txLog // } -// type mockRemote struct { -// lck sync.Mutex -// data map[string][]byte -// } +type mockRemote struct { + lck sync.Mutex + data map[string][]byte + t *testing.T +} -// func (m *mockRemote) Read(path string) ([]byte, error) { -// m.lck.Lock() -// defer m.lck.Unlock() -// return m.data[path], nil -// } +func (m *mockRemote) Read(path string) ([]byte, error) { + m.lck.Lock() + defer m.lck.Unlock() + return m.data[path], nil +} -// func (m *mockRemote) Write(path string, data []byte) error { -// m.lck.Lock() -// defer m.lck.Unlock() -// m.data[path] = append(m.data[path], data...) -// return nil -// } +func (m *mockRemote) Write(path string, data []byte) error { + m.lck.Lock() + defer m.lck.Unlock() + m.data[path] = append(m.data[path], data...) + return nil +} -// func (m *mockRemote) ReadDir(path string) ([]string, error) { -// panic("unimplemented") -// } +func (m *mockRemote) ReadDir(path string) ([]byte, error) { + dirs := []string{ + "hello", + "these", + "are", + "directory", + "names", + } -// func (m mockRemote) GetLastModified(path string) (time.Time, error) { -// return netTime.Now(), nil -// } + data, err := json.Marshal(dirs) + m.t.Logf("Data: %s", data) + return data, err +} -// func (m mockRemote) GetLastWrite() (time.Time, error) { -// return netTime.Now(), nil -// } +func (m *mockRemote) GetLastModified(path string) ([]byte, error) { + return netTime.Now().MarshalBinary() +} + +func (m *mockRemote) GetLastWrite() ([]byte, error) { + return netTime.Now().MarshalBinary() +} + +func TestReadDir(t *testing.T) { + mRemote := newRemoteStoreFileSystemWrapper( + &mockRemote{t: t, data: make(map[string][]byte)}) + + dirs, err := mRemote.ReadDir("test") + require.NoError(t, err) + t.Logf("%+v", dirs) +} diff --git a/storage/regStatus.go b/storage/regStatus.go index 49a506c62095e721c76a86b36b8e872136a0df68..1e458a580c24b37d7f3d37a3e215e8507e630b43 100644 --- a/storage/regStatus.go +++ b/storage/regStatus.go @@ -10,6 +10,7 @@ package storage import ( "encoding/binary" "fmt" + "github.com/pkg/errors" "gitlab.com/elixxir/client/v4/storage/versioned" "gitlab.com/xx_network/primitives/netTime" @@ -67,7 +68,7 @@ func (s *session) newRegStatus() error { Data: s.regStatus.marshalBinary(), } - err := s.Set(registrationStatusKey, &obj) + err := s.syncKV.Set(registrationStatusKey, &obj) if err != nil { return errors.WithMessagef(err, "Failed to store new "+ "registration status") @@ -78,7 +79,7 @@ func (s *session) newRegStatus() error { // loads registration status from disk. func (s *session) loadRegStatus() error { - obj, err := s.Get(registrationStatusKey) + obj, err := s.syncKV.Get(registrationStatusKey, currentSessionVersion) if err != nil { return errors.WithMessage(err, "Failed to load registration status") } @@ -105,8 +106,7 @@ func (s *session) ForwardRegistrationStatus(regStatus RegistrationStatus) error Timestamp: now, Data: regStatus.marshalBinary(), } - - err := s.Set(registrationStatusKey, &obj) + err := s.syncKV.Set(registrationStatusKey, &obj) if err != nil { return errors.WithMessagef(err, "Failed to store registration status") } diff --git a/storage/session.go b/storage/session.go index 3197c82223b34c85cdd327a0ff43d919a210102a..86dbad9617f5f975f690b0d62e3c88d09f4937b9 100644 --- a/storage/session.go +++ b/storage/session.go @@ -17,6 +17,7 @@ import ( "gitlab.com/elixxir/crypto/diffieHellman" + "gitlab.com/elixxir/client/v4/collective" "gitlab.com/elixxir/client/v4/storage/utility" "gitlab.com/xx_network/crypto/large" @@ -74,7 +75,8 @@ type Session interface { } type session struct { - kv versioned.KV + kv versioned.KV + syncKV versioned.KV // memoized data mux sync.RWMutex @@ -95,11 +97,17 @@ func New(storage versioned.KV, u user.Info, currentVersion version.Version, cmixGrp, e2eGrp *cyclic.Group) (Session, error) { + remote, err := storage.Prefix(collective.StandardRemoteSyncPrefix) + if err != nil { + return nil, errors.Wrapf(err, "create new session") + } + s := &session{ - kv: storage, + kv: storage, + syncKV: remote, } - err := s.newRegStatus() + err = s.newRegStatus() if err != nil { return nil, errors.WithMessage(err, "Create new session") @@ -114,12 +122,15 @@ func New(storage versioned.KV, u user.Info, } s.clientVersion, err = clientVersion.NewStore(currentVersion, s.kv) + if err != nil { + return nil, err + } - if err = utility.StoreGroup(s.kv, cmixGrp, cmixGroupKey); err != nil { + if err = utility.StoreGroup(s.syncKV, cmixGrp, cmixGroupKey); err != nil { return nil, err } - if err = utility.StoreGroup(s.kv, e2eGrp, e2eGroupKey); err != nil { + if err = utility.StoreGroup(s.syncKV, e2eGrp, e2eGroupKey); err != nil { return nil, err } @@ -132,11 +143,17 @@ func New(storage versioned.KV, u user.Info, func Load(storage versioned.KV, currentVersion version.Version) (Session, error) { + remote, err := storage.Prefix(collective.StandardRemoteSyncPrefix) + if err != nil { + return nil, errors.Wrapf(err, "create new session") + } + s := &session{ - kv: storage, + kv: storage, + syncKV: remote, } - err := s.loadRegStatus() + err = s.loadRegStatus() if err != nil { if !ekv.Exists(err) { return nil, errors.Errorf( @@ -163,12 +180,12 @@ func Load(storage versioned.KV, return nil, errors.WithMessage(err, "Failed to load Session") } - s.cmixGroup, err = utility.LoadGroup(s.kv, cmixGroupKey) + s.cmixGroup, err = utility.LoadGroup(s.syncKV, cmixGroupKey) if err != nil { return nil, errors.WithMessage(err, "Failed to load Session") } - s.e2eGroup, err = utility.LoadGroup(s.kv, e2eGroupKey) + s.e2eGroup, err = utility.LoadGroup(s.syncKV, e2eGroupKey) if err != nil { return nil, errors.WithMessage(err, "Failed to load Session") } diff --git a/storage/user/user.go b/storage/user/user.go index 39bbcd6cc311462280943f8a9d886ca74c5424ed..d647b49beed02c5044824b414c026f707bea8ec7 100644 --- a/storage/user/user.go +++ b/storage/user/user.go @@ -8,11 +8,11 @@ package user import ( - "gitlab.com/elixxir/client/v4/collective" "sync" "time" "github.com/pkg/errors" + "gitlab.com/elixxir/client/v4/collective" "gitlab.com/elixxir/client/v4/storage/versioned" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/rsa" @@ -44,8 +44,10 @@ func NewUser(kv versioned.KV, transmissionID, receptionID *id.ID, transmissionSa return nil, err } - ci := newCryptographicIdentity(transmissionID, receptionID, transmissionSalt, - receptionSalt, transmissionRsa, receptionRsa, isPrecanned, e2eDhPrivateKey, e2eDhPublicKey, remote) + ci := newCryptographicIdentity(transmissionID, receptionID, + transmissionSalt, receptionSalt, transmissionRsa, + receptionRsa, isPrecanned, + e2eDhPrivateKey, e2eDhPublicKey, remote) return &User{CryptographicIdentity: ci, kv: remote}, nil }