Create sqlite3 db directory
This commit is contained in:
parent
79fd6a2512
commit
ae89184d76
|
|
@ -1,6 +1,9 @@
|
||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/gotify/server/auth/password"
|
"github.com/gotify/server/auth/password"
|
||||||
"github.com/gotify/server/model"
|
"github.com/gotify/server/model"
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
|
|
@ -11,6 +14,8 @@ import (
|
||||||
|
|
||||||
// New creates a new wrapper for the gorm database framework.
|
// New creates a new wrapper for the gorm database framework.
|
||||||
func New(dialect, connection, defaultUser, defaultPass string, strength int, createDefaultUser bool) (*GormDatabase, error) {
|
func New(dialect, connection, defaultUser, defaultPass string, strength int, createDefaultUser bool) (*GormDatabase, error) {
|
||||||
|
createDirectoryIfSqlite(dialect, connection)
|
||||||
|
|
||||||
db, err := gorm.Open(dialect, connection)
|
db, err := gorm.Open(dialect, connection)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -39,6 +44,16 @@ func New(dialect, connection, defaultUser, defaultPass string, strength int, cre
|
||||||
return &GormDatabase{DB: db}, nil
|
return &GormDatabase{DB: db}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createDirectoryIfSqlite(dialect string, connection string) {
|
||||||
|
if dialect == "sqlite3" {
|
||||||
|
if _, err := os.Stat(filepath.Dir(connection)); os.IsNotExist(err) {
|
||||||
|
if err := os.MkdirAll(filepath.Dir(connection), 0777); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GormDatabase is a wrapper for the gorm framework.
|
// GormDatabase is a wrapper for the gorm framework.
|
||||||
type GormDatabase struct {
|
type GormDatabase struct {
|
||||||
DB *gorm.DB
|
DB *gorm.DB
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,9 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/bouk/monkey"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
)
|
)
|
||||||
|
|
@ -32,3 +35,39 @@ func TestInvalidDialect(t *testing.T) {
|
||||||
_, err := New("asdf", "testdb.db", "defaultUser", "defaultPass", 5, true)
|
_, err := New("asdf", "testdb.db", "defaultUser", "defaultPass", 5, true)
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateSqliteFolder(t *testing.T) {
|
||||||
|
// ensure path not exists
|
||||||
|
os.RemoveAll("somepath")
|
||||||
|
|
||||||
|
db, err := New("sqlite3", "somepath/testdb.db", "defaultUser", "defaultPass", 5, true)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.DirExists(t, "somepath")
|
||||||
|
db.Close()
|
||||||
|
|
||||||
|
assert.Nil(t, os.RemoveAll("somepath"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWithAlreadyExistingSqliteFolder(t *testing.T) {
|
||||||
|
// ensure path not exists
|
||||||
|
os.RemoveAll("somepath")
|
||||||
|
os.MkdirAll("somepath", 0777)
|
||||||
|
|
||||||
|
db, err := New("sqlite3", "somepath/testdb.db", "defaultUser", "defaultPass", 5, true)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.DirExists(t, "somepath")
|
||||||
|
db.Close()
|
||||||
|
|
||||||
|
assert.Nil(t, os.RemoveAll("somepath"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPanicsOnMkdirError(t *testing.T) {
|
||||||
|
patch := monkey.Patch(os.MkdirAll, func(string, os.FileMode) error { return errors.New("whoops") })
|
||||||
|
defer patch.Unpatch()
|
||||||
|
// ensure path not exists
|
||||||
|
os.RemoveAll("somepath")
|
||||||
|
|
||||||
|
assert.Panics(t, func() {
|
||||||
|
New("sqlite3", "somepath/testdb.db", "defaultUser", "defaultPass", 5, true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue