fn test_ebpf_sock_op_rst_on_establish()

in nfm-common/src/sock_ops_handler.rs [930:979]


    fn test_ebpf_sock_op_rst_on_establish() {
        let mock_ktime_us: u64 = 99;
        let cookie: u64 = 197;
        let mut mock_ebpf_maps = MockEbpfMaps::new();

        // Handle two events.
        run_sock_ops_test(
            cookie,
            BPF_SOCK_OPS_TCP_CONNECT_CB,
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_SYN_SENT,
            BPF_SOCK_OPS_STATE_CB,
            [BPF_TCP_SYN_SENT, BPF_TCP_ESTABLISHED],
            &mut mock_ebpf_maps,
            mock_ktime_us + 10,
            Ok(()),
        );

        // Handle a 3rd event that mimicks a TCP RST by transitioning from ESTABLISHED to CLOSED.
        let args: [u32; 2] = [BPF_TCP_ESTABLISHED, BPF_TCP_CLOSE];
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_ESTABLISHED,
            BPF_SOCK_OPS_STATE_CB,
            args,
            &mut mock_ebpf_maps,
            mock_ktime_us + 10,
            Ok(()),
        );

        // Validate results.
        let composite_key = CpuSockKey {
            sock_key: cookie,
            cpu_id: MOCK_CPU_ID,
        };
        let sock_wrap = mock_ebpf_maps.sock_stats(&composite_key);
        assert_eq!(
            sock_wrap.state_flags,
            SockStateFlags::ENTERED_ESTABLISH
                | SockStateFlags::STARTED_CLOSURE
                | SockStateFlags::TERMINATED_FROM_EST
                | SockStateFlags::CLOSED
        );
        assert_eq!(mock_ebpf_maps.counters().state_change_events, 2);
    }