Erlang/OTP + Lua で HTTP テスト #2

非同期なテストを書きたい、その場合は状態を管理する必要がある。ただその場合は状態を持つ必要がある。その状態をどう実現するべきか。

とりあえず WebSocket でテストを書く場合を考えてみる。

local connection = ws.connect("ws://echo.websocket.org")
local ok, error = ws.send(connection, "spam!")
if error then
...
end
-- タイムアウトが 5000 ミリ秒
local result, error = ws.recv(connection, 5000)
if error then
...
end
assert(result == "spam!")

エラーハンドリングが地味だが、しょうがない。さて、これを Erlang で実現するのは簡単だが、 Erlang と Lua で行き来するとなると話は別だ。

Erlang で状態を管理して情報をやりとりする場合に使うのは Pid や Ref となる。ただ Pid や Ref は Lua には持ち込めない。

オリジナルの table を考えたりすればいけるだろうか。Pid を {“pid”, 1,2,3} の用にテーブルで表現する、そしてそのテーブルをもう一度 Pid に戻す、などだ。

上記の ws の例だけであれば、ユニークな数値だけで成り立つ。もちろん Erlang 側には Integer と Table の Index が必要にはなる。ただ難しい話ではない。

つまり、ユニークを Lua で保証する場合は数値で置き換えるのがとても綺麗そうだ。

まずは、ここまで。続く。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store