github.com/status-im/status-go@v1.1.0/protocol/verification/persistence_test.go (about)

     1  package verification
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/suite"
     8  
     9  	"github.com/status-im/status-go/appdatabase"
    10  	"github.com/status-im/status-go/protocol/sqlite"
    11  	"github.com/status-im/status-go/t/helpers"
    12  )
    13  
    14  func TestPersistenceSuite(t *testing.T) {
    15  	suite.Run(t, new(PersistenceSuite))
    16  }
    17  
    18  type PersistenceSuite struct {
    19  	suite.Suite
    20  
    21  	db *Persistence
    22  }
    23  
    24  func (s *PersistenceSuite) SetupTest() {
    25  	db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    26  	s.Require().NoError(err)
    27  	err = sqlite.Migrate(db)
    28  	s.Require().NoError(err)
    29  
    30  	s.db = &Persistence{db: db}
    31  }
    32  
    33  func (s *PersistenceSuite) TestVerificationRequests() {
    34  	request := &Request{
    35  		ID:            "0xabc",
    36  		From:          "0x01",
    37  		To:            "0x02",
    38  		Challenge:     "ABC",
    39  		Response:      "",
    40  		RequestedAt:   uint64(time.Unix(1000, 0).Unix()),
    41  		RepliedAt:     uint64(time.Unix(0, 0).Unix()),
    42  		RequestStatus: RequestStatusPENDING,
    43  	}
    44  
    45  	// Test Insert
    46  	err := s.db.SaveVerificationRequest(request)
    47  	s.Require().NoError(err)
    48  
    49  	// Test Found
    50  	dbRequest, err := s.db.GetVerificationRequest("0xabc")
    51  	s.Require().NoError(err)
    52  	s.Require().Equal(request, dbRequest)
    53  
    54  	// Test Not Found
    55  	dbRequest2, err := s.db.GetVerificationRequest("0xdef")
    56  	s.Require().NoError(err)
    57  	s.Require().Nil(dbRequest2)
    58  
    59  	// Test Accept
    60  	err = s.db.AcceptContactVerificationRequest("0xabc", "XYZ")
    61  	s.Require().NoError(err)
    62  
    63  	dbRequest, err = s.db.GetVerificationRequest("0xabc")
    64  	s.Require().NoError(err)
    65  	s.Require().NotNil(dbRequest)
    66  	s.Require().Equal(RequestStatusACCEPTED, dbRequest.RequestStatus)
    67  	s.Require().Equal("XYZ", dbRequest.Response)
    68  	s.Require().NotEqual(time.Unix(0, 0), dbRequest.RepliedAt)
    69  
    70  	// Test Decline
    71  	request = &Request{
    72  		ID:            "0x01",
    73  		From:          "0x03",
    74  		To:            "0x02",
    75  		Challenge:     "ABC",
    76  		Response:      "",
    77  		RequestedAt:   uint64(time.Unix(1000, 0).Unix()),
    78  		RepliedAt:     uint64(time.Unix(0, 0).Unix()),
    79  		RequestStatus: RequestStatusPENDING,
    80  	}
    81  
    82  	err = s.db.SaveVerificationRequest(request)
    83  	s.NoError(err)
    84  
    85  	err = s.db.DeclineContactVerificationRequest("0x01")
    86  	s.NoError(err)
    87  
    88  	dbRequest, err = s.db.GetVerificationRequest("0x01")
    89  	s.NoError(err)
    90  	s.Equal(RequestStatusDECLINED, dbRequest.RequestStatus)
    91  	s.NotEqual(time.Unix(0, 0), dbRequest.RepliedAt)
    92  
    93  }
    94  
    95  func (s *PersistenceSuite) TestTrustStatus() {
    96  
    97  	err := s.db.SetTrustStatus("0x01", TrustStatusTRUSTED, 1000)
    98  	s.NoError(err)
    99  
   100  	err = s.db.SetTrustStatus("0x02", TrustStatusUNKNOWN, 1001)
   101  	s.NoError(err)
   102  
   103  	trustStatus, err := s.db.GetTrustStatus("0x01")
   104  	s.NoError(err)
   105  	s.Equal(TrustStatusTRUSTED, trustStatus)
   106  
   107  	err = s.db.SetTrustStatus("0x01", TrustStatusUNTRUSTWORTHY, 1000)
   108  	s.NoError(err)
   109  
   110  	trustStatus, err = s.db.GetTrustStatus("0x01")
   111  	s.NoError(err)
   112  	s.Equal(TrustStatusUNTRUSTWORTHY, trustStatus)
   113  
   114  	trustStatus, err = s.db.GetTrustStatus("0x03")
   115  	s.NoError(err)
   116  	s.Equal(TrustStatusUNKNOWN, trustStatus)
   117  
   118  	statuses, err := s.db.GetAllTrustStatus()
   119  	s.NoError(err)
   120  
   121  	s.Len(statuses, 2)
   122  	s.Equal(TrustStatusUNTRUSTWORTHY, statuses["0x01"])
   123  	s.Equal(TrustStatusUNKNOWN, statuses["0x02"])
   124  
   125  	// Upsert
   126  	success, err := s.db.UpsertTrustStatus("0x03", TrustStatusTRUSTED, 1000)
   127  	s.NoError(err)
   128  	s.True(success)
   129  
   130  	trustStatus, err = s.db.GetTrustStatus("0x03")
   131  	s.NoError(err)
   132  	s.Equal(TrustStatusTRUSTED, trustStatus)
   133  
   134  	success, err = s.db.UpsertTrustStatus("0x03", TrustStatusUNKNOWN, 500) // should not be successful without error, because of being older than latest value in the DB
   135  	s.NoError(err)
   136  	s.False(success)
   137  
   138  	trustStatus, err = s.db.GetTrustStatus("0x03")
   139  	s.NoError(err)
   140  	s.Equal(TrustStatusTRUSTED, trustStatus)
   141  
   142  	success, err = s.db.UpsertTrustStatus("0x03", TrustStatusUNKNOWN, 1500)
   143  	s.NoError(err)
   144  	s.False(success)
   145  
   146  	trustStatus, err = s.db.GetTrustStatus("0x03")
   147  	s.NoError(err)
   148  	s.Equal(TrustStatusUNKNOWN, trustStatus)
   149  }