Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions registry-scanner/pkg/env/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"
"strconv"
"strings"
"time"

"github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/log"
)
Expand Down Expand Up @@ -35,6 +36,20 @@ func GetStringVal(envVar string, defaultValue string) string {
}
}

// GetDurationVal retrieves a time.Duration value from given environment envVar
// Returns default value if envVar is not set or if the provided value is invalid.
func GetDurationVal(envVar string, defaultValue time.Duration) time.Duration {
if val := os.Getenv(envVar); val != "" {
duration, err := time.ParseDuration(val)
if err != nil {
log.Warnf("Invalid duration format '%s' for environment variable '%s'. Using default value: %s", val, envVar, defaultValue)
return defaultValue
}
return duration
}
return defaultValue
}

// Helper function to parse a number from an environment variable. Returns a
// default if env is not set, is not parseable to a number, exceeds max (if
// max is greater than 0) or is less than min.
Expand Down
24 changes: 24 additions & 0 deletions registry-scanner/pkg/env/env_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package env
import (
"os"
"testing"
"time"

"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -37,6 +38,29 @@ func Test_GetStringVal(t *testing.T) {
})
}

func Test_GetDurationVal(t *testing.T) {
t.Run("Get duration value from existing env var", func(t *testing.T) {
_ = os.Setenv("TEST_DURATION_VAL", "1m")
defer os.Setenv("TEST_DURATION_VAL", "")
assert.Equal(t, time.Minute, GetDurationVal("TEST_DURATION_VAL", 2*time.Minute))
})
t.Run("Get default value from non-existing env var", func(t *testing.T) {
_ = os.Setenv("TEST_DURATION_VAL", "")
defer os.Setenv("TEST_DURATION_VAL", "")
assert.Equal(t, 2*time.Minute, GetDurationVal("TEST_DURATION_VAL", 2*time.Minute))
})
t.Run("Get default value for bad format env var", func(t *testing.T) {
_ = os.Setenv("TEST_DURATION_VAL", "bad format")
defer os.Setenv("TEST_DURATION_VAL", "")
assert.Equal(t, 2*time.Minute, GetDurationVal("TEST_DURATION_VAL", 2*time.Minute))
})
t.Run("Get 0 duration value for 0 env var", func(t *testing.T) {
_ = os.Setenv("TEST_DURATION_VAL", "0")
defer os.Setenv("TEST_DURATION_VAL", "")
assert.Equal(t, 0*time.Minute, GetDurationVal("TEST_DURATION_VAL", 2*time.Minute))
})
}

func Test_ParseNumFromEnv(t *testing.T) {
t.Run("Get number from existing env var within range", func(t *testing.T) {
_ = os.Setenv("TEST_NUM_VAL", "5")
Expand Down