diff --git a/protocol/messenger_backup_test.go b/protocol/messenger_backup_test.go index c88abd3b3..faa630b9a 100644 --- a/protocol/messenger_backup_test.go +++ b/protocol/messenger_backup_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/status-im/status-go/protocol/identity" + "github.com/status-im/status-go/protocol/wakusync" "github.com/stretchr/testify/suite" @@ -388,13 +389,13 @@ func (s *MessengerBackupSuite) TestBackupSettings() { s.Require().NoError(err) // Wait for the message to reach its destination - _, err = WaitOnMessengerResponse( - bob2, - func(r *MessengerResponse) bool { - return r.BackupHandled - }, - "no messages", - ) + _, err = WaitOnSignaledSendWakuFetchingBackupProgress(bob2, func(r *wakusync.WakuBackedUpDataResponse) bool { + detailsMap := r.FetchingBackedUpDataDetails() + if settingDetails, ok := detailsMap[SyncWakuSectionKeySettings]; ok { + return settingDetails.DataNumber == settingDetails.TotalNumber + } + return false + }, "no messages") s.Require().NoError(err) // Check bob2 diff --git a/protocol/messenger_testing_utils.go b/protocol/messenger_testing_utils.go index 7c04b86eb..7ad0f782c 100644 --- a/protocol/messenger_testing_utils.go +++ b/protocol/messenger_testing_utils.go @@ -9,6 +9,8 @@ import ( "sync" "time" + "github.com/status-im/status-go/protocol/wakusync" + "github.com/status-im/status-go/protocol/identity" "github.com/status-im/status-go/eth-node/types" @@ -52,8 +54,18 @@ func WaitOnMessengerResponse(m *Messenger, condition func(*MessengerResponse) bo type MessengerSignalsHandlerMock struct { MessengerSignalsHandler - responseChan chan *MessengerResponse - communityFoundChan chan *communities.Community + responseChan chan *MessengerResponse + communityFoundChan chan *communities.Community + wakuBackedUpDataResponseChan chan *wakusync.WakuBackedUpDataResponse +} + +func (m *MessengerSignalsHandlerMock) SendWakuFetchingBackupProgress(response *wakusync.WakuBackedUpDataResponse) { + m.wakuBackedUpDataResponseChan <- response +} +func (m *MessengerSignalsHandlerMock) SendWakuBackedUpProfile(*wakusync.WakuBackedUpDataResponse) {} +func (m *MessengerSignalsHandlerMock) SendWakuBackedUpSettings(*wakusync.WakuBackedUpDataResponse) {} +func (m *MessengerSignalsHandlerMock) SendWakuBackedUpKeypair(*wakusync.WakuBackedUpDataResponse) {} +func (m *MessengerSignalsHandlerMock) SendWakuBackedUpWatchOnlyAccount(*wakusync.WakuBackedUpDataResponse) { } func (m *MessengerSignalsHandlerMock) MessengerResponse(response *MessengerResponse) { @@ -73,6 +85,42 @@ func (m *MessengerSignalsHandlerMock) CommunityInfoFound(community *communities. } } +func WaitOnSignaledSendWakuFetchingBackupProgress(m *Messenger, condition func(*wakusync.WakuBackedUpDataResponse) bool, errorMessage string) (*wakusync.WakuBackedUpDataResponse, error) { + interval := 500 * time.Millisecond + timeoutChan := time.After(10 * time.Second) + + if m.config.messengerSignalsHandler != nil { + return nil, errors.New("messengerSignalsHandler already provided/mocked") + } + + responseChan := make(chan *wakusync.WakuBackedUpDataResponse, 1000) + m.config.messengerSignalsHandler = &MessengerSignalsHandlerMock{ + wakuBackedUpDataResponseChan: responseChan, + } + + defer func() { + m.config.messengerSignalsHandler = nil + }() + + for { + _, err := m.RetrieveAll() + if err != nil { + return nil, err + } + + select { + case r := <-responseChan: + if condition(r) { + return r, nil + } + case <-timeoutChan: + return nil, errors.New("timed out: " + errorMessage) + default: // No immediate response, rest & loop back to retrieve again + time.Sleep(interval) + } + } +} + func WaitOnSignaledMessengerResponse(m *Messenger, condition func(*MessengerResponse) bool, errorMessage string) (*MessengerResponse, error) { interval := 500 * time.Millisecond timeoutChan := time.After(10 * time.Second)