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) }