client: refactor ServerVersion to return ServerVersionResult

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Austin Vazquez
2025-10-20 14:04:38 -05:00
committed by Sebastiaan van Stijn
parent 32f90ab113
commit 860307c4ea
10 changed files with 156 additions and 56 deletions

View File

@@ -6,6 +6,7 @@ import (
"strings"
"testing"
"github.com/moby/moby/api/types"
"github.com/moby/moby/client"
"github.com/moby/moby/v2/internal/testutil/request"
"gotest.tools/v3/assert"
@@ -16,26 +17,45 @@ func TestVersion(t *testing.T) {
ctx := setupTest(t)
apiClient := testEnv.APIClient()
version, err := apiClient.ServerVersion(ctx)
version, err := apiClient.ServerVersion(ctx, client.ServerVersionOptions{})
assert.NilError(t, err)
assert.Check(t, len(version.Components) > 0, "expected at least one component in version.Components")
assert.Check(t, version.APIVersion != "")
assert.Check(t, version.Version != "")
assert.Check(t, version.MinAPIVersion != "")
assert.Check(t, is.Equal(testEnv.DaemonInfo.ExperimentalBuild, version.Experimental))
assert.Check(t, is.Equal(testEnv.DaemonInfo.OSType, version.Os))
var engine types.ComponentVersion
var found bool
for _, comp := range version.Components {
if comp.Name == "Engine" {
engine = comp
found = true
break
}
}
assert.Check(t, found, "Engine component not found in version.Components")
assert.Equal(t, engine.Name, "Engine")
assert.Check(t, engine.Version != "")
assert.Equal(t, engine.Details["ApiVersion"], version.APIVersion)
assert.Equal(t, engine.Details["MinAPIVersion"], version.MinAPIVersion)
assert.Check(t, is.Equal(testEnv.DaemonInfo.OSType, engine.Details["Os"]))
experimentalStr := engine.Details["Experimental"]
experimentalBool, err := strconv.ParseBool(experimentalStr)
assert.NilError(t, err, "Experimental field in Engine details is not a valid boolean string")
assert.Equal(t, testEnv.DaemonInfo.ExperimentalBuild, experimentalBool)
}
func TestAPIClientVersionOldNotSupported(t *testing.T) {
ctx := setupTest(t)
major, minor, _ := strings.Cut(testEnv.DaemonVersion.MinAPIVersion, ".")
minApiVersion := testEnv.DaemonMinAPIVersion
major, minor, _ := strings.Cut(minApiVersion, ".")
vMinInt, err := strconv.Atoi(minor)
assert.NilError(t, err)
vMinInt--
version := fmt.Sprintf("%s.%d", major, vMinInt)
apiClient := request.NewAPIClient(t, client.WithVersion(version))
expectedErrorMessage := fmt.Sprintf("Error response from daemon: client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", version, testEnv.DaemonVersion.MinAPIVersion)
_, err = apiClient.ServerVersion(ctx)
expectedErrorMessage := fmt.Sprintf("Error response from daemon: client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", version, minApiVersion)
_, err = apiClient.ServerVersion(ctx, client.ServerVersionOptions{})
assert.Error(t, err, expectedErrorMessage)
}