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  }