github.com/status-im/status-go@v1.1.0/protocol/messenger_sync_verification_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 "time" 8 9 "github.com/status-im/status-go/protocol/encryption/multidevice" 10 "github.com/status-im/status-go/protocol/tt" 11 "github.com/status-im/status-go/protocol/verification" 12 13 "github.com/stretchr/testify/suite" 14 ) 15 16 func TestMessengerSyncVerificationRequests(t *testing.T) { 17 suite.Run(t, new(MessengerSyncVerificationRequests)) 18 } 19 20 type MessengerSyncVerificationRequests struct { 21 MessengerBaseTestSuite 22 } 23 24 func (s *MessengerSyncVerificationRequests) TestSyncVerificationRequests() { 25 request := &verification.Request{ 26 From: "0x01", 27 To: "0x02", 28 Challenge: "ABC", 29 Response: "ABC", 30 RequestedAt: uint64(time.Now().Unix()), 31 RepliedAt: uint64(time.Now().Unix()), 32 RequestStatus: verification.RequestStatusACCEPTED, 33 } 34 err := s.m.verificationDatabase.SaveVerificationRequest(request) 35 s.Require().NoError(err) 36 37 // pair 38 theirMessenger, err := newMessengerWithKey(s.shh, s.privateKey, s.logger, nil) 39 s.Require().NoError(err) 40 41 err = theirMessenger.SetInstallationMetadata(theirMessenger.installationID, &multidevice.InstallationMetadata{ 42 Name: "their-name", 43 DeviceType: "their-device-type", 44 }) 45 s.Require().NoError(err) 46 response, err := theirMessenger.SendPairInstallation(context.Background(), nil) 47 s.Require().NoError(err) 48 s.Require().NotNil(response) 49 s.Require().Len(response.Chats(), 1) 50 s.Require().False(response.Chats()[0].Active) 51 52 // Wait for the message to reach its destination 53 response, err = WaitOnMessengerResponse( 54 s.m, 55 func(r *MessengerResponse) bool { return len(r.Installations()) > 0 }, 56 "installation not received", 57 ) 58 59 s.Require().NoError(err) 60 actualInstallation := response.Installations()[0] 61 s.Require().Equal(theirMessenger.installationID, actualInstallation.ID) 62 s.Require().NotNil(actualInstallation.InstallationMetadata) 63 s.Require().Equal("their-name", actualInstallation.InstallationMetadata.Name) 64 s.Require().Equal("their-device-type", actualInstallation.InstallationMetadata.DeviceType) 65 66 err = s.m.EnableInstallation(theirMessenger.installationID) 67 s.Require().NoError(err) 68 69 // sync 70 err = s.m.SyncVerificationRequest(context.Background(), request, s.m.dispatchMessage) 71 s.Require().NoError(err) 72 73 // Wait for the message to reach its destination 74 err = tt.RetryWithBackOff(func() error { 75 response, err = theirMessenger.RetrieveAll() 76 if err != nil { 77 return err 78 } 79 80 if len(response.VerificationRequests()) == 1 { 81 return nil 82 } 83 return errors.New("Not received all verification requests") 84 }) 85 86 s.Require().NoError(err) 87 88 time.Sleep(4 * time.Second) 89 90 requests, err := theirMessenger.verificationDatabase.GetVerificationRequests() 91 s.Require().NoError(err) 92 s.Require().Len(requests, 1) 93 94 s.Require().NoError(theirMessenger.Shutdown()) 95 } 96 97 func (s *MessengerSyncVerificationRequests) TestSyncTrust() { 98 err := s.m.verificationDatabase.SetTrustStatus("0x01", verification.TrustStatusTRUSTED, 123) 99 s.Require().NoError(err) 100 101 // pair 102 theirMessenger, err := newMessengerWithKey(s.shh, s.privateKey, s.logger, nil) 103 s.Require().NoError(err) 104 105 err = theirMessenger.SetInstallationMetadata(theirMessenger.installationID, &multidevice.InstallationMetadata{ 106 Name: "their-name", 107 DeviceType: "their-device-type", 108 }) 109 s.Require().NoError(err) 110 response, err := theirMessenger.SendPairInstallation(context.Background(), nil) 111 s.Require().NoError(err) 112 s.Require().NotNil(response) 113 s.Require().Len(response.Chats(), 1) 114 s.Require().False(response.Chats()[0].Active) 115 116 // Wait for the message to reach its destination 117 response, err = WaitOnMessengerResponse( 118 s.m, 119 func(r *MessengerResponse) bool { return len(r.Installations()) > 0 }, 120 "installation not received", 121 ) 122 123 s.Require().NoError(err) 124 actualInstallation := response.Installations()[0] 125 s.Require().Equal(theirMessenger.installationID, actualInstallation.ID) 126 s.Require().NotNil(actualInstallation.InstallationMetadata) 127 s.Require().Equal("their-name", actualInstallation.InstallationMetadata.Name) 128 s.Require().Equal("their-device-type", actualInstallation.InstallationMetadata.DeviceType) 129 130 err = s.m.EnableInstallation(theirMessenger.installationID) 131 s.Require().NoError(err) 132 133 // sync 134 err = s.m.SyncTrustedUser(context.Background(), "0x01", verification.TrustStatusTRUSTED, s.m.dispatchMessage) 135 s.Require().NoError(err) 136 137 // Wait for the message to reach its destination 138 err = tt.RetryWithBackOff(func() error { 139 response, err = theirMessenger.RetrieveAll() 140 if err != nil { 141 return err 142 } 143 144 if response.TrustStatus() != nil { 145 return nil 146 } 147 148 return errors.New("Not received all user trust levels") 149 }) 150 151 s.Require().NoError(err) 152 153 trustLevel, err := theirMessenger.verificationDatabase.GetTrustStatus("0x01") 154 s.Require().NoError(err) 155 s.Require().Equal(verification.TrustStatusTRUSTED, trustLevel) 156 157 s.Require().NoError(theirMessenger.Shutdown()) 158 }