Use default database directory

This commit is contained in:
Maksym Pavlenko
2020-02-08 14:35:37 -08:00
committed by Maksym Pavlenko
parent 7f24306898
commit e89c143ad7
5 changed files with 50 additions and 15 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ func main() {
log.WithError(err).Fatal("failed to load configuration file")
}
db, err := storage.NewBadger(opts.ConfigPath)
db, err := storage.NewBadger(&cfg.Database)
if err != nil {
log.WithError(err).Fatal("failed to open database")
}
+14 -2
View File
@@ -2,6 +2,7 @@ package config
import (
"fmt"
"path/filepath"
"time"
"github.com/BurntSushi/toml"
@@ -53,9 +54,16 @@ type Server struct {
DataDir string `toml:"data_dir"`
}
type Database struct {
// Dir is a directory to keep database files
Dir string `toml:"dir"`
}
type Config struct {
// Server is the web server configuration
Server Server `toml:"server"`
// Database configuration
Database Database `toml:"database"`
// Feeds is a list of feeds to host by this app.
// ID will be used as feed ID in http://podsync.net/{FEED_ID}.xml
Feeds map[string]*Feed
@@ -75,7 +83,7 @@ func LoadConfig(path string) (*Config, error) {
feed.ID = id
}
config.applyDefaults()
config.applyDefaults(path)
if err := config.validate(); err != nil {
return nil, err
@@ -104,7 +112,7 @@ func (c *Config) validate() error {
return result.ErrorOrNil()
}
func (c *Config) applyDefaults() {
func (c *Config) applyDefaults(configPath string) {
if c.Server.Hostname == "" {
if c.Server.Port != 0 && c.Server.Port != 80 {
c.Server.Hostname = fmt.Sprintf("http://localhost:%d", c.Server.Port)
@@ -113,6 +121,10 @@ func (c *Config) applyDefaults() {
}
}
if c.Database.Dir == "" {
c.Database.Dir = filepath.Join(filepath.Dir(configPath), "db")
}
for _, feed := range c.Feeds {
if feed.UpdatePeriod.Duration == 0 {
feed.UpdatePeriod.Duration = model.DefaultUpdatePeriod
+14 -3
View File
@@ -22,6 +22,9 @@ vimeo = "321"
port = 80
data_dir = "test/data/"
[database]
dir = "/home/user/db/"
[feeds]
[feeds.XYZ]
url = "https://youtube.com/watch?v=ygIUF678y40"
@@ -46,6 +49,8 @@ data_dir = "test/data/"
assert.Equal(t, "test/data/", config.Server.DataDir)
assert.EqualValues(t, 80, config.Server.Port)
assert.Equal(t, "/home/user/db/", config.Database.Dir)
assert.Equal(t, "123", config.Tokens.YouTube)
assert.Equal(t, "321", config.Tokens.Vimeo)
@@ -96,21 +101,27 @@ func TestDefaultHostname(t *testing.T) {
}
t.Run("empty hostname", func(t *testing.T) {
cfg.applyDefaults()
cfg.applyDefaults("")
assert.Equal(t, "http://localhost", cfg.Server.Hostname)
})
t.Run("empty hostname with port", func(t *testing.T) {
cfg.Server.Hostname = ""
cfg.Server.Port = 7979
cfg.applyDefaults()
cfg.applyDefaults("")
assert.Equal(t, "http://localhost:7979", cfg.Server.Hostname)
})
t.Run("skip overwrite", func(t *testing.T) {
cfg.Server.Hostname = "https://my.host:4443"
cfg.Server.Port = 80
cfg.applyDefaults()
cfg.applyDefaults("")
assert.Equal(t, "https://my.host:4443", cfg.Server.Hostname)
})
}
func TestDefaultDatabasePath(t *testing.T) {
cfg := Config{}
cfg.applyDefaults("/home/user/podsync/config.toml")
assert.Equal(t, "/home/user/podsync/db", cfg.Database.Dir)
}
+12 -1
View File
@@ -4,11 +4,13 @@ import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/dgraph-io/badger"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"github.com/mxpv/podsync/pkg/config"
"github.com/mxpv/podsync/pkg/model"
)
@@ -28,9 +30,18 @@ type Badger struct {
var _ Storage = (*Badger)(nil)
func NewBadger(dir string) (*Badger, error) {
func NewBadger(config *config.Database) (*Badger, error) {
var (
dir = config.Dir
)
log.Infof("opening database %q", dir)
// Make sure database directory exists
if err := os.MkdirAll(dir, 0755); err != nil {
return nil, errors.Wrap(err, "could not mkdir database dir")
}
opts := badger.DefaultOptions(dir)
opts.Logger = log.New()
+9 -8
View File
@@ -10,6 +10,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/mxpv/podsync/pkg/config"
"github.com/mxpv/podsync/pkg/link"
"github.com/mxpv/podsync/pkg/model"
)
@@ -20,7 +21,7 @@ func TestNewBadger(t *testing.T) {
dir, err := ioutil.TempDir("", "podsync-badger-")
require.NoError(t, err)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
err = db.Close()
@@ -35,7 +36,7 @@ func TestBadger_Version(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -49,7 +50,7 @@ func TestBadger_AddFeed(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -62,7 +63,7 @@ func TestBadger_GetFeed(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -82,7 +83,7 @@ func TestBadger_WalkFeeds(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -108,7 +109,7 @@ func TestBadger_DeleteFeed(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -141,7 +142,7 @@ func TestBadger_WalkFiles(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()
@@ -170,7 +171,7 @@ func TestBadger_UpdateFile(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
db, err := NewBadger(dir)
db, err := NewBadger(&config.Database{Dir: dir})
require.NoError(t, err)
defer db.Close()