Make database optional (#72)

This commit is contained in:
Adam Babik 2019-09-24 17:36:53 +02:00 committed by GitHub
parent 4492eb9779
commit 3fa3648db9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 7 deletions

View File

@ -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")
}

View File

@ -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