diff --git a/messenger.go b/messenger.go index 8d4196a..5c85403 100644 --- a/messenger.go +++ b/messenger.go @@ -230,22 +230,25 @@ func NewMessenger( } } + var err error + // Configure the database. database := c.db - if c.db == nil && c.dbConfig == (dbConfig{}) { - return nil, errors.New("database instance or database path needs to be provided") - } - if c.db == nil { + if database == nil && c.dbConfig != (dbConfig{}) { logger.Info("opening a database", zap.String("dbPath", c.dbConfig.dbPath)) - var err error database, err = sqlite.Open(c.dbConfig.dbPath, c.dbConfig.dbKey) if err != nil { return nil, errors.Wrap(err, "failed to initialize database from the db config") } + } else { + logger.Info("using in-memory database") + database, err = sqlite.Open(":memory:", "") + if err != nil { + return nil, errors.Wrap(err, "failed to initialize in-memory database") + } } - // Apply migrations for all components. - err := sqlite.Migrate(database) + err = sqlite.Migrate(database) if err != nil { return nil, errors.Wrap(err, "failed to apply migrations") } diff --git a/messenger_test.go b/messenger_test.go index aa94815..313a333 100644 --- a/messenger_test.go +++ b/messenger_test.go @@ -100,6 +100,28 @@ func (s *MessengerSuite) TearDownTest() { _ = s.logger.Sync() } +func (s *MessengerSuite) TestInMemoryDatabase() { + key, err := crypto.GenerateKey() + s.Require().NoError(err) + m, err := NewMessenger( + key, + s.shh, + "installation-1", + ) + s.Require().NoError(err) + // Verify the in-memory database works. + err = m.persistence.SaveChat(Chat{ + ID: "abc", + Name: "abc", + Active: true, + ChatType: ChatTypePublic, + }) + s.Require().NoError(err) + result, err := m.persistence.Chats() + s.Require().NoError(err) + s.Require().Len(result, 1) +} + func (s *MessengerSuite) TestInit() { testCases := []struct { Name string