async def test_udpsession_handle_packet(fake_udp_socket_manager):
    session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce",
                                0, None, fake_udp_socket_manager)
    session.action = 123
    session.transaction_id = 124
    assert not session.is_failed
    fake_udp_socket_manager.response = struct.pack("!iiq", 123, 124, 126)
    await session.connect()
    assert not session.is_failed
async def test_udpsession_mismatch(fake_udp_socket_manager):
    session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce",
                                0, None, fake_udp_socket_manager)
    session.action = 123
    session.transaction_id = 124
    session.infohash_list = [b'\x00' * 20]
    assert not session.is_failed
    fake_udp_socket_manager.response = struct.pack("!ii", 123, 124)
    with pytest.raises(ValueError):
        await session.scrape()
    assert session.is_failed
async def test_udpsession_response_list_len_mismatch(fake_udp_socket_manager):
    session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce",
                                0, None, fake_udp_socket_manager)
    session.action = 123
    session.transaction_id = 123
    assert not session.is_failed
    session._infohash_list = [b"test", b"test2"]
    fake_udp_socket_manager.response = struct.pack("!iiiii", 123, 123, 0, 1, 2)
    with pytest.raises(ValueError):
        await session.scrape()
    assert session.is_failed
    await session.cleanup()
async def test_udpsession_handle_response_wrong_len(fake_udp_socket_manager):
    session = UdpTrackerSession("localhost", ("localhost", 4782), "/announce",
                                0, None, fake_udp_socket_manager)
    assert not session.is_failed
    fake_udp_socket_manager.response = b"too short"
    with pytest.raises(ValueError):
        await session.connect()
    assert session.is_failed

    # After receiving a correct packet, it session should still be in a failed state
    session.action = 123
    session.transaction_id = 124
    fake_udp_socket_manager.response = struct.pack("!iiq", 123, 124, 126)
    await session.connect()
    assert session.is_failed