103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFileDocDatabaseManagement(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "broker.yaml")
|
|
require.NoError(t, os.WriteFile(path, []byte(`broker:
|
|
name: test
|
|
# keep this comment
|
|
databases:
|
|
- name: primary
|
|
host: db.example
|
|
port: 5433
|
|
database: jobs
|
|
user: broker
|
|
password: secret
|
|
sslmode: verify-full
|
|
max_open_conns: 12
|
|
max_idle_conns: 4
|
|
conn_max_lifetime: 2m
|
|
conn_max_idle_time: 30s
|
|
queue_count: 3
|
|
tenant_id: tenant-a
|
|
auto_migrate: true
|
|
`), 0o600))
|
|
|
|
doc, err := LoadFileDoc(path)
|
|
require.NoError(t, err)
|
|
primary, found, err := doc.FindDatabase("primary")
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.Equal(t, 2*time.Minute, primary.ConnMaxLifetime)
|
|
require.Equal(t, 30*time.Second, primary.ConnMaxIdleTime)
|
|
require.True(t, primary.AutoMigrate)
|
|
|
|
copy := primary
|
|
copy.Name = "replica"
|
|
require.NoError(t, doc.AddDatabase(copy))
|
|
found, err = doc.SetDisabled("replica", true)
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.NoError(t, doc.Save())
|
|
|
|
doc, err = LoadFileDoc(path)
|
|
require.NoError(t, err)
|
|
replica, found, err := doc.FindDatabase("replica")
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.True(t, replica.Disabled)
|
|
require.NoError(t, func() error {
|
|
found, err := doc.SetDisabled("replica", false)
|
|
require.True(t, found)
|
|
return err
|
|
}())
|
|
require.NoError(t, doc.Save())
|
|
|
|
doc, err = LoadFileDoc(path)
|
|
require.NoError(t, err)
|
|
replica, found, err = doc.FindDatabase("replica")
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.False(t, replica.Disabled)
|
|
|
|
removed, err := doc.RemoveDatabase("primary")
|
|
require.NoError(t, err)
|
|
require.True(t, removed)
|
|
require.NoError(t, doc.Save())
|
|
contents, err := os.ReadFile(path)
|
|
require.NoError(t, err)
|
|
require.Contains(t, string(contents), "# keep this comment")
|
|
|
|
_, found, err = doc.FindDatabase("primary")
|
|
require.NoError(t, err)
|
|
require.False(t, found)
|
|
}
|
|
|
|
func TestFileDocMissingFileCanAddDatabase(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "new.yaml")
|
|
doc, err := LoadFileDoc(path)
|
|
require.NoError(t, err)
|
|
require.NoError(t, doc.AddDatabase(DatabaseConfig{
|
|
Name: "new",
|
|
Host: "localhost",
|
|
Database: "jobs",
|
|
User: "broker",
|
|
}))
|
|
require.NoError(t, doc.Save())
|
|
|
|
reloaded, err := LoadFileDoc(path)
|
|
require.NoError(t, err)
|
|
dbs, err := reloaded.ListDatabases()
|
|
require.NoError(t, err)
|
|
require.Len(t, dbs, 1)
|
|
require.Equal(t, "new", dbs[0].Name)
|
|
}
|