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

     1  package pushnotificationserver
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/golang/protobuf/proto"
     7  	"github.com/stretchr/testify/suite"
     8  
     9  	"github.com/status-im/status-go/appdatabase"
    10  	"github.com/status-im/status-go/eth-node/crypto"
    11  	"github.com/status-im/status-go/protocol/common"
    12  	"github.com/status-im/status-go/protocol/protobuf"
    13  	"github.com/status-im/status-go/protocol/sqlite"
    14  	"github.com/status-im/status-go/t/helpers"
    15  )
    16  
    17  func TestSQLitePersistenceSuite(t *testing.T) {
    18  	suite.Run(t, new(SQLitePersistenceSuite))
    19  }
    20  
    21  type SQLitePersistenceSuite struct {
    22  	suite.Suite
    23  	persistence Persistence
    24  }
    25  
    26  func (s *SQLitePersistenceSuite) SetupTest() {
    27  	db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    28  	s.Require().NoError(err)
    29  	err = sqlite.Migrate(db)
    30  	s.Require().NoError(err)
    31  
    32  	s.persistence = NewSQLitePersistence(db)
    33  }
    34  
    35  func (s *SQLitePersistenceSuite) TestSaveAndRetrieve() {
    36  	key, err := crypto.GenerateKey()
    37  	s.Require().NoError(err)
    38  	installationID := "54242d02-bb92-11ea-b3de-0242ac130004"
    39  
    40  	registration := &protobuf.PushNotificationRegistration{
    41  		InstallationId: installationID,
    42  		Version:        5,
    43  	}
    44  
    45  	s.Require().NoError(s.persistence.SavePushNotificationRegistration(common.HashPublicKey(&key.PublicKey), registration))
    46  
    47  	retrievedRegistration, err := s.persistence.GetPushNotificationRegistrationByPublicKeyAndInstallationID(common.HashPublicKey(&key.PublicKey), installationID)
    48  	s.Require().NoError(err)
    49  
    50  	s.Require().True(proto.Equal(registration, retrievedRegistration))
    51  }
    52  
    53  func (s *SQLitePersistenceSuite) TestSaveAndRetrieveIdentity() {
    54  	retrievedKey, err := s.persistence.GetIdentity()
    55  	s.Require().NoError(err)
    56  	s.Require().Nil(retrievedKey)
    57  
    58  	key, err := crypto.GenerateKey()
    59  	s.Require().NoError(err)
    60  	s.Require().NoError(s.persistence.SaveIdentity(key))
    61  
    62  	retrievedKey, err = s.persistence.GetIdentity()
    63  	s.Require().NoError(err)
    64  
    65  	s.Require().Equal(key, retrievedKey)
    66  }
    67  
    68  func (s *SQLitePersistenceSuite) TestSaveDifferentIdenities() {
    69  	key1, err := crypto.GenerateKey()
    70  	s.Require().NoError(err)
    71  	key2, err := crypto.GenerateKey()
    72  	s.Require().NoError(err)
    73  
    74  	// First one should be successul, second should fail
    75  	s.Require().NoError(s.persistence.SaveIdentity(key1))
    76  	s.Require().Error(s.persistence.SaveIdentity(key2))
    77  }
    78  
    79  func (s *SQLitePersistenceSuite) TestExists() {
    80  	messageID1 := []byte("1")
    81  	messageID2 := []byte("2")
    82  
    83  	result, err := s.persistence.PushNotificationExists(messageID1)
    84  	s.Require().NoError(err)
    85  	s.Require().False(result)
    86  
    87  	result, err = s.persistence.PushNotificationExists(messageID1)
    88  	s.Require().NoError(err)
    89  
    90  	s.Require()
    91  	s.Require().True(result)
    92  
    93  	result, err = s.persistence.PushNotificationExists(messageID2)
    94  	s.Require().NoError(err)
    95  	s.Require().False(result)
    96  }