agent: add dockerManager.retrySleep method to mock time.Sleep in tests

This commit is contained in:
henrygd
2026-02-18 13:44:54 -05:00
parent ef92b254bf
commit 1def7d8d3a
2 changed files with 9 additions and 9 deletions

View File

@@ -72,6 +72,7 @@ type dockerManager struct {
// cacheTimeMs -> DeltaTracker for network bytes sent/received // cacheTimeMs -> DeltaTracker for network bytes sent/received
networkSentTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64] networkSentTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
networkRecvTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64] networkRecvTrackers map[uint16]*deltatracker.DeltaTracker[string, uint64]
retrySleep func(time.Duration)
} }
// userAgentRoundTripper is a custom http.RoundTripper that adds a User-Agent header to all requests // userAgentRoundTripper is a custom http.RoundTripper that adds a User-Agent header to all requests
@@ -565,6 +566,7 @@ func newDockerManager() *dockerManager {
lastCpuReadTime: make(map[uint16]map[string]time.Time), lastCpuReadTime: make(map[uint16]map[string]time.Time),
networkSentTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]), networkSentTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
networkRecvTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]), networkRecvTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
retrySleep: time.Sleep,
} }
// If using podman, return client // If using podman, return client
@@ -574,7 +576,7 @@ func newDockerManager() *dockerManager {
return manager return manager
} }
// this can take up to 5 seconds with retry, so run in goroutine // run version check in goroutine to avoid blocking (server may not be ready and requires retries)
go manager.checkDockerVersion() go manager.checkDockerVersion()
// give version check a chance to complete before returning // give version check a chance to complete before returning
@@ -601,12 +603,8 @@ func (dm *dockerManager) checkDockerVersion() {
resp.Body.Close() resp.Body.Close()
} }
if i < versionMaxTries { if i < versionMaxTries {
if err != nil { slog.Debug("Failed to get Docker version; retrying", "attempt", i, "err", err, "response", resp)
slog.Debug("Failed to get Docker version; retrying", "attempt", i, "error", err) dm.retrySleep(5 * time.Second)
} else {
slog.Debug("Failed to get Docker version; retrying", "attempt", i, "status code", resp.StatusCode)
}
time.Sleep(5 * time.Second)
} }
} }
if err != nil || resp.StatusCode != http.StatusOK { if err != nil || resp.StatusCode != http.StatusOK {

View File

@@ -465,6 +465,7 @@ func TestCheckDockerVersion(t *testing.T) {
}, },
}, },
}, },
retrySleep: func(time.Duration) {},
} }
dm.checkDockerVersion() dm.checkDockerVersion()
@@ -485,6 +486,7 @@ func TestCheckDockerVersion(t *testing.T) {
}, },
}, },
}, },
retrySleep: func(time.Duration) {},
} }
dm.checkDockerVersion() dm.checkDockerVersion()