diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-19 10:12:32 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-19 10:12:32 +0300 |
| commit | 127516b4bf63dc922df222825a9a6a1d7eacc214 (patch) | |
| tree | 3839a2f6a7f4f1bc713690678fc003d4e2be8a8c /internal/eventloop_socket_test.go | |
| parent | 32a19cf9fb1344c9b1a61054d7cf2c90edc3708a (diff) | |
u6: add socket/socketpair kind scaffolding and wiring
Diffstat (limited to 'internal/eventloop_socket_test.go')
| -rw-r--r-- | internal/eventloop_socket_test.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/eventloop_socket_test.go b/internal/eventloop_socket_test.go new file mode 100644 index 0000000..6b76813 --- /dev/null +++ b/internal/eventloop_socket_test.go @@ -0,0 +1,79 @@ +package internal + +import ( + "testing" + + "ior/internal/event" + "ior/internal/types" +) + +func TestHandleSocketExitTracksReturnedFd(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + + enter := &types.SocketEvent{ + EventType: types.ENTER_SOCKET_EVENT, + TraceId: types.SYS_ENTER_SOCKET, + Time: 100, + Pid: 42, + Tid: 43, + Family: 1, + Type: 2, + Protocol: 0, + } + exit := &types.RetEvent{ + EventType: types.EXIT_SOCKET_EVENT, + TraceId: types.SYS_EXIT_SOCKET, + Time: 200, + Ret: 55, + Pid: 42, + Tid: 43, + } + ep := &event.Pair{EnterEv: enter, ExitEv: exit} + + if ok := el.handleSocketExit(ep, enter); !ok { + t.Fatal("handleSocketExit returned false") + } + verifyFileDescriptor(t, el, 55, "socket:1:2:0") +} + +func TestHandleSocketpairExitTracksReturnedFds(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + + enter := &types.SocketpairEvent{ + EventType: types.ENTER_SOCKETPAIR_EVENT, + TraceId: types.SYS_ENTER_SOCKETPAIR, + Time: 100, + Pid: 77, + Tid: 78, + Family: 1, + Type: 1, + Protocol: 0, + Sv0: 61, + Sv1: 62, + } + exit := &types.RetEvent{ + EventType: types.EXIT_SOCKETPAIR_EVENT, + TraceId: types.SYS_EXIT_SOCKETPAIR, + Time: 200, + Ret: 0, + Pid: 77, + Tid: 78, + } + ep := &event.Pair{EnterEv: enter, ExitEv: exit} + + if ok := el.handleSocketpairExit(ep, enter); !ok { + t.Fatal("handleSocketpairExit returned false") + } + verifyFileDescriptor(t, el, 61, "socket:1:1:0") + verifyFileDescriptor(t, el, 62, "socket:1:1:0") +} + +func TestInitRawHandlersRegistersSocketEvents(t *testing.T) { + el := mustNewEventLoop(t, eventLoopConfig{}) + if _, ok := el.rawHandlers[types.ENTER_SOCKET_EVENT]; !ok { + t.Fatal("ENTER_SOCKET_EVENT handler is not registered") + } + if _, ok := el.rawHandlers[types.ENTER_SOCKETPAIR_EVENT]; !ok { + t.Fatal("ENTER_SOCKETPAIR_EVENT handler is not registered") + } +} |
