|
1 | 1 | defmodule ExLimiter.Storage.PG2Shard.PrunerTest do |
2 | 2 | use ExLimiter.DataCase, async: false |
| 3 | + |
3 | 4 | alias ExLimiter.Storage.PG2Shard.Pruner |
4 | 5 |
|
5 | | - @table_name :pruner_test |
6 | 6 | describe "#remove" do |
7 | 7 | test "it will remove stale bucket entries" do |
8 | | - table = :ets.new(@table_name, [:set, :public, read_concurrency: true, write_concurrency: true]) |
| 8 | + table = :ets.new(:pruner_test, [:set, :public, read_concurrency: true, write_concurrency: true]) |
9 | 9 |
|
10 | | - :ets.insert(table, {"bucket", :os.system_time(:millisecond), %ExLimiter.Bucket{}}) |
| 10 | + :ets.insert(table, {"bucket", System.system_time(:millisecond), %ExLimiter.Bucket{}}) |
11 | 11 | assert Pruner.remove(table, 1) == 1 |
12 | 12 | assert :ets.lookup(table, "bucket") == [] |
13 | 13 | end |
14 | 14 | end |
| 15 | + |
| 16 | + describe "#expire" do |
| 17 | + def expiration_handler([:ex_limiter, :shards, :expirations], %{value: count}, _, %{test_pid: test_pid}) do |
| 18 | + send(test_pid, {:expired_records, count}) |
| 19 | + end |
| 20 | + |
| 21 | + test "it will remove expired bucket entries" do |
| 22 | + table_name = :expired_test |
| 23 | + table = :ets.new(table_name, [:set, :public, read_concurrency: true, write_concurrency: true]) |
| 24 | + |
| 25 | + # Listen for the expirations events so we can assert on it |
| 26 | + test_pid = self() |
| 27 | + |
| 28 | + :telemetry.attach("expiration-test", [:ex_limiter, :shards, :expirations], &__MODULE__.expiration_handler/4, %{ |
| 29 | + test_pid: test_pid |
| 30 | + }) |
| 31 | + |
| 32 | + on_exit(fn -> :telemetry.detach("expiration-test") end) |
| 33 | + |
| 34 | + time = System.system_time(:millisecond) - to_timeout(second: 100) |
| 35 | + |
| 36 | + :ets.insert(table, {"bucket", time, %ExLimiter.Bucket{}}) |
| 37 | + |
| 38 | + assert Pruner.handle_info(:expire, table) == {:noreply, table} |
| 39 | + |
| 40 | + assert_receive {:expired_records, 1}, to_timeout(second: 5) |
| 41 | + assert :ets.lookup(table, "bucket") == [] |
| 42 | + end |
| 43 | + end |
15 | 44 | end |
0 commit comments