github.com/status-im/status-go@v1.1.0/services/mailservers/api_test.go (about) 1 package mailservers 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/status-im/status-go/appdatabase" 10 "github.com/status-im/status-go/eth-node/types" 11 "github.com/status-im/status-go/protocol/common/shard" 12 "github.com/status-im/status-go/protocol/sqlite" 13 "github.com/status-im/status-go/protocol/transport" 14 "github.com/status-im/status-go/t/helpers" 15 ) 16 17 func setupTestDB(t *testing.T) (*Database, func()) { 18 db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "maliservers-tests-") 19 require.NoError(t, err) 20 err = sqlite.Migrate(db) // migrate default 21 require.NoError(t, err) 22 return NewDB(db), func() { require.NoError(t, cleanup()) } 23 } 24 25 func TestAddGetDeleteMailserver(t *testing.T) { 26 db, close := setupTestDB(t) 27 defer close() 28 api := &API{db: db} 29 testMailserver := Mailserver{ 30 ID: "mailserver001", 31 Name: "My Mailserver", 32 Addr: MustDecodeMultiaddress("/dns4/node-01.do-ams3.waku.test.status.im/tcp/30303/p2p/16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W"), 33 Custom: true, 34 Fleet: "prod", 35 } 36 testMailserverWithPassword := testMailserver 37 testMailserverWithPassword.ID = "mailserver002" 38 testMailserverWithPassword.Password = "test-pass" 39 40 err := api.AddMailserver(context.Background(), testMailserver) 41 require.NoError(t, err) 42 err = api.AddMailserver(context.Background(), testMailserverWithPassword) 43 require.NoError(t, err) 44 45 mailservers, err := api.GetMailservers(context.Background()) 46 require.NoError(t, err) 47 require.EqualValues(t, []Mailserver{testMailserver, testMailserverWithPassword}, mailservers) 48 49 err = api.DeleteMailserver(context.Background(), testMailserver.ID) 50 require.NoError(t, err) 51 // Verify they was deleted. 52 mailservers, err = api.GetMailservers(context.Background()) 53 require.NoError(t, err) 54 require.EqualValues(t, []Mailserver{testMailserverWithPassword}, mailservers) 55 // Delete non-existing mailserver. 56 err = api.DeleteMailserver(context.Background(), "other-id") 57 require.NoError(t, err) 58 } 59 60 func TestTopic(t *testing.T) { 61 db, close := setupTestDB(t) 62 defer close() 63 topicA := "0x61000000" 64 topicD := "0x64000000" 65 topic1 := MailserverTopic{PubsubTopic: shard.DefaultShardPubsubTopic(), ContentTopic: topicA, LastRequest: 1} 66 topic2 := MailserverTopic{PubsubTopic: shard.DefaultShardPubsubTopic(), ContentTopic: "0x6200000", LastRequest: 2} 67 topic3 := MailserverTopic{PubsubTopic: shard.DefaultShardPubsubTopic(), ContentTopic: "0x6300000", LastRequest: 3} 68 69 require.NoError(t, db.AddTopic(topic1)) 70 require.NoError(t, db.AddTopic(topic2)) 71 require.NoError(t, db.AddTopic(topic3)) 72 73 topics, err := db.Topics() 74 require.NoError(t, err) 75 require.Len(t, topics, 3) 76 77 filters := []*transport.Filter{ 78 // Existing topic, is not updated 79 { 80 PubsubTopic: shard.DefaultShardPubsubTopic(), 81 ContentTopic: types.BytesToTopic([]byte{0x61}), 82 }, 83 // Non existing topic is not inserted 84 { 85 Discovery: true, 86 Negotiated: true, 87 PubsubTopic: shard.DefaultShardPubsubTopic(), 88 ContentTopic: types.BytesToTopic([]byte{0x64}), 89 }, 90 } 91 92 require.NoError(t, db.SetTopics(filters)) 93 94 topics, err = db.Topics() 95 require.NoError(t, err) 96 require.Len(t, topics, 2) 97 require.Equal(t, topics[0].ContentTopic, topicA) 98 require.Equal(t, topics[0].LastRequest, 1) 99 100 require.Equal(t, topics[0].ContentTopic, topicA) 101 require.Equal(t, topics[0].LastRequest, 1) 102 103 require.Equal(t, topics[1].ContentTopic, topicD) 104 require.NotEmpty(t, topics[1].LastRequest) 105 require.True(t, topics[1].Negotiated) 106 require.True(t, topics[1].Discovery) 107 } 108 109 func TestAddGetDeleteMailserverRequestGap(t *testing.T) { 110 db, close := setupTestDB(t) 111 defer close() 112 chatID1 := "chat-id-1" 113 chatID2 := "chat-id-2" 114 115 api := &API{db: db} 116 gap1 := MailserverRequestGap{ID: "1", ChatID: chatID1, From: 1, To: 2} 117 gap2 := MailserverRequestGap{ID: "2", ChatID: chatID2, From: 1, To: 2} 118 gap3 := MailserverRequestGap{ID: "3", ChatID: chatID2, From: 1, To: 2} 119 120 gaps := []MailserverRequestGap{ 121 gap1, 122 gap2, 123 gap3, 124 } 125 126 err := api.AddMailserverRequestGaps(context.Background(), gaps) 127 require.NoError(t, err) 128 129 actualGaps, err := api.GetMailserverRequestGaps(context.Background(), chatID1) 130 require.NoError(t, err) 131 require.EqualValues(t, []MailserverRequestGap{gap1}, actualGaps) 132 133 actualGaps, err = api.GetMailserverRequestGaps(context.Background(), chatID2) 134 require.NoError(t, err) 135 require.EqualValues(t, []MailserverRequestGap{gap2, gap3}, actualGaps) 136 137 err = api.DeleteMailserverRequestGaps(context.Background(), []string{gap1.ID, gap2.ID}) 138 require.NoError(t, err) 139 140 // Verify it was deleted. 141 actualGaps, err = api.GetMailserverRequestGaps(context.Background(), chatID1) 142 require.NoError(t, err) 143 require.Len(t, actualGaps, 0) 144 145 actualGaps, err = api.GetMailserverRequestGaps(context.Background(), chatID2) 146 require.NoError(t, err) 147 require.Len(t, actualGaps, 1) 148 149 err = api.DeleteMailserverRequestGapsByChatID(context.Background(), chatID2) 150 require.NoError(t, err) 151 152 // Verify it was deleted. 153 actualGaps, err = api.GetMailserverRequestGaps(context.Background(), chatID2) 154 require.NoError(t, err) 155 require.Len(t, actualGaps, 0) 156 } 157 158 func TestAddGetDeleteMailserverTopics(t *testing.T) { 159 db, close := setupTestDB(t) 160 defer close() 161 api := &API{db: db} 162 testTopic := MailserverTopic{ 163 PubsubTopic: shard.DefaultShardPubsubTopic(), 164 ContentTopic: "topic-001", 165 ChatIDs: []string{"chatID01", "chatID02"}, 166 LastRequest: 10, 167 } 168 err := api.AddMailserverTopic(context.Background(), testTopic) 169 require.NoError(t, err) 170 171 // Verify topics were added. 172 topics, err := api.GetMailserverTopics(context.Background()) 173 require.NoError(t, err) 174 require.EqualValues(t, []MailserverTopic{testTopic}, topics) 175 176 err = api.DeleteMailserverTopic(context.Background(), shard.DefaultShardPubsubTopic(), testTopic.ContentTopic) 177 require.NoError(t, err) 178 topics, err = api.GetMailserverTopics(context.Background()) 179 require.NoError(t, err) 180 require.EqualValues(t, ([]MailserverTopic)(nil), topics) 181 182 // Delete non-existing topic. 183 err = api.DeleteMailserverTopic(context.Background(), shard.DefaultShardPubsubTopic(), "non-existing-topic") 184 require.NoError(t, err) 185 } 186 187 func TestAddGetDeleteChatRequestRanges(t *testing.T) { 188 db, close := setupTestDB(t) 189 defer close() 190 api := &API{db: db} 191 chatRequestRange1 := ChatRequestRange{ 192 ChatID: "chat-id-001", 193 LowestRequestFrom: 123, 194 HighestRequestTo: 456, 195 } 196 chatRequestRange2 := chatRequestRange1 197 chatRequestRange2.ChatID = "chat-id-002" 198 199 err := api.AddChatRequestRange(context.Background(), chatRequestRange1) 200 require.NoError(t, err) 201 err = api.AddChatRequestRange(context.Background(), chatRequestRange2) 202 require.NoError(t, err) 203 204 // Verify topics were added. 205 ranges, err := api.GetChatRequestRanges(context.Background()) 206 require.NoError(t, err) 207 require.EqualValues(t, []ChatRequestRange{chatRequestRange1, chatRequestRange2}, ranges) 208 209 err = api.DeleteChatRequestRange(context.Background(), chatRequestRange1.ChatID) 210 require.NoError(t, err) 211 ranges, err = api.GetChatRequestRanges(context.Background()) 212 require.NoError(t, err) 213 require.EqualValues(t, []ChatRequestRange{chatRequestRange2}, ranges) 214 215 // Delete non-existing topic. 216 err = api.DeleteChatRequestRange(context.Background(), "non-existing-chat-id") 217 require.NoError(t, err) 218 }