diff --git a/.github/workflows/commit.yaml b/.github/workflows/commit.yaml index fc3027c726..50e5df75e1 100644 --- a/.github/workflows/commit.yaml +++ b/.github/workflows/commit.yaml @@ -152,6 +152,43 @@ jobs: # This runs all tests compiled above in sequence. Note: This mounts /tmp to allow t.TempDir() in tests. run: find . -name "*.test" | xargs -Itestbin docker run --platform linux/${{ matrix.arch }} -v $(pwd)/testbin:/test -v $(pwd)/wazerocli:/wazero -e WAZEROCLI=/wazero --tmpfs /tmp --rm -t wazero:test + test_bsd: + name: amd64, ${{ matrix.os.name }} + runs-on: ubuntu-22.04 + strategy: + fail-fast: false # don't fail fast as sometimes failures are OS specific + matrix: + os: + - name: freebsd + version: "14.1" + - name: openbsd + version: "7.5" + - name: netbsd + version: "10.0" + + steps: + - uses: actions/checkout@v3 + + - name: Build test binaries + run: | + go list -f '{{.Dir}}' ./... | egrep -v 'imports|sysfs' | xargs -Ipkg go test pkg -c -o pkg.test + go build -o wazerocli ./cmd/wazero + env: + GOOS: ${{ matrix.os.name }} + + - name: Run built test binaries + uses: cross-platform-actions/action@v0.25.0 + env: + WAZEROCLI: ./wazerocli + with: + operating_system: ${{ matrix.os.name }} + version: ${{ matrix.os.version }} + shell: bash + sync_files: runner-to-vm + environment_variables: WAZEROCLI + # This runs all tests compiled above in sequence. + run: find . -name "*.test" | xargs -Itestbin nice testbin -test.short + # This ensures that internal/integration_test/fuzz is runnable, and is not intended to # run full-length fuzzing while trying to find low-hanging frontend bugs. fuzz: diff --git a/README.md b/README.md index f020be99a7..d478dd0321 100644 --- a/README.md +++ b/README.md @@ -101,9 +101,11 @@ We currently test Linux (Ubuntu and scratch), MacOS and Windows as packaged by * Interpreter * Linux is tested on amd64 (native) as well arm64 and riscv64 via emulation. * MacOS and Windows are only tested on amd64. + * FreeBSD, NetBSD and OpenBSD are only tested on amd64. * Compiler * Linux is tested on amd64 (native) as well arm64 via emulation. * MacOS and Windows are only tested on amd64. + * FreeBSD is only tested on amd64. wazero has no dependencies and doesn't require CGO. This means it can also be embedded in an application that doesn't use an operating system. This is a main diff --git a/internal/sysfs/file_test.go b/internal/sysfs/file_test.go index 9bcd1a2201..b2ef360e20 100644 --- a/internal/sysfs/file_test.go +++ b/internal/sysfs/file_test.go @@ -1000,25 +1000,6 @@ func TestFileTruncate(t *testing.T) { }) } -func TestFileUtimens(t *testing.T) { - switch runtime.GOOS { - case "linux", "darwin": // supported - case "freebsd": // TODO: support freebsd w/o CGO - case "windows": - default: // expect ENOSYS and callers need to fall back to Utimens - t.Skip("unsupported GOOS", runtime.GOOS) - } - - testUtimens(t, true) - - testEBADFIfFileClosed(t, func(f experimentalsys.File) experimentalsys.Errno { - return f.Utimens(experimentalsys.UTIME_OMIT, experimentalsys.UTIME_OMIT) - }) - testEBADFIfDirClosed(t, func(d experimentalsys.File) experimentalsys.Errno { - return d.Utimens(experimentalsys.UTIME_OMIT, experimentalsys.UTIME_OMIT) - }) -} - func TestNewStdioFile(t *testing.T) { // simulate regular file attached to stdin f, err := os.CreateTemp(t.TempDir(), "somefile") diff --git a/internal/sysfs/futimens_test.go b/internal/sysfs/futimens_test.go index 5e690b0dfc..abb66e44d7 100644 --- a/internal/sysfs/futimens_test.go +++ b/internal/sysfs/futimens_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/tetratelabs/wazero/experimental/sys" + experimentalsys "github.com/tetratelabs/wazero/experimental/sys" "github.com/tetratelabs/wazero/internal/platform" "github.com/tetratelabs/wazero/internal/testing/require" ) @@ -22,6 +23,17 @@ func TestUtimens(t *testing.T) { testUtimens(t, false) } +func TestFileUtimens(t *testing.T) { + testUtimens(t, true) + + testEBADFIfFileClosed(t, func(f experimentalsys.File) experimentalsys.Errno { + return f.Utimens(experimentalsys.UTIME_OMIT, experimentalsys.UTIME_OMIT) + }) + testEBADFIfDirClosed(t, func(d experimentalsys.File) experimentalsys.Errno { + return d.Utimens(experimentalsys.UTIME_OMIT, experimentalsys.UTIME_OMIT) + }) +} + func testUtimens(t *testing.T, futimes bool) { // Note: This sets microsecond granularity because Windows doesn't support // nanosecond. diff --git a/sys/stat_test.go b/sys/stat_test.go index 32d0ffeac7..f58b16535e 100644 --- a/sys/stat_test.go +++ b/sys/stat_test.go @@ -117,7 +117,7 @@ func Test_NewStat_t(t *testing.T) { tc := tt t.Run(tc.name, func(t *testing.T) { st := sys.NewStat_t(tc.info) - if tc.expectDevIno && runtime.GOOS != "windows" { + if tc.expectDevIno && (runtime.GOOS == "linux" || runtime.GOOS == "darwin" || runtime.GOOS == "freebsd") { require.NotEqual(t, uint64(0), st.Dev) require.NotEqual(t, uint64(0), st.Ino) } else {