| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Split the 2494-line scenarios.go monolith into 14 focused files by
syscall category: open, readwrite, close, dup, fcntl, rename, link,
unlink, dir, stat, sync, truncate, iouring, plus the slimmed-down
scenarios.go containing only the registry map, makeTempDir, and crash.
Extracted rawLink, rawSymlink, rawReadlink helpers in scenario_link.go
to reduce code duplication in linkBasic.
Task: #349 (Go best practices: split oversized scenarios file)
Amp-Thread-ID: https://ampcode.com/threads/T-019c81c6-e1b6-747a-9144-40f6be997e60
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add two new scenarios and tests:
- iouring-enter-ebadf: io_uring_enter with invalid fd 99999
- iouring-register-ebadf: io_uring_register with invalid fd 99999
Both verify ior captures the tracepoint even when the syscall fails.
Task: 348
Amp-Thread-ID: https://ampcode.com/threads/T-019c81bb-a460-7298-a25a-fa33502272b9
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add two negative test scenarios:
- truncate-enoent: SYS_TRUNCATE on nonexistent file, expects ENOENT
- truncate-ftruncate-ebadf: SYS_FTRUNCATE on invalid fd 99999, expects EBADF
Both verify ior captures tracepoints even when syscalls fail.
Amp-Thread-ID: https://ampcode.com/threads/T-019c81b7-9641-763e-b99e-20a0d3552005
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three EBADF scenarios testing ior's ability to capture sync-related
tracepoints even when the underlying syscall fails:
- sync-fsync-ebadf: fsync on invalid fd, expects enter_fsync
- sync-fdatasync-ebadf: fdatasync on invalid fd, expects enter_fdatasync
- sync-file-range-ebadf: sync_file_range on invalid fd, expects enter_sync_file_range
Amp-Thread-ID: https://ampcode.com/threads/T-019c81b4-216a-732c-90b1-e6771e27ed75
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative test scenarios for stat-family syscalls:
- stat-enoent: SYS_STAT on nonexistent file (ENOENT)
- stat-access-enoent: SYS_ACCESS on nonexistent file (ENOENT, since
tests run as root and EACCES is bypassed)
- stat-fstat-ebadf: SYS_FSTAT on invalid fd 99999 (EBADF)
Each scenario verifies that ior captures the tracepoint on syscall
entry even when the syscall fails.
Amp-Thread-ID: https://ampcode.com/threads/T-019c81af-d01d-75db-8a92-37951fb1503c
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative test scenarios for directory operations:
- dir-mkdir-eexist: SYS_MKDIR on existing directory (EEXIST)
- dir-chdir-enoent: SYS_CHDIR to nonexistent directory (ENOENT)
- dir-getdents-ebadf: SYS_GETDENTS64 with invalid fd (EBADF)
All use raw syscalls to hit exact tracepoints. Tests verify ior
captures events even when syscalls fail (entry-side capture).
Amp-Thread-ID: https://ampcode.com/threads/T-019c81ab-0d62-726e-b859-91b4898be6fe
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative test scenarios for unlink syscall family:
- unlink-enoent: SYS_UNLINK on nonexistent file (ENOENT)
- unlink-rmdir-notempty: SYS_RMDIR on non-empty directory (ENOTEMPTY)
- unlink-unlinkat-enoent: SYS_UNLINKAT on nonexistent file (ENOENT)
All scenarios use raw syscalls to hit exact tracepoints and verify
ior captures them on entry even when the kernel returns an error.
Amp-Thread-ID: https://ampcode.com/threads/T-019c81a6-6612-7247-9d54-6da5b63a38b4
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative scenarios and tests:
- link-enoent: hard link to nonexistent source (ENOENT) via raw SYS_LINK
- link-symlink-eexist: symlink where target already exists (EEXIST) via raw SYS_SYMLINK
- link-readlinkat-einval: readlinkat on non-symlink file (EINVAL) via SYS_READLINKAT
All use raw syscalls to hit exact tracepoints. ior captures on syscall
entry, so even failed syscalls have their arguments recorded.
Amp-Thread-ID: https://ampcode.com/threads/T-019c81a2-693b-716f-9ed2-25a674f1fc9a
Co-authored-by: Amp <amp@ampcode.com>
|
|
- rename-enoent: rename nonexistent file via SYS_RENAME (ENOENT)
- rename-noreplace: renameat2 with RENAME_NOREPLACE on existing target (EEXIST)
Both verify ior captures tracepoints on entry even when syscall fails.
Amp-Thread-ID: https://ampcode.com/threads/T-019c819e-cdae-7777-9be6-992ca8a7b96b
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add two negative scenarios:
- fcntl-invalid-fd: calls SYS_FCNTL F_GETFL on invalid fd 99999 (EBADF)
- fcntl-dupfd-max: calls F_DUPFD with minfd=1<<30 beyond RLIMIT_NOFILE (EINVAL)
Both verify ior captures enter_fcntl tracepoints even when syscalls fail.
Amp-Thread-ID: https://ampcode.com/threads/T-019c819b-5673-75ab-8eb4-227b6cf56b38
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative test scenarios for dup syscalls:
- dup-invalid-fd: dup on invalid fd 99999 (EBADF)
- dup2-same-fd: dup2(fd, fd) no-op case (POSIX documented behavior)
- dup3-invalid-flags: dup3 with 0xBAD flags (EINVAL)
All verify ior captures the tracepoint even when the syscall fails,
since BPF reads arguments on syscall entry before execution.
Task: 348
Amp-Thread-ID: https://ampcode.com/threads/T-019c8196-6186-7054-a4e5-640fce69e493
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add three negative scenarios to verify ior captures tracepoints even when
close syscalls fail:
- close-invalid-fd: close an fd (99999) that was never opened (EBADF)
- close-double-close: open a file, close it, close same fd again (EBADF)
- close-range-empty: close_range on high fd range with no open fds
Task: 348
Amp-Thread-ID: https://ampcode.com/threads/T-019c8190-c9ae-776e-b00d-476207d8c10e
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add four negative scenarios that verify ior captures tracepoints even
when syscalls fail:
- readwrite-wronly-read: read from O_WRONLY fd (EBADF)
- readwrite-rdonly-write: write to O_RDONLY fd (EBADF)
- readwrite-pread-invalid: pread64 with negative offset (EINVAL)
- readwrite-pwrite-invalid: pwrite64 with negative offset (EINVAL)
Amp-Thread-ID: https://ampcode.com/threads/T-019c818c-ec91-7673-a5ba-e9b2ba53379b
Co-authored-by: Amp <amp@ampcode.com>
|
|
- openEnoent: verifies ior captures enter_openat even when syscall fails (ENOENT)
- openRdonlyWrite: verifies tracing of open + failed write to read-only fd
- openPidFilter: verifies child process I/O is excluded by PID filtering
- AssertEventsAbsent helper with zero-value guard and 6 unit tests
Task: 348
Amp-Thread-ID: https://ampcode.com/threads/T-019c8185-55f4-72f0-8ddb-3be5e4002c0d
Co-authored-by: Amp <amp@ampcode.com>
|
|
- rename_test.go: Fix PathContains to use destination names (newname.txt,
renameat-new.txt, renameat2-new.txt) since name_events use Newname as
the path in ior output, not the source name
- open_test.go: Change expected tracepoint from enter_openat to enter_creat
- scenarios.go: Use raw SYS_CREAT instead of Go's syscall.Creat which
wraps openat on amd64, so the creat tracepoint is actually exercised
- Created task 350 for close_range path resolution bug found during review
Amp-Thread-ID: https://ampcode.com/threads/T-019c8178-1c1f-7509-9ac9-bd48b970945b
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add crash scenario to ioworkload that exits non-zero, and a test
verifying the harness returns a clear error mentioning 'workload',
reports a valid PID, and returns no records.
Amp-Thread-ID: https://ampcode.com/threads/T-019c815e-6fb6-714a-a4db-37522416ea9a
Co-authored-by: Amp <amp@ampcode.com>
|
|
Implement iouring_test.go with tests for io_uring_setup, io_uring_enter,
and io_uring_register tracepoints. Add corresponding workload scenarios
using raw syscalls (425, 426, 427) since Go stdlib doesn't wrap io_uring
on amd64.
- iouring-setup: creates io_uring instance via io_uring_setup(2)
- iouring-enter: creates ring, calls io_uring_enter(2) with zero ops
- iouring-register: creates ring, calls io_uring_register(2) with PROBE
Task #343
Amp-Thread-ID: https://ampcode.com/threads/T-019c8149-2aa6-75fb-88f3-dd6bd3a2b654
Co-authored-by: Amp <amp@ampcode.com>
|
|
- truncate-basic: tests SYS_TRUNCATE (path-based) via syscall.Truncate
- truncate-ftruncate: tests SYS_FTRUNCATE (fd-based) via syscall.Ftruncate
- Both syscall wrappers use direct SYS_* calls on amd64 (no *at wrapping)
Task #343
Amp-Thread-ID: https://ampcode.com/threads/T-019c8145-7437-7218-95ff-4cb451e18655
Co-authored-by: Amp <amp@ampcode.com>
|
|
sync_file_range
- Add syncFdatasync, syncSync, syncSyncFileRange scenario functions
- Register sync-fdatasync, sync-sync, sync-sync-file-range in scenarios map
- Add sync_test.go with tests for all 4 sync-related syscalls
- sync is a null_event (no path); others are fd_events
- All use direct SYS_* syscalls on amd64 (no wrapper delegation)
Task: #343
Amp-Thread-ID: https://ampcode.com/threads/T-019c813f-e020-7558-86ce-be6fdbd96f98
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
- INTEGRATIONTESTS-PLAN.md: full design for e2e integration tests
- integrationtests/cmd/ioworkload: standalone binary with 13 I/O scenarios
- integrationtests/expectations.go: ExpectedEvent type and assertion helpers
- integrationtests/parse.go: .ior.zst parser producing TestResult
- Export IterRecord and LoadFromFile in flamegraph package
- Fix TraceId -> TraceID, StringByName returns error instead of panic
Amp-Thread-ID: https://ampcode.com/threads/T-019c8031-c106-757a-95a0-7a5457163ce7
Co-authored-by: Amp <amp@ampcode.com>
|