feat(cli): manage configured databases
Integration Tests / integration-test (pull_request) Failing after 1m52s
Integration Tests / integration-test (pull_request) Failing after 1m52s
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user