mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 22:26:30 +00:00
f04a9a8726
* feat(sync)!: remove compatibility with v2.29 * feat(sync)_: add AC notifications when initiating the sync fallback Needed for https://github.com/status-im/status-desktop/issues/15750 Adds an AC notification when the syncing fails and the user is prompted to use a seed phrase instead. There is one notification for the initiator (created) and one for the old account (received). Once the flow is completed, ie the receiver presses Enable and sync, the notifications are deleted * test_: update test * fix_: lint issue * chore_: ignore tmp file generated by make lint-fix * chore_: rename EnableAndSyncInstallation to EnableInstallationAndSync * chore_: address review feedback * chore_: revert changes to .gitignore * fix_: simplify code * fix_: keep old API --------- Co-authored-by: Jonathan Rainville <rainville.jonathan@gmail.com>
124 lines
3.8 KiB
Go
124 lines
3.8 KiB
Go
package protocol
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"github.com/status-im/status-go/multiaccounts/accounts"
|
|
"github.com/status-im/status-go/multiaccounts/settings"
|
|
"github.com/status-im/status-go/protocol/encryption/multidevice"
|
|
"github.com/status-im/status-go/protocol/requests"
|
|
"github.com/status-im/status-go/protocol/tt"
|
|
)
|
|
|
|
func TestMessengerPairingTest(t *testing.T) {
|
|
suite.Run(t, new(MessengerPairingSuite))
|
|
}
|
|
|
|
type MessengerPairingSuite struct {
|
|
MessengerBaseTestSuite
|
|
}
|
|
|
|
func (s *MessengerPairingSuite) TestEnableNonExistingInstallation() {
|
|
installationID := uuid.New().String()
|
|
_, err := s.m.EnableInstallationAndPair(&requests.EnableInstallationAndPair{InstallationID: installationID})
|
|
s.Require().NoError(err)
|
|
|
|
installations := s.m.Installations()
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().Len(installations, 2)
|
|
var theirInstallation *multidevice.Installation
|
|
for _, i := range installations {
|
|
if i.ID == installationID {
|
|
theirInstallation = i
|
|
break
|
|
} else {
|
|
s.Require().NotNil(i.InstallationMetadata)
|
|
}
|
|
}
|
|
s.Require().NotNil(theirInstallation)
|
|
s.Require().True(theirInstallation.Enabled)
|
|
|
|
installationsFromDB, err := s.m.encryptor.GetOurActiveInstallations(&s.m.identity.PublicKey)
|
|
s.Require().NoError(err)
|
|
s.Require().Len(installationsFromDB, 2)
|
|
for _, i := range installationsFromDB {
|
|
s.Require().True(i.Enabled)
|
|
if i.ID == installationID {
|
|
theirInstallation = i
|
|
break
|
|
}
|
|
}
|
|
s.Require().NotNil(theirInstallation)
|
|
s.Require().True(theirInstallation.Enabled)
|
|
|
|
}
|
|
|
|
// TestMessengerPairAfterSeedPhrase tests the scenario where alice2 wants to sync with alice1
|
|
// alice1 generated the connection string for bootstraping alice2
|
|
// alice2 failed to connect to alice1 and restored from seed phrase
|
|
// alice2 get the installationID1 from alice1 via parsing the connection string
|
|
// alice2 should get the display name from alice1 after pairing
|
|
func (s *MessengerPairingSuite) TestMessengerPairAfterSeedPhrase() {
|
|
alice1 := s.m
|
|
alice2, err := newMessengerWithKey(s.shh, s.privateKey, s.logger, nil)
|
|
s.Require().NoError(err)
|
|
defer TearDownMessenger(&s.Suite, alice2)
|
|
|
|
alice1ProfileKp := accounts.GetProfileKeypairForTest(true, false, false)
|
|
alice1ProfileKp.KeyUID = alice1.account.KeyUID
|
|
alice1ProfileKp.Accounts[0].KeyUID = alice1.account.KeyUID
|
|
err = alice1.settings.SaveOrUpdateKeypair(alice1ProfileKp)
|
|
s.Require().NoError(err)
|
|
|
|
expectedDisplayName := "alice1"
|
|
s.Require().NoError(alice1.SetDisplayName(expectedDisplayName))
|
|
ss, err := alice2.getSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().NotEqual(expectedDisplayName, ss.DisplayName)
|
|
installationID1 := alice1.installationID
|
|
installationID2 := alice2.installationID
|
|
s.Require().NotEqual(installationID1, installationID2)
|
|
|
|
_, err = alice2.EnableInstallationAndPair(&requests.EnableInstallationAndPair{InstallationID: installationID1})
|
|
s.Require().NoError(err)
|
|
|
|
// alice1 should get the installationID1 from alice2
|
|
_, err = WaitOnMessengerResponse(
|
|
alice1,
|
|
func(r *MessengerResponse) bool {
|
|
for _, i := range r.Installations() {
|
|
if i.ID == installationID2 {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
},
|
|
"no messages",
|
|
)
|
|
s.Require().NoError(err)
|
|
|
|
_, err = alice1.EnableInstallationAndSync(&requests.EnableInstallationAndSync{InstallationID: installationID2})
|
|
s.Require().NoError(err)
|
|
|
|
// check if the display name is synced
|
|
err = tt.RetryWithBackOff(func() error {
|
|
r, err := alice2.RetrieveAll()
|
|
s.Require().NoError(err)
|
|
for _, ss := range r.Settings {
|
|
if ss.GetDBName() == settings.DisplayName.GetDBName() {
|
|
return nil
|
|
}
|
|
}
|
|
return errors.New("display name setting not received yet")
|
|
})
|
|
s.Require().NoError(err)
|
|
ss, err = alice2.getSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(expectedDisplayName, ss.DisplayName)
|
|
}
|