mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* feat: Add support for background sync * refactor: Maintain single source of truth for command defn * fix: Code review fixes * fix: Code review fixes * docs: Add corner case inline doc
84 lines
2.5 KiB
Go
84 lines
2.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCloudAutoSyncDefaults(t *testing.T) {
|
|
t.Setenv("PMG_CONFIG_DIR", "/tmp/pmg-test/random-does-not-exist")
|
|
initConfig()
|
|
|
|
c := Get().Config.Cloud.AutoSync
|
|
assert.True(t, c.Enabled, "auto_sync.enabled defaults to true")
|
|
assert.Equal(t, 15*time.Minute, c.MinInterval)
|
|
assert.Equal(t, 5*time.Minute, c.Timeout)
|
|
}
|
|
|
|
func TestCloudAutoSyncEnvOverridesDefaults(t *testing.T) {
|
|
t.Run("PMG_CLOUD_AUTO_SYNC_ENABLED=false flips the default", func(t *testing.T) {
|
|
t.Setenv("PMG_CONFIG_DIR", "/tmp/pmg-test/random-does-not-exist")
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_ENABLED", "false")
|
|
initConfig()
|
|
|
|
assert.False(t, Get().Config.Cloud.AutoSync.Enabled)
|
|
})
|
|
|
|
t.Run("PMG_CLOUD_AUTO_SYNC_MIN_INTERVAL is parsed as duration", func(t *testing.T) {
|
|
t.Setenv("PMG_CONFIG_DIR", "/tmp/pmg-test/random-does-not-exist")
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_MIN_INTERVAL", "2m")
|
|
initConfig()
|
|
|
|
assert.Equal(t, 2*time.Minute, Get().Config.Cloud.AutoSync.MinInterval)
|
|
})
|
|
|
|
t.Run("PMG_CLOUD_AUTO_SYNC_TIMEOUT is parsed as duration", func(t *testing.T) {
|
|
t.Setenv("PMG_CONFIG_DIR", "/tmp/pmg-test/random-does-not-exist")
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_TIMEOUT", "30s")
|
|
initConfig()
|
|
|
|
assert.Equal(t, 30*time.Second, Get().Config.Cloud.AutoSync.Timeout)
|
|
})
|
|
}
|
|
|
|
func TestCloudAutoSyncConfigFileMerge(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
t.Setenv("PMG_CONFIG_DIR", tmpDir)
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_ENABLED", "")
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_MIN_INTERVAL", "")
|
|
t.Setenv("PMG_CLOUD_AUTO_SYNC_TIMEOUT", "")
|
|
|
|
configYAML := `cloud:
|
|
enabled: true
|
|
auto_sync:
|
|
enabled: false
|
|
min_interval: 1m
|
|
`
|
|
configPath := filepath.Join(tmpDir, "config.yml")
|
|
require.NoError(t, os.WriteFile(configPath, []byte(configYAML), 0o644))
|
|
|
|
initConfig()
|
|
c := Get().Config.Cloud
|
|
assert.True(t, c.Enabled)
|
|
assert.False(t, c.AutoSync.Enabled, "explicit auto_sync.enabled=false should win")
|
|
assert.Equal(t, time.Minute, c.AutoSync.MinInterval)
|
|
// Sibling field not set in file falls back to default.
|
|
assert.Equal(t, 5*time.Minute, c.AutoSync.Timeout)
|
|
}
|
|
|
|
func TestCloudSyncPathHelpers(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
t.Setenv("PMG_CONFIG_DIR", tmpDir)
|
|
initConfig()
|
|
|
|
cfg := Get()
|
|
assert.Equal(t, filepath.Join(tmpDir, "cloud-sync.db"), cfg.CloudSyncDBPath())
|
|
assert.Equal(t, filepath.Join(tmpDir, "cloud-sync.lock"), cfg.CloudSyncLockPath())
|
|
assert.Equal(t, filepath.Join(tmpDir, "cloud-sync.lastrun"), cfg.CloudSyncLastRunPath())
|
|
}
|