mirror of
https://github.com/moby/moby.git
synced 2026-07-12 18:45:06 +00:00
Switch to use github.com/containerd/platforms module, because containerd's platforms package has moved to a separate module. This allows updating the platforms parsing independent of the containerd module itself. The package in containerd is deprecated, but kept as an alias to provide compatibility between codebases. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
109 lines
3.0 KiB
Go
109 lines
3.0 KiB
Go
package dockerfile // import "github.com/docker/docker/builder/dockerfile"
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"runtime"
|
|
"testing"
|
|
|
|
"github.com/containerd/platforms"
|
|
"github.com/docker/docker/builder"
|
|
"github.com/docker/docker/image"
|
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func getMockImageSource(getImageImage builder.Image, getImageLayer builder.ROLayer, getImageError error) *imageSources {
|
|
return &imageSources{
|
|
byImageID: make(map[string]*imageMount),
|
|
mounts: []*imageMount{},
|
|
getImage: func(_ context.Context, name string, localOnly bool, platform *ocispec.Platform) (builder.Image, builder.ROLayer, error) {
|
|
return getImageImage, getImageLayer, getImageError
|
|
},
|
|
}
|
|
}
|
|
|
|
func getMockImageMount() *imageMount {
|
|
return &imageMount{
|
|
image: nil,
|
|
layer: nil,
|
|
}
|
|
}
|
|
|
|
func TestAddScratchImageAddsToMounts(t *testing.T) {
|
|
is := getMockImageSource(nil, nil, fmt.Errorf("getImage is not implemented"))
|
|
im := getMockImageMount()
|
|
|
|
// We are testing whether the imageMount is added to is.mounts
|
|
assert.Equal(t, len(is.mounts), 0)
|
|
is.Add(im, nil)
|
|
assert.Equal(t, len(is.mounts), 1)
|
|
}
|
|
|
|
func TestAddFromScratchPopulatesPlatform(t *testing.T) {
|
|
is := getMockImageSource(nil, nil, fmt.Errorf("getImage is not implemented"))
|
|
|
|
platforms := []*ocispec.Platform{
|
|
{
|
|
OS: "linux",
|
|
Architecture: "amd64",
|
|
},
|
|
{
|
|
OS: "linux",
|
|
Architecture: "arm64",
|
|
Variant: "v8",
|
|
},
|
|
}
|
|
|
|
for i, platform := range platforms {
|
|
im := getMockImageMount()
|
|
assert.Equal(t, len(is.mounts), i)
|
|
is.Add(im, platform)
|
|
image, ok := im.image.(*image.Image)
|
|
assert.Assert(t, ok)
|
|
assert.Equal(t, image.OS, platform.OS)
|
|
assert.Equal(t, image.Architecture, platform.Architecture)
|
|
assert.Equal(t, image.Variant, platform.Variant)
|
|
}
|
|
}
|
|
|
|
func TestAddFromScratchDoesNotModifyArgPlatform(t *testing.T) {
|
|
is := getMockImageSource(nil, nil, fmt.Errorf("getImage is not implemented"))
|
|
im := getMockImageMount()
|
|
|
|
platform := &ocispec.Platform{
|
|
OS: "windows",
|
|
Architecture: "amd64",
|
|
}
|
|
argPlatform := *platform
|
|
|
|
is.Add(im, &argPlatform)
|
|
// The way the code is written right now, this test
|
|
// really doesn't do much except on Windows.
|
|
assert.DeepEqual(t, *platform, argPlatform)
|
|
}
|
|
|
|
func TestAddFromScratchPopulatesPlatformIfNil(t *testing.T) {
|
|
is := getMockImageSource(nil, nil, fmt.Errorf("getImage is not implemented"))
|
|
im := getMockImageMount()
|
|
is.Add(im, nil)
|
|
image, ok := im.image.(*image.Image)
|
|
assert.Assert(t, ok)
|
|
|
|
expectedPlatform := platforms.DefaultSpec()
|
|
if runtime.GOOS == "windows" {
|
|
expectedPlatform.OS = "linux"
|
|
}
|
|
assert.Equal(t, expectedPlatform.OS, image.OS)
|
|
assert.Equal(t, expectedPlatform.Architecture, image.Architecture)
|
|
assert.Equal(t, expectedPlatform.Variant, image.Variant)
|
|
}
|
|
|
|
func TestImageSourceGetAddsToMounts(t *testing.T) {
|
|
is := getMockImageSource(nil, nil, nil)
|
|
ctx := context.Background()
|
|
_, err := is.Get(ctx, "test", false, nil)
|
|
assert.NilError(t, err)
|
|
assert.Equal(t, len(is.mounts), 1)
|
|
}
|