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  }