Files
podman/pkg/emulation/binfmtmisc_linux_test.go
Oleksandr Redko 2a2d0b0e18 chore: delete obsolete // +build lines
Signed-off-by: Oleksandr Redko <Oleksandr_Redko@epam.com>
2024-01-04 11:53:38 +02:00

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)
})
}
}