| defmodule Plausible.Cache.AdapterTest do |
| use Plausible.DataCase, async: false |
|
|
| alias Plausible.Cache.Adapter |
|
|
| describe "adapter - partitioning" do |
| test "multiple partitions are routed to", %{test: test} do |
| name = :cache_partitions_test |
|
|
| iterations = 100 |
| partitions = 4 |
|
|
| patch_env(Adapter, [{name, partitions: partitions}]) |
|
|
| {:ok, _} = |
| Supervisor.start_link( |
| Adapter.child_specs(name, name, []), |
| strategy: :one_for_one, |
| name: :"cache_supervisor_#{test}" |
| ) |
|
|
| half = div(iterations, 2) |
| for i <- 1..half, do: Adapter.put(name, i, i) |
| Adapter.put_many(name, for(i <- half..iterations, do: {i, i})) |
|
|
| assert Adapter.size(name) == iterations |
|
|
| for i <- 1..iterations, do: assert(Adapter.get(name, i) == i) |
|
|
| assert name |> Adapter.keys() |> Enum.sort() == Enum.to_list(1..iterations) |
|
|
| for i <- 1..partitions do |
| assert ConCache.size(:"#{name}_#{i}") > 0 |
| assert ConCache.size(:"#{name}_#{i}") < iterations |
| end |
|
|
| assert ^iterations = Plausible.Cache.Adapter.size(name) |
| end |
| end |
| end |
|
|