diff --git a/errdefs/http_helpers.go b/errdefs/http_helpers.go index c67a65b6ae26b..1debd2ae004b7 100644 --- a/errdefs/http_helpers.go +++ b/errdefs/http_helpers.go @@ -177,7 +177,7 @@ func statusCodeFromDistributionError(err error) int { } // statusCodeFromContainerdError returns status code for containerd errors when -// consumed directory (not through gRPC) +// consumed directly (not through gRPC) func statusCodeFromContainerdError(err error) int { switch { case containerderrors.IsInvalidArgument(err): diff --git a/integration/build/build_test.go b/integration/build/build_test.go index 183e7142265f8..43bf123516015 100644 --- a/integration/build/build_test.go +++ b/integration/build/build_test.go @@ -13,6 +13,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/docker/docker/internal/test/fakecontext" "github.com/docker/docker/pkg/jsonmessage" "gotest.tools/assert" @@ -562,6 +563,35 @@ func TestBuildPreserveOwnership(t *testing.T) { } } +func TestBuildPlatformInvalid(t *testing.T) { + skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "experimental in older versions") + + ctx := context.Background() + defer setupTest(t)() + + dockerfile := `FROM busybox +` + + buf := bytes.NewBuffer(nil) + w := tar.NewWriter(buf) + writeTarRecord(t, w, "Dockerfile", dockerfile) + err := w.Close() + assert.NilError(t, err) + + apiclient := testEnv.APIClient() + _, err = apiclient.ImageBuild(ctx, + buf, + types.ImageBuildOptions{ + Remove: true, + ForceRemove: true, + Platform: "foobar", + }) + + assert.Assert(t, err != nil) + assert.ErrorContains(t, err, "unknown operating system or architecture") + assert.Assert(t, errdefs.IsInvalidParameter(err)) +} + func writeTarRecord(t *testing.T, w *tar.Writer, fn, contents string) { err := w.WriteHeader(&tar.Header{ Name: fn, diff --git a/integration/image/pull_test.go b/integration/image/pull_test.go new file mode 100644 index 0000000000000..f05dc64672ec5 --- /dev/null +++ b/integration/image/pull_test.go @@ -0,0 +1,24 @@ +package image + +import ( + "context" + "testing" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" + "gotest.tools/assert" + "gotest.tools/skip" +) + +func TestImagePullPlatformInvalid(t *testing.T) { + skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "experimental in older versions") + defer setupTest(t)() + client := testEnv.APIClient() + ctx := context.Background() + + _, err := client.ImagePull(ctx, "docker.io/library/hello-world:latest", types.ImagePullOptions{Platform: "foobar"}) + assert.Assert(t, err != nil) + assert.ErrorContains(t, err, "unknown operating system or architecture") + assert.Assert(t, errdefs.IsInvalidParameter(err)) +}