github.com/status-im/status-go@v1.1.0/protocol/common/raw_messages_persistence_test.go (about) 1 package common 2 3 import ( 4 "crypto/ecdsa" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/status-im/status-go/appdatabase" 11 "github.com/status-im/status-go/eth-node/crypto" 12 "github.com/status-im/status-go/protocol/sqlite" 13 "github.com/status-im/status-go/t/helpers" 14 ) 15 16 func TestSaveRawMessage(t *testing.T) { 17 db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) 18 require.NoError(t, err) 19 require.NoError(t, sqlite.Migrate(db)) 20 p := NewRawMessagesPersistence(db) 21 22 pk, err := crypto.GenerateKey() 23 require.NoError(t, err) 24 25 err = p.SaveRawMessage(&RawMessage{ 26 ID: "1", 27 ResendType: ResendTypeRawMessage, 28 LocalChatID: "", 29 CommunityID: []byte("c1"), 30 CommunityKeyExMsgType: KeyExMsgRekey, 31 Sender: pk, 32 ResendMethod: ResendMethodSendPrivate, 33 Recipients: []*ecdsa.PublicKey{pk.Public().(*ecdsa.PublicKey)}, 34 }) 35 require.NoError(t, err) 36 m, err := p.RawMessageByID("1") 37 require.NoError(t, err) 38 require.Equal(t, "1", m.ID) 39 require.Equal(t, ResendTypeRawMessage, m.ResendType) 40 require.Equal(t, KeyExMsgRekey, m.CommunityKeyExMsgType) 41 require.Equal(t, "c1", string(m.CommunityID)) 42 require.Equal(t, pk, m.Sender) 43 require.Equal(t, ResendMethodSendPrivate, m.ResendMethod) 44 require.Equal(t, 1, len(m.Recipients)) 45 } 46 47 func TestUpdateRawMessageSent(t *testing.T) { 48 db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) 49 require.NoError(t, err) 50 require.NoError(t, sqlite.Migrate(db)) 51 p := NewRawMessagesPersistence(db) 52 53 pk, err := crypto.GenerateKey() 54 require.NoError(t, err) 55 56 rawMessageID := "1" 57 err = p.SaveRawMessage(buildRawMessage(rawMessageID, pk)) 58 require.NoError(t, err) 59 60 rawMessage, err := p.RawMessageByID(rawMessageID) 61 require.NoError(t, err) 62 require.True(t, rawMessage.Sent) 63 require.Greater(t, rawMessage.LastSent, uint64(0)) 64 65 err = p.UpdateRawMessageSent(rawMessageID, false) 66 require.NoError(t, err) 67 68 m, err := p.RawMessageByID(rawMessageID) 69 require.NoError(t, err) 70 require.False(t, m.Sent) 71 } 72 73 func TestUpdateRawMessageLastSent(t *testing.T) { 74 db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) 75 require.NoError(t, err) 76 require.NoError(t, sqlite.Migrate(db)) 77 p := NewRawMessagesPersistence(db) 78 79 pk, err := crypto.GenerateKey() 80 require.NoError(t, err) 81 82 rawMessageID := "1" 83 err = p.SaveRawMessage(buildRawMessage(rawMessageID, pk)) 84 require.NoError(t, err) 85 86 rawMessage, err := p.RawMessageByID(rawMessageID) 87 require.NoError(t, err) 88 require.True(t, rawMessage.Sent) 89 require.Greater(t, rawMessage.LastSent, uint64(0)) 90 91 err = p.UpdateRawMessageLastSent(rawMessageID, 0) 92 require.NoError(t, err) 93 94 m, err := p.RawMessageByID(rawMessageID) 95 require.NoError(t, err) 96 require.Equal(t, m.LastSent, uint64(0)) 97 } 98 99 func buildRawMessage(rawMessageID string, pk *ecdsa.PrivateKey) *RawMessage { 100 return &RawMessage{ 101 ID: rawMessageID, 102 ResendType: ResendTypeRawMessage, 103 LocalChatID: "", 104 CommunityID: []byte("c1"), 105 CommunityKeyExMsgType: KeyExMsgRekey, 106 Sender: pk, 107 ResendMethod: ResendMethodSendPrivate, 108 Recipients: []*ecdsa.PublicKey{pk.Public().(*ecdsa.PublicKey)}, 109 Sent: true, 110 LastSent: uint64(time.Now().UnixNano() / int64(time.Millisecond)), 111 } 112 }