Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Test Codes for mini-bandit HTTP2 Handler

handler_test.livemd

Test Codes for mini-bandit HTTP2 Handler

Section

defmodule Http2LikeClient do
  def send_frames do
    {:ok, socket} = :gen_tcp.connect(~c/localhost/, 1234, [:binary, active: false])

    # 1. HEADERS フレームを送信
    headers = "GET / HTTP/2"
    send_frame(socket, 0x01, headers)
    Process.sleep(50)
    receive_response(socket)

    # 2. DATA フレームを送信
    body = "This is the request body."
    send_frame(socket, 0x00, body)
    Process.sleep(50)
    receive_response(socket)

    :gen_tcp.close(socket)
  end

  defp send_frame(socket, type, payload) do
    len = byte_size(payload)

    frame =
      <> <>
        payload

    :ok = :gen_tcp.send(socket, frame)
    IO.puts("→ Sent frame type=0x#{Integer.to_string(type, 16)} len=#{len}")
  end

  defp receive_response(socket) do
    with {:ok, <>} <- :gen_tcp.recv(socket, 9),
         {:ok, payload} <- :gen_tcp.recv(socket, len) do
      IO.puts("← Received frame type=0x#{Integer.to_string(type, 16)} stream_id=#{stream_id}")
      IO.puts("← Payload: #{payload}")
    else
      {:error, reason} ->
        IO.puts("⚠️ Failed to receive response: #{inspect(reason)}")
    end
  end
end
Http2LikeClient.send_frames()