analytics / test /plausible /ingestion /write_buffer_test.exs
Leon4gr45's picture
Upload folder using huggingface_hub (part 5)
c9c49ab verified
Raw
History Blame Contribute Delete
1.42 kB
defmodule Plausible.Ingestion.WriteBufferTest do
use ExUnit.Case, async: true
import ExUnit.CaptureLog
alias Plausible.Ingestion.WriteBuffer
@compile_time_opts WriteBuffer.compile_time_prepare(Plausible.ClickhouseEventV2)
test "keeps running and logs the reason when a linked process exits", %{test: test} do
opts = [
header: @compile_time_opts.header,
insert_sql: @compile_time_opts.insert_sql,
insert_opts: @compile_time_opts.insert_opts,
# unique atom is at our disposal already
name: test,
# no need to ever flush automatically on slow CI
flush_interval_ms: 1_000_000_000
]
{:ok, pid} = WriteBuffer.start_link(opts)
# The buffer traps exits, so a linked process exiting delivers a real
# {:EXIT, from, reason} message to handle_info/2. Linking a throwaway
# process to the buffer and killing it reproduces the crash in #6382
# without sending a synthetic message.
child =
spawn(fn ->
Process.link(pid)
Process.sleep(:infinity)
end)
ref = Process.monitor(child)
log =
capture_log(fn ->
Process.exit(child, :shutdown)
assert_receive {:DOWN, ^ref, :process, ^child, _}, 1_000
assert Process.alive?(pid)
assert WriteBuffer.flush(test) == :ok
end)
assert log =~ "received EXIT, keeping buffer alive"
assert log =~ ":shutdown"
end
end