mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-12 09:46:25 +08:00
Merge pull request #2768 from kolyshkin/unit-386
ci/gha: add i386 unit test
This commit is contained in:
@@ -138,3 +138,33 @@ jobs:
|
||||
# FIXME: rootless is skipped because of EPERM on writing cgroup.procs
|
||||
if: false
|
||||
run: ssh default "sudo -i make -C /vagrant localrootlessintegration"
|
||||
|
||||
# We need to continue support for 32-bit ARM.
|
||||
# However, we do not have 32-bit ARM CI, so we use i386 for testing 32bit stuff.
|
||||
# We are not interested in providing official support for i386.
|
||||
cross-i386:
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: install deps
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
# add criu repo
|
||||
sudo add-apt-repository -y ppa:criu/ppa
|
||||
# apt-add-repository runs apt update so we don't have to.
|
||||
|
||||
# Due to a bug in apt, we have to update it first
|
||||
# (see https://bugs.launchpad.net/ubuntu-cdimage/+bug/1871268)
|
||||
sudo apt -q install apt
|
||||
sudo apt -q install libseccomp-dev libseccomp-dev:i386 gcc-multilib criu
|
||||
|
||||
- name: install go
|
||||
uses: actions/setup-go@v2 # use default Go version
|
||||
|
||||
- name: unit test
|
||||
# cgo is disabled by default when cross-compiling
|
||||
run: sudo -E PATH="$PATH" -- make GOARCH=386 CGO_ENABLED=1 localunittest
|
||||
|
||||
@@ -159,7 +159,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string)
|
||||
type syscallTest struct {
|
||||
syscall string
|
||||
sysno libseccomp.ScmpSyscall
|
||||
expected int
|
||||
expected uint32
|
||||
}
|
||||
|
||||
scmpArch, err := libseccomp.GetArchFromString(arch)
|
||||
@@ -177,9 +177,9 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string)
|
||||
// Add explicit syscalls (whether they will return -ENOSYS
|
||||
// depends on the filter rules).
|
||||
for idx, syscall := range explicitSyscalls {
|
||||
expected := int(retFallthrough)
|
||||
expected := retFallthrough
|
||||
if idx >= enosysStart {
|
||||
expected = int(retErrnoEnosys)
|
||||
expected = retErrnoEnosys
|
||||
}
|
||||
sysno, err := libseccomp.GetSyscallFromNameByArch(syscall, scmpArch)
|
||||
if err != nil {
|
||||
@@ -201,7 +201,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string)
|
||||
syscallTests = append(syscallTests, syscallTest{
|
||||
sysno: sysno,
|
||||
syscall: syscall,
|
||||
expected: int(retFallthrough),
|
||||
expected: retFallthrough,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string)
|
||||
syscallTests = append(syscallTests, syscallTest{
|
||||
sysno: sysno,
|
||||
syscall: fmt.Sprintf("syscall_%#x", sysno),
|
||||
expected: int(retErrnoEnosys),
|
||||
expected: retErrnoEnosys,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -224,14 +224,17 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string)
|
||||
for _, test := range syscallTests {
|
||||
// Override the expected value in the two special cases.
|
||||
if !archSet[arch] || isAllowAction(defaultAction) {
|
||||
test.expected = int(retFallthrough)
|
||||
test.expected = retFallthrough
|
||||
}
|
||||
|
||||
payload := mockSyscallPayload(t, test.sysno, nativeArch, 0x1337, 0xF00BA5)
|
||||
ret, err := filter.Run(payload)
|
||||
// NOTE: golang.org/x/net/bpf returns int here rather
|
||||
// than uint32.
|
||||
rawRet, err := filter.Run(payload)
|
||||
if err != nil {
|
||||
t.Fatalf("error running filter: %v", err)
|
||||
}
|
||||
ret := uint32(rawRet)
|
||||
if ret != test.expected {
|
||||
t.Logf("mock filter for %v %v:", arches, allowedSyscalls)
|
||||
for idx, insn := range program {
|
||||
|
||||
Reference in New Issue
Block a user