mirror of
https://github.com/containers/podman.git
synced 2025-05-17 06:59:07 +08:00
106 lines
2.4 KiB
Go
106 lines
2.4 KiB
Go
//go:build !remote
|
|
|
|
package emulation
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// parseBinfmtMisc parses a binfmt_misc registry entry. It returns the offset,
|
|
// magic, and mask values, or an error if there was an error parsing the data.
|
|
// If the returned offset is negative, the entry was disabled or should be
|
|
// non-fatally ignored for some other reason.
|
|
func TestParseBinfmtMisc(t *testing.T) {
|
|
vectors := []struct {
|
|
platform, contents string
|
|
}{
|
|
{
|
|
"linux/386",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-i386-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c4601010100000000000000000002000300
|
|
mask fffffffffffefe00fffffffffffffffffeffffff
|
|
`,
|
|
},
|
|
{
|
|
"linux/amd64",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-x86_64-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c4602010100000000000000000002003e00
|
|
mask fffffffffffefe00fffffffffffffffffeffffff
|
|
`,
|
|
},
|
|
{
|
|
"linux/arm",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-arm-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c4601010100000000000000000002002800
|
|
mask ffffffffffffff00fffffffffffffffffeffffff
|
|
`,
|
|
},
|
|
{
|
|
"linux/arm64",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-aarch64-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c460201010000000000000000000200b700
|
|
mask ffffffffffffff00fffffffffffffffffeffffff
|
|
`,
|
|
},
|
|
{
|
|
"linux/ppc64le",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-ppc64le-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c4602010100000000000000000002001500
|
|
mask ffffffffffffff00fffffffffffffffffeffff00
|
|
`,
|
|
},
|
|
{
|
|
"linux/s390x",
|
|
`
|
|
enabled
|
|
interpreter /usr/bin/qemu-s390x-static
|
|
flags: F
|
|
offset 0
|
|
magic 7f454c4602020100000000000000000000020016
|
|
mask ffffffffffffff00fffffffffffffffffffeffff
|
|
`,
|
|
},
|
|
}
|
|
for i := range vectors {
|
|
v := vectors[i]
|
|
t.Run(v.platform, func(t *testing.T) {
|
|
offset, magic, mask, err := parseBinfmtMisc(fmt.Sprintf("test vector %d", i), strings.NewReader(v.contents))
|
|
require.NoError(t, err, "parseBinfmtMisc: %v", err)
|
|
require.GreaterOrEqual(t, offset, 0, "%q shouldn't have been disabled", v.platform)
|
|
headers := getKnownELFPlatformHeaders()[v.platform]
|
|
matched := false
|
|
for _, header := range headers {
|
|
if magicMatch(header, offset, mask, magic) {
|
|
matched = true
|
|
}
|
|
}
|
|
assert.True(t, matched, "%q did not match an expected header match", v.platform)
|
|
})
|
|
}
|
|
}
|