feat(cli): manage configured databases
Integration Tests / integration-test (pull_request) Failing after 1m52s

This commit is contained in:
SG Command
2026-09-19 05:11:50 +02:00
parent d3bce39783
commit 7fb64961e7
7 changed files with 985 additions and 2 deletions
+102
View File
@@ -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)
}