summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorIshita Sequeira <46771830+ishitasequeira@users.noreply.github.com>2024-12-19 19:51:50 +0530
committerGitHub <noreply@github.com>2024-12-19 09:21:50 -0500
commit736f12f55a73d17dbedc040b4f559a2cd33bbff4 (patch)
treed7e31aba857641a20da7bffa5d9c29e3c5c230e4 /pkg
parent03203db49b047f03a8e99b26ef8554942c2513d6 (diff)
Update references of cache, env, health to use modules from registry-scanner (#972)
Signed-off-by: Ishita Sequeira <ishiseq29@gmail.com>
Diffstat (limited to 'pkg')
-rw-r--r--pkg/argocd/argocd.go2
-rw-r--r--pkg/cache/cache.go20
-rw-r--r--pkg/cache/memcache.go74
-rw-r--r--pkg/cache/memcache_test.go70
-rw-r--r--pkg/env/env.go66
-rw-r--r--pkg/env/env_test.go65
-rw-r--r--pkg/health/health.go25
-rw-r--r--pkg/health/health_test.go52
-rw-r--r--pkg/registry/endpoints.go2
9 files changed, 2 insertions, 374 deletions
diff --git a/pkg/argocd/argocd.go b/pkg/argocd/argocd.go
index 6a52e7b..6ba85d5 100644
--- a/pkg/argocd/argocd.go
+++ b/pkg/argocd/argocd.go
@@ -9,10 +9,10 @@ import (
"time"
"github.com/argoproj-labs/argocd-image-updater/pkg/common"
- "github.com/argoproj-labs/argocd-image-updater/pkg/env"
"github.com/argoproj-labs/argocd-image-updater/pkg/image"
"github.com/argoproj-labs/argocd-image-updater/pkg/kube"
"github.com/argoproj-labs/argocd-image-updater/pkg/metrics"
+ "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/env"
"github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/log"
argocdclient "github.com/argoproj/argo-cd/v2/pkg/apiclient"
diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go
deleted file mode 100644
index e59400c..0000000
--- a/pkg/cache/cache.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package cache
-
-import (
- "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/tag"
-)
-
-type ImageTagCache interface {
- HasTag(imageName string, imageTag string) bool
- GetTag(imageName string, imageTag string) (*tag.ImageTag, error)
- SetTag(imageName string, imgTag *tag.ImageTag)
- ClearCache()
- NumEntries() int
-}
-
-// KnownImage represents a known image and the applications using it, without
-// any version/tag information.
-type KnownImage struct {
- ImageName string
- Applications []string
-}
diff --git a/pkg/cache/memcache.go b/pkg/cache/memcache.go
deleted file mode 100644
index 03b4080..0000000
--- a/pkg/cache/memcache.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package cache
-
-import (
- "fmt"
-
- "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/tag"
-
- memcache "github.com/patrickmn/go-cache"
-)
-
-type MemCache struct {
- cache *memcache.Cache
-}
-
-// NewMemCache returns a new instance of MemCache
-func NewMemCache() ImageTagCache {
- mc := MemCache{}
- c := memcache.New(0, 0)
- mc.cache = c
- return &mc
-}
-
-// HasTag returns true if cache has entry for given tag, false if not
-func (mc *MemCache) HasTag(imageName string, tagName string) bool {
- tag, err := mc.GetTag(imageName, tagName)
- if err != nil || tag == nil {
- return false
- } else {
- return true
- }
-}
-
-// SetTag sets a tag entry into the cache
-func (mc *MemCache) SetTag(imageName string, imgTag *tag.ImageTag) {
- mc.cache.Set(tagCacheKey(imageName, imgTag.TagName), *imgTag, -1)
-}
-
-// GetTag gets a tag entry from the cache
-func (mc *MemCache) GetTag(imageName string, tagName string) (*tag.ImageTag, error) {
- var imgTag tag.ImageTag
- e, ok := mc.cache.Get(tagCacheKey(imageName, tagName))
- if !ok {
- return nil, nil
- }
- imgTag, ok = e.(tag.ImageTag)
- if !ok {
- return nil, fmt.Errorf("")
- }
- return &imgTag, nil
-}
-
-func (mc *MemCache) SetImage(imageName, application string) {
- mc.cache.Set(imageCacheKey(imageName), application, -1)
-}
-
-// ClearCache clears the cache
-func (mc *MemCache) ClearCache() {
- for k := range mc.cache.Items() {
- mc.cache.Delete(k)
- }
-}
-
-// NumEntries returns the number of entries in the cache
-func (mc *MemCache) NumEntries() int {
- return mc.cache.ItemCount()
-}
-
-func tagCacheKey(imageName, imageTag string) string {
- return fmt.Sprintf("tags:%s:%s", imageName, imageTag)
-}
-
-func imageCacheKey(imageName string) string {
- return fmt.Sprintf("image:%s", imageName)
-}
diff --git a/pkg/cache/memcache_test.go b/pkg/cache/memcache_test.go
deleted file mode 100644
index ff8bc5f..0000000
--- a/pkg/cache/memcache_test.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package cache
-
-import (
- "testing"
- "time"
-
- memcache "github.com/patrickmn/go-cache"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/tag"
-)
-
-func Test_MemCache(t *testing.T) {
- imageName := "foo/bar"
- imageTag := "v1.0.0"
- t.Run("Cache hit", func(t *testing.T) {
- mc := NewMemCache()
- newTag := tag.NewImageTag(imageTag, time.Unix(0, 0), "")
- mc.SetTag(imageName, newTag)
- cachedTag, err := mc.GetTag(imageName, imageTag)
- require.NoError(t, err)
- require.NotNil(t, cachedTag)
- assert.Equal(t, imageTag, cachedTag.TagName)
- assert.True(t, mc.HasTag(imageName, imageTag))
- assert.Equal(t, 1, mc.NumEntries())
- })
-
- t.Run("Cache miss", func(t *testing.T) {
- mc := NewMemCache()
- newTag := tag.NewImageTag(imageTag, time.Unix(0, 0), "")
- mc.SetTag(imageName, newTag)
- assert.Equal(t, 1, mc.NumEntries())
- cachedTag, err := mc.GetTag(imageName, "v1.0.1")
- require.NoError(t, err)
- require.Nil(t, cachedTag)
- assert.False(t, mc.HasTag(imageName, "v1.0.1"))
- })
-
- t.Run("Cache clear", func(t *testing.T) {
- mc := NewMemCache()
- newTag := tag.NewImageTag(imageTag, time.Unix(0, 0), "")
- mc.SetTag(imageName, newTag)
- cachedTag, err := mc.GetTag(imageName, imageTag)
- require.NoError(t, err)
- require.NotNil(t, cachedTag)
- assert.Equal(t, imageTag, cachedTag.TagName)
- assert.True(t, mc.HasTag(imageName, imageTag))
- assert.Equal(t, 1, mc.NumEntries())
- mc.ClearCache()
- assert.Equal(t, 0, mc.NumEntries())
- cachedTag, err = mc.GetTag(imageName, imageTag)
- require.NoError(t, err)
- require.Nil(t, cachedTag)
- })
- t.Run("Image Cache Key", func(t *testing.T) {
- mc := MemCache{
- cache: memcache.New(0, 0),
- }
- application := "application1"
- key := imageCacheKey(imageName)
- mc.SetImage(imageName, application)
- app, b := mc.cache.Get(key)
- assert.True(t, b)
- assert.Equal(t, application, app)
- assert.Equal(t, 1, mc.NumEntries())
- mc.ClearCache()
- assert.Equal(t, 0, mc.NumEntries())
- })
-}
diff --git a/pkg/env/env.go b/pkg/env/env.go
deleted file mode 100644
index f000aa2..0000000
--- a/pkg/env/env.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package env
-
-import (
- "math"
- "os"
- "strconv"
- "strings"
-
- "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/log"
-)
-
-// Package env provides some utility functions to interact with the environment
-// of the process.
-
-// GetBoolVal retrieves a boolean value from given environment envVar.
-// Returns default value if envVar is not set.
-func GetBoolVal(envVar string, defaultValue bool) bool {
- if val := os.Getenv(envVar); val != "" {
- if strings.ToLower(val) == "true" {
- return true
- } else if strings.ToLower(val) == "false" {
- return false
- }
- }
- return defaultValue
-}
-
-// GetStringVal retrieves a string value from given environment envVar
-// Returns default value if envVar is not set.
-func GetStringVal(envVar string, defaultValue string) string {
- if val := os.Getenv(envVar); val != "" {
- return val
- } else {
- 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.
-//
-// nolint:unparam
-func ParseNumFromEnv(env string, defaultValue, min, max int) int {
- str := os.Getenv(env)
- if str == "" {
- return defaultValue
- }
- num, err := strconv.ParseInt(str, 10, 0)
- if err != nil {
- log.Warnf("Could not parse '%s' as a number from environment %s", str, env)
- return defaultValue
- }
- if num > math.MaxInt || num < math.MinInt {
- log.Warnf("Value in %s is %d is outside of the min and max %d allowed values. Using default %d", env, num, min, defaultValue)
- return defaultValue
- }
- if int(num) < min {
- log.Warnf("Value in %s is %d, which is less than minimum %d allowed", env, num, min)
- return defaultValue
- }
- if int(num) > max {
- log.Warnf("Value in %s is %d, which is greater than maximum %d allowed", env, num, max)
- return defaultValue
- }
- return int(num)
-}
diff --git a/pkg/env/env_test.go b/pkg/env/env_test.go
deleted file mode 100644
index 41ccaf9..0000000
--- a/pkg/env/env_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package env
-
-import (
- "os"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func Test_GetBoolVal(t *testing.T) {
- t.Run("Get 'true' value from existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_BOOL_VAL", "true")
- defer os.Setenv("TEST_BOOL_VAL", "")
- assert.True(t, GetBoolVal("TEST_BOOL_VAL", false))
- })
- t.Run("Get 'false' value from existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_BOOL_VAL", "false")
- defer os.Setenv("TEST_BOOL_VAL", "")
- assert.False(t, GetBoolVal("TEST_BOOL_VAL", true))
- })
- t.Run("Get default value from non-existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_BOOL_VAL", "")
- assert.True(t, GetBoolVal("TEST_BOOL_VAL", true))
- })
-}
-
-func Test_GetStringVal(t *testing.T) {
- t.Run("Get string value from existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_STRING_VAL", "test")
- defer os.Setenv("TEST_STRING_VAL", "")
- assert.Equal(t, "test", GetStringVal("TEST_STRING_VAL", "invalid"))
- })
- t.Run("Get default value from non-existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_STRING_VAL", "")
- defer os.Setenv("TEST_STRING_VAL", "")
- assert.Equal(t, "invalid", GetStringVal("TEST_STRING_VAL", "invalid"))
- })
-}
-
-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")
- defer os.Setenv("TEST_NUM_VAL", "")
- assert.Equal(t, 5, ParseNumFromEnv("TEST_NUM_VAL", 0, 1, 10))
- })
- t.Run("Get default value from non-existing env var", func(t *testing.T) {
- _ = os.Setenv("TEST_NUM_VAL", "")
- assert.Equal(t, 10, ParseNumFromEnv("TEST_NUM_VAL", 10, 1, 20))
- })
- t.Run("Get default value from env var with non-numeric value", func(t *testing.T) {
- _ = os.Setenv("TEST_NUM_VAL", "abc")
- defer os.Setenv("TEST_NUM_VAL", "")
- assert.Equal(t, 10, ParseNumFromEnv("TEST_NUM_VAL", 10, 1, 20))
- })
- t.Run("Get default value from env var with value less than min", func(t *testing.T) {
- _ = os.Setenv("TEST_NUM_VAL", "0")
- defer os.Setenv("TEST_NUM_VAL", "")
- assert.Equal(t, 10, ParseNumFromEnv("TEST_NUM_VAL", 10, 1, 20))
- })
- t.Run("Get default value from env var with value greater than max", func(t *testing.T) {
- _ = os.Setenv("TEST_NUM_VAL", "30")
- defer os.Setenv("TEST_NUM_VAL", "")
- assert.Equal(t, 10, ParseNumFromEnv("TEST_NUM_VAL", 10, 1, 20))
- })
-}
diff --git a/pkg/health/health.go b/pkg/health/health.go
deleted file mode 100644
index cbc4977..0000000
--- a/pkg/health/health.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package health
-
-// Most simple health check probe to see whether our server is still alive
-
-import (
- "fmt"
- "net/http"
-
- "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/log"
-)
-
-func StartHealthServer(port int) chan error {
- errCh := make(chan error)
- go func() {
- sm := http.NewServeMux()
- sm.HandleFunc("/healthz", HealthProbe)
- errCh <- http.ListenAndServe(fmt.Sprintf(":%d", port), sm)
- }()
- return errCh
-}
-
-func HealthProbe(w http.ResponseWriter, r *http.Request) {
- log.Tracef("/healthz ping request received, replying with pong")
- fmt.Fprintf(w, "OK\n")
-}
diff --git a/pkg/health/health_test.go b/pkg/health/health_test.go
deleted file mode 100644
index b5670f5..0000000
--- a/pkg/health/health_test.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package health
-
-import (
- "fmt"
- "net/http"
- "net/http/httptest"
- "testing"
- "time"
-)
-
-// Unit test function
-func TestStartHealthServer_InvalidPort(t *testing.T) {
- // Use an invalid port number
- port := -1
- errCh := StartHealthServer(port)
- defer close(errCh) // Close the error channel after the test completes
- select {
- case err := <-errCh:
- if err == nil {
- t.Error("Expected error, got nil")
- } else if err.Error() != fmt.Sprintf("listen tcp: address %d: invalid port", port) {
- t.Errorf("Expected error message about invalid port, got %v", err)
- }
- case <-time.After(2 * time.Second):
- t.Error("Timed out waiting for error")
- }
-}
-
-func TestHealthProbe(t *testing.T) {
- // Create a mock HTTP request
- req, err := http.NewRequest("GET", "/healthz", nil)
- if err != nil {
- t.Fatalf("Failed to create request: %v", err)
- }
-
- // Create a mock HTTP response recorder
- w := httptest.NewRecorder()
-
- // Call the HealthProbe function directly
- HealthProbe(w, req)
-
- // Check the response status code
- if w.Code != http.StatusOK {
- t.Errorf("Expected status OK; got %d", w.Code)
- }
-
- // Check the response body
- expectedBody := "OK\n"
- if body := w.Body.String(); body != expectedBody {
- t.Errorf("Expected body %q; got %q", expectedBody, body)
- }
-}
diff --git a/pkg/registry/endpoints.go b/pkg/registry/endpoints.go
index b694ba0..3b64fc5 100644
--- a/pkg/registry/endpoints.go
+++ b/pkg/registry/endpoints.go
@@ -9,7 +9,7 @@ import (
"sync"
"time"
- "github.com/argoproj-labs/argocd-image-updater/pkg/cache"
+ "github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/cache"
"github.com/argoproj-labs/argocd-image-updater/registry-scanner/pkg/log"
"go.uber.org/ratelimit"