summaryrefslogtreecommitdiff
path: root/integrationtests
AgeCommit message (Collapse)Author
2026-03-13test: stabilize integration error-path workloadsPaul Buetow
2026-03-12docs: finalize libbpfgo upgrade guidancePaul Buetow
2026-03-12internal: embed BPF object into ior binaryPaul Buetow
2026-03-10integrationtests: return errors for pidfd syscall lookup (task 377)Paul Buetow
2026-03-06refactor: remove legacy iordata path map fallback (task 384)Paul Buetow
2026-03-05Normalize Go import grouping with local ior sectionPaul Buetow
2026-03-04Fix Go mistake findings and stabilize integration timingPaul Buetow
2026-02-26Add byte assertions for read/write integration scenariosPaul Buetow
2026-02-25Add TUI StreamEvent constructor and testsPaul Buetow
2026-02-24stability: remove unlink attach sleep and tighten svg/tui helpersPaul Buetow
2026-02-24flamegraph: remove external tool path and document native generationPaul Buetow
2026-02-24integrationtests: reduce parallel flakiness in syscall capturePaul Buetow
2026-02-23Use NumCPU*2 as default integration test parallelismPaul Buetow
2026-02-23Harden integration workloads against dropped event flakesPaul Buetow
2026-02-23Run integration tests in parallel by default and stabilize flaky scenariosPaul Buetow
2026-02-23tests: cover durationToPrev gap semanticsPaul Buetow
2026-02-23integrationtests: add opt-in parallel execution modePaul Buetow
2026-02-23integrationtests: add pidfd_getfd scenarios and testsPaul Buetow
2026-02-23Add getcwd tracing support and stabilize comm propagation testPaul Buetow
2026-02-23Fix integration trace expectations and fd/open event handlingPaul Buetow
2026-02-22some stuffPaul Buetow
2026-02-22Fix event comm attribution and reduce integration log noisePaul Buetow
2026-02-22Stabilize close invalid-fd integration test against empty commPaul Buetow
2026-02-22Add copy_file_range support and tracepoint attach testsPaul Buetow
2026-02-22Implement mmap/msync syscall support with unit and integration coveragePaul Buetow
2026-02-22Implement sync_file_range coverage and document mage world bootstrapPaul Buetow
2026-02-21Split ioworkload scenarios.go into per-category filesPaul Buetow
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>
2026-02-21Add negative integration tests for io_uring syscalls (EBADF)Paul Buetow
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>
2026-02-21Add negative integration tests for truncate syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for sync syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for stat syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for dir syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for unlink syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for link syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for rename syscalls (task 348)Paul Buetow
- 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>
2026-02-21Add negative integration tests for fcntl syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for dup syscallsPaul Buetow
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>
2026-02-21Add negative integration tests for close syscallsPaul Buetow
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>
2026-02-21Add negative integration tests for readwrite syscalls (task 348)Paul Buetow
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>
2026-02-21Add negative integration tests for open syscallsPaul Buetow
- 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>
2026-02-21Fix integration test expectations to test actual syscall outcomes (task 349)Paul Buetow
- 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>
2026-02-21integrationtests: address review comments on cleanup testsPaul Buetow
- Remove tautological temp dir tests that self-cleaned in script - Add TestCleanupLeakedWorkloadTempDirCaughtByAssertion that creates a dir without cleanup and verifies detection catches it - Inline snapshotWorkloadTempDirs into listWorkloadTempDirs - Add comment explaining assertNoNewWorkloadTempDirs cleanup behavior - Add non-empty check in OutputDir test to prevent vacuous pass - Fix .collapsed -> .collapsed.zst suffix consistency Amp-Thread-ID: https://ampcode.com/threads/T-019c8172-052c-74fe-8d8d-34a0529d082c Co-authored-by: Amp <amp@ampcode.com>
2026-02-21integrationtests: verify no temp files or artifacts leak after testsPaul Buetow
Add cleanup_test.go with 6 tests verifying: - OutputDir contains only expected file types (.ior.zst, .collapsed.zst, .svg, bpf symlink) - No ioworkload temp dirs leak on success or failure paths - OutputDir only has bpf symlink after ior failure (no stale output) - No artifacts leak outside the OutputDir - Leak detection mechanism works (negative test) Task: 343 Amp-Thread-ID: https://ampcode.com/threads/T-019c8172-052c-74fe-8d8d-34a0529d082c Co-authored-by: Amp <amp@ampcode.com>
2026-02-21Address review: strengthen multi-record assertions, add corrupt-zstd testPaul Buetow
- TestLoadTestResultMultipleRecordsSamePath now checks all fields per record - Fixed unchecked error return from zstd Write - Added TestLoadTestResultCorruptZstd for non-zstd file content Amp-Thread-ID: https://ampcode.com/threads/T-019c816d-5634-7387-8065-f67e38257019 Co-authored-by: Amp <amp@ampcode.com>
2026-02-21Add parse.go unit tests verifying .ior.zst deserialization and TestResult fieldsPaul Buetow
Tests cover: - All IterRecord fields (Path, TraceID, Comm, Pid, Tid, Flags, Cnt) - Multiple records with same path but different tracepoints - Empty .ior.zst file - Nonexistent file (error path) - Invalid/corrupt data (error path) Task 343: Verify parse.go correctly deserializes .ior.zst files Amp-Thread-ID: https://ampcode.com/threads/T-019c816d-5634-7387-8065-f67e38257019 Co-authored-by: Amp <amp@ampcode.com>
2026-02-21Add ior crash/timeout harness tests (task 343)Paul Buetow
- Add waitBoth unit tests: ior exit error, ior timeout, both timeout, both succeed — using real processes (true/false/sleep) - Add TestIorCrashReportsError: full harness test with fake ior binary that exits with error, verifying error mentions 'ior' and workload PID is returned - Add TestIorStartFailureCleansUpWorkload: verifies workload process is killed when ior binary doesn't exist, checking with signal 0 - Refactor waitBoth to accept grace duration parameter for testability (production code passes iorShutdownGrace, tests use 500ms) - Fix pipe drain in startWorkload: drain remaining stdout after reading PID so cmd.Wait() doesn't block on pending I/O - Add writeScript helper to helpers_test.go for creating fake binaries Co-authored-by: Amp <amp@ampcode.com> Amp-Thread-ID: https://ampcode.com/threads/T-019c8162-c1cf-7612-b8f5-84c61e3d2021
2026-02-21Verify harness handles workload crash/nonzero exit (task 343)Paul Buetow
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>
2026-02-21Fix integration test harness: symlink BPF object, increase grace period, ↵Paul Buetow
improve assertions - Symlink ior.bpf.o into output dir so ior finds it when run from temp dir - Increase iorShutdownGrace from 3s to 30s for BPF tracepoint unloading - Skip records with empty comm in AssertNoUnexpectedComm (BPF race condition) - Add diagnostic logging (up to 5 samples) in both AssertNoUnexpectedComm and AssertNoUnexpectedPID for easier debugging of test failures Amp-Thread-ID: https://ampcode.com/threads/T-019c814e-d6b6-72fb-aaf0-c49f5b3fd04e Co-authored-by: Amp <amp@ampcode.com>
2026-02-21Add io_uring integration tests and workload scenariosPaul Buetow
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>
2026-02-21Implement truncate_test.go + workload scenarios for truncate, ftruncatePaul Buetow
- 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>