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 }