@@ -2,6 +2,7 @@ package buildtools
22
33import (
44 "errors"
5+ "os"
56 "testing"
67
78 containerutils "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer"
@@ -304,23 +305,47 @@ func overrideCommandAction(commands []cli.Command, name string, action cli.Actio
304305 return newCommands
305306}
306307
307- // TestResolveContainerManagerType verifies the dispatcher routes to Podman
308- // only when the detector reports a Podman-backed 'docker' CLI.
308+ // TestResolveContainerManagerType verifies the resolution order:
309+ // 1. JFROG_CLI_CONTAINER_MANAGER env override (docker/podman, case-insensitive).
310+ // 2. Auto-detection via the Podman probe.
311+ // 3. Default to Docker.
309312func TestResolveContainerManagerType (t * testing.T ) {
310313 tests := []struct {
311314 name string
315+ envValue string // "" means unset
316+ envUnset bool
312317 podmanFound bool
313318 want containerutils.ContainerManagerType
314319 }{
315- {name : "podman detected -> route to podman" , podmanFound : true , want : containerutils .Podman },
316- {name : "no podman detected -> default docker" , podmanFound : false , want : containerutils .DockerClient },
320+ {name : "env=podman forces podman even when detector says docker" , envValue : "podman" , want : containerutils .Podman },
321+ {name : "env=docker forces docker even when detector says podman" , envValue : "docker" , podmanFound : true , want : containerutils .DockerClient },
322+ {name : "env=PODMAN is case-insensitive" , envValue : "PODMAN" , want : containerutils .Podman },
323+ {name : "env= with whitespace is trimmed" , envValue : " podman " , want : containerutils .Podman },
324+ {name : "unknown env value falls through to detector (podman)" , envValue : "rkt" , podmanFound : true , want : containerutils .Podman },
325+ {name : "unknown env value falls through to detector (docker)" , envValue : "rkt" , podmanFound : false , want : containerutils .DockerClient },
326+ {name : "unset env + detector finds podman -> podman" , envUnset : true , podmanFound : true , want : containerutils .Podman },
327+ {name : "unset env + detector finds docker -> docker" , envUnset : true , podmanFound : false , want : containerutils .DockerClient },
317328 }
318329
319330 for _ , tc := range tests {
320331 t .Run (tc .name , func (t * testing.T ) {
321- original := podmanDetector
332+ originalEnv , envWasSet := os .LookupEnv (containerManagerEnvVar )
333+ if tc .envUnset {
334+ require .NoError (t , os .Unsetenv (containerManagerEnvVar ))
335+ } else {
336+ require .NoError (t , os .Setenv (containerManagerEnvVar , tc .envValue ))
337+ }
338+ defer func () {
339+ if envWasSet {
340+ _ = os .Setenv (containerManagerEnvVar , originalEnv )
341+ } else {
342+ _ = os .Unsetenv (containerManagerEnvVar )
343+ }
344+ }()
345+
346+ originalDetector := podmanDetector
322347 podmanDetector = func () bool { return tc .podmanFound }
323- defer func () { podmanDetector = original }()
348+ defer func () { podmanDetector = originalDetector }()
324349
325350 assert .Equal (t , tc .want , resolveContainerManagerType ())
326351 })
0 commit comments