Skip to content

Commit 7a60969

Browse files
committed
Add tests using Cachex
1 parent d14c402 commit 7a60969

File tree

10 files changed

+260
-19
lines changed

10 files changed

+260
-19
lines changed

.github/workflows/ci.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ jobs:
4242

4343
env:
4444
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
45+
CODECOV_TOKEN: '${{ secrets.CODECOV_TOKEN }}'
4546
MIX_ENV: test
4647
NEBULEX_PATH: nebulex
4748

@@ -97,13 +98,20 @@ jobs:
9798
- name: Run tests
9899
run: |
99100
epmd -daemon
100-
mix test --trace
101+
mix test --exclude cachex_test
101102
if: ${{ !matrix.coverage }}
102103

103104
- name: Run tests with coverage
104105
run: |
105106
epmd -daemon
106-
mix coveralls.github
107+
mix coveralls.json --exclude cachex_test
108+
if: ${{ matrix.coverage }}
109+
110+
- name: Upload coverage reports to Codecov
111+
uses: codecov/codecov-action@v5
112+
with:
113+
fail_ci_if_error: true
114+
flags: unittests-elixir-${{ matrix.elixir }}-otp-${{ matrix.otp }}
107115
if: ${{ matrix.coverage }}
108116

109117
- name: Restore PLT Cache

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
44
[Nebulex]: https://github.com/cabol/nebulex
55

6-
![CI](https://github.com/nebulex-project/nebulex_distributed/workflows/CI/badge.svg)
7-
[![Coverage Status](https://coveralls.io/repos/github/nebulex-project/nebulex_distributed/badge.svg?branch=main)](https://coveralls.io/github/nebulex-project/nebulex_distributed?branch=main)
6+
![CI](https://github.com/elixir-nebulex/nebulex_distributed/workflows/CI/badge.svg)
7+
[![Documentation](https://img.shields.io/badge/Documentation-ff69b4)](https://hexdocs.pm/nebulex_distributed)
88
[![Hex Version](https://img.shields.io/hexpm/v/nebulex_distributed.svg)](https://hex.pm/packages/nebulex_distributed)
9-
[![Docs](https://img.shields.io/badge/docs-hexpm-blue.svg)](https://hexdocs.pm/nebulex_distributed)
9+
[![Codecov](https://codecov.io/gh/elixir-nebulex/nebulex_distributed/graph/badge.svg)](https://codecov.io/gh/elixir-nebulex/nebulex_distributed/graph/badge.svg)
1010

1111
See the [online documentation][online_docs] for more information.
1212

@@ -128,9 +128,9 @@ Where `BENCH_TEST_FILE` can be any of:
128128

129129
Contributions to Nebulex are very welcome and appreciated!
130130

131-
Use the [issue tracker](https://github.com/nebulex-project/nebulex_distributed/issues)
131+
Use the [issue tracker](https://github.com/elixir-nebulex/nebulex_distributed/issues)
132132
for bug reports or feature requests. Open a
133-
[pull request](https://github.com/nebulex-project/nebulex_distributed/pulls)
133+
[pull request](https://github.com/elixir-nebulex/nebulex_distributed/pulls)
134134
when you are ready to contribute.
135135

136136
When submitting a pull request you should not update the

lib/nebulex/adapters/multilevel.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ defmodule Nebulex.Adapters.Multilevel do
220220
# Inherit default transaction implementation
221221
use Nebulex.Adapter.Transaction
222222

223+
# Inherit default observable implementation
224+
use Nebulex.Adapter.Observable
225+
223226
import Nebulex.Adapter
224227
import Nebulex.Utils
225228

lib/nebulex/adapters/partitioned.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,9 @@ defmodule Nebulex.Adapters.Partitioned do
343343
# Inherit default info implementation
344344
use Nebulex.Adapters.Common.Info
345345

346+
# Inherit default observable implementation
347+
use Nebulex.Adapter.Observable
348+
346349
# Inherit default keyslot implementation
347350
use Nebulex.Adapter.Keyslot
348351

mix.exs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule NebulexDistributed.MixProject do
22
use Mix.Project
33

4-
@source_url "https://github.com/nebulex-project/nebulex_distributed"
4+
@source_url "https://github.com/elixir-nebulex/nebulex_distributed"
55
@version "3.0.0-dev"
66
# @nbx_vsn "3.0.0"
77

@@ -15,13 +15,14 @@ defmodule NebulexDistributed.MixProject do
1515
deps: deps(),
1616

1717
# Testing
18-
test_coverage: [tool: ExCoveralls],
18+
test_coverage: [tool: ExCoveralls, export: "test-coverage"],
1919
preferred_cli_env: [
2020
check: :test,
2121
coveralls: :test,
2222
"coveralls.detail": :test,
2323
"coveralls.post": :test,
24-
"coveralls.html": :test
24+
"coveralls.html": :test,
25+
"coveralls.json": :test
2526
],
2627

2728
# Dialyzer
@@ -53,7 +54,7 @@ defmodule NebulexDistributed.MixProject do
5354
defp deps do
5455
[
5556
nebulex_dep(),
56-
{:nebulex_local, github: "nebulex-project/nebulex_local", branch: "main"},
57+
{:nebulex_local, github: "elixir-nebulex/nebulex_local", branch: "main"},
5758
{:telemetry, "~> 0.4 or ~> 1.0", optional: true},
5859

5960
# Test & Code Analysis
@@ -64,6 +65,8 @@ defmodule NebulexDistributed.MixProject do
6465
{:stream_data, "~> 1.1", only: [:dev, :test]},
6566
{:mimic, "~> 1.7", only: :test},
6667
{:ex2ms, "~> 1.6", only: :test},
68+
{:nebulex_adapters_cachex,
69+
github: "cabol/nebulex_adapters_cachex", branch: "v3.0.0-dev", only: :test},
6770

6871
# Benchmark Test
6972
{:benchee, "~> 1.3", only: [:dev, :test]},

mix.lock

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,34 @@
33
"benchee_html": {:hex, :benchee_html, "1.0.1", "1e247c0886c3fdb0d3f4b184b653a8d6fb96e4ad0d0389267fe4f36968772e24", [:mix], [{:benchee, ">= 0.99.0 and < 2.0.0", [hex: :benchee, repo: "hexpm", optional: false]}, {:benchee_json, "~> 1.0", [hex: :benchee_json, repo: "hexpm", optional: false]}], "hexpm", "b00a181af7152431901e08f3fc9f7197ed43ff50421a8347b0c80bf45d5b3fef"},
44
"benchee_json": {:hex, :benchee_json, "1.0.0", "cc661f4454d5995c08fe10dd1f2f72f229c8f0fb1c96f6b327a8c8fc96a91fe5", [:mix], [{:benchee, ">= 0.99.0 and < 2.0.0", [hex: :benchee, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "da05d813f9123505f870344d68fb7c86a4f0f9074df7d7b7e2bb011a63ec231c"},
55
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
6+
"cachex": {:hex, :cachex, "4.0.4", "192b5a34ae7f2c866cf835d796005c31ccf65e50ee973fbbbda6c773c0f40322", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:ex_hash_ring, "~> 6.0", [hex: :ex_hash_ring, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "a0417593fcca4b6bd0330bb3bbd507c379d5287213ab990dbc0dd704cedede0a"},
67
"credo": {:hex, :credo, "1.7.11", "d3e805f7ddf6c9c854fd36f089649d7cf6ba74c42bc3795d587814e3c9847102", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "56826b4306843253a66e47ae45e98e7d284ee1f95d53d1612bb483f88a8cf219"},
78
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
89
"dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"},
9-
"earmark_parser": {:hex, :earmark_parser, "1.4.43", "34b2f401fe473080e39ff2b90feb8ddfeef7639f8ee0bbf71bb41911831d77c5", [:mix], [], "hexpm", "970a3cd19503f5e8e527a190662be2cee5d98eed1ff72ed9b3d1a3d466692de8"},
10+
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
1011
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
12+
"eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"},
1113
"ex2ms": {:hex, :ex2ms, "1.7.0", "45b9f523d0b777667ded60070d82d871a37e294f0b6c5b8eca86771f00f82ee1", [:mix], [], "hexpm", "2589eee51f81f1b1caa6d08c990b1ad409215fe6f64c73f73c67d36ed10be827"},
12-
"ex_doc": {:hex, :ex_doc, "0.36.1", "4197d034f93e0b89ec79fac56e226107824adcce8d2dd0a26f5ed3a95efc36b1", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "d7d26a7cf965dacadcd48f9fa7b5953d7d0cfa3b44fa7a65514427da44eafd89"},
14+
"ex_doc": {:hex, :ex_doc, "0.37.3", "f7816881a443cd77872b7d6118e8a55f547f49903aef8747dbcb345a75b462f9", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "e6aebca7156e7c29b5da4daa17f6361205b2ae5f26e5c7d8ca0d3f7e18972233"},
15+
"ex_hash_ring": {:hex, :ex_hash_ring, "6.0.4", "bef9d2d796afbbe25ab5b5a7ed746e06b99c76604f558113c273466d52fa6d6b", [:mix], [], "hexpm", "89adabf31f7d3dfaa36802ce598ce918e9b5b33bae8909ac1a4d052e1e567d18"},
1316
"excoveralls": {:hex, :excoveralls, "0.18.5", "e229d0a65982613332ec30f07940038fe451a2e5b29bce2a5022165f0c9b157e", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "523fe8a15603f86d64852aab2abe8ddbd78e68579c8525ae765facc5eae01562"},
1417
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
1518
"ham": {:hex, :ham, "0.3.0", "7cd031b4a55fba219c11553e7b13ba73bd86eab4034518445eff1e038cb9a44d", [:mix], [], "hexpm", "7d6c6b73d7a6a83233876cc1b06a4d9b5de05562b228effda4532f9a49852bf6"},
1619
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
20+
"jumper": {:hex, :jumper, "1.0.2", "68cdcd84472a00ac596b4e6459a41b3062d4427cbd4f1e8c8793c5b54f1406a7", [:mix], [], "hexpm", "9b7782409021e01ab3c08270e26f36eb62976a38c1aa64b2eaf6348422f165e1"},
1721
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
1822
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
1923
"makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"},
20-
"mimic": {:hex, :mimic, "1.11.0", "49b126687520b6e179acab305068ad7d72bfea8abe94908a6c0c8ca0a5b7bdc7", [:mix], [{:ham, "~> 0.2", [hex: :ham, repo: "hexpm", optional: false]}], "hexpm", "8b16b1809ca947cffbaede146cd42da8c1c326af67a84b59b01c204d54e4f1a2"},
21-
"nebulex": {:git, "https://github.com/cabol/nebulex.git", "69162fd6d27e9a217a519a568e324265e89c470f", [branch: "v3.0.0-dev"]},
22-
"nebulex_local": {:git, "https://github.com/nebulex-project/nebulex_local.git", "900c49a5b38fc7eb5154cb11544f9878a8cb654b", [branch: "main"]},
24+
"mimic": {:hex, :mimic, "1.11.2", "6449c3b0faee9eb95a86c50752cac4062aa002226128a6e656d020523df8b9e5", [:mix], [{:ham, "~> 0.2", [hex: :ham, repo: "hexpm", optional: false]}], "hexpm", "4856ce771c96e3d115b56f931499b2178246bbb314bcc1f80369dfda754c4912"},
25+
"nebulex": {:git, "https://github.com/cabol/nebulex.git", "5acc41695bd5d1f8d9269901bfbef78cca4aabdd", [branch: "v3.0.0-dev"]},
26+
"nebulex_adapters_cachex": {:git, "https://github.com/cabol/nebulex_adapters_cachex.git", "c85d6d825009d4f7872e62d95d140ec40f468a8c", [branch: "v3.0.0-dev"]},
27+
"nebulex_local": {:git, "https://github.com/elixir-nebulex/nebulex_local.git", "455f6404e0d51a5a2897b777c88d534e1baf8ac1", [branch: "main"]},
2328
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
2429
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
30+
"sleeplocks": {:hex, :sleeplocks, "1.1.3", "96a86460cc33b435c7310dbd27ec82ca2c1f24ae38e34f8edde97f756503441a", [:rebar3], [], "hexpm", "d3b3958552e6eb16f463921e70ae7c767519ef8f5be46d7696cc1ed649421321"},
2531
"sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"},
2632
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
27-
"stream_data": {:hex, :stream_data, "1.1.2", "05499eaec0443349ff877aaabc6e194e82bda6799b9ce6aaa1aadac15a9fdb4d", [:mix], [], "hexpm", "129558d2c77cbc1eb2f4747acbbea79e181a5da51108457000020a906813a1a9"},
33+
"stream_data": {:hex, :stream_data, "1.2.0", "58dd3f9e88afe27dc38bef26fce0c84a9e7a96772b2925c7b32cd2435697a52b", [:mix], [], "hexpm", "eb5c546ee3466920314643edf68943a5b14b32d1da9fe01698dc92b73f89a9ed"},
2834
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
35+
"unsafe": {:hex, :unsafe, "1.0.2", "23c6be12f6c1605364801f4b47007c0c159497d0446ad378b5cf05f1855c0581", [:mix], [], "hexpm", "b485231683c3ab01a9cd44cb4a79f152c6f3bb87358439c6f68791b85c2df675"},
2936
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
defmodule Nebulex.Adapters.MultilevelInclusiveCachexTest do
2+
use Nebulex.NodeCase
3+
use Mimic
4+
5+
use Nebulex.CacheTestCase,
6+
except: [
7+
Nebulex.Cache.QueryableTest,
8+
Nebulex.Cache.QueryableExpirationTest,
9+
Nebulex.Cache.QueryableQueryErrorTest
10+
]
11+
12+
use Nebulex.MultilevelTest
13+
use Nebulex.MultilevelQueryableTest
14+
15+
import Nebulex.CacheCase
16+
17+
alias Nebulex.Distributed.TestCache.MultilevelCachex, as: Multilevel
18+
alias Nebulex.Distributed.TestCache.MultilevelCachex.{L1, L2, L3}
19+
20+
@levels [{L1, []}, {L2, []}, {L3, []}]
21+
22+
setup_with_dynamic_cache Multilevel, :multilevel_inclusive_cachex,
23+
inclusion_policy: :inclusive,
24+
levels: @levels
25+
26+
describe "multilevel inclusive" do
27+
test "get" do
28+
:ok = Enum.each(1..3, &Multilevel.put(&1, &1, level: &1))
29+
30+
assert Multilevel.get!(1) == 1
31+
refute Multilevel.get!(1, nil, level: 2)
32+
refute Multilevel.get!(1, nil, level: 3)
33+
34+
assert Multilevel.get!(2) == 2
35+
assert Multilevel.get!(2, nil, level: 1) == 2
36+
assert Multilevel.get!(2, nil, level: 2) == 2
37+
refute Multilevel.get!(2, nil, level: 3)
38+
39+
assert Multilevel.get!(3, nil, level: 3) == 3
40+
refute Multilevel.get!(3, nil, level: 1)
41+
refute Multilevel.get!(3, nil, level: 2)
42+
43+
assert Multilevel.get!(3) == 3
44+
assert Multilevel.get!(3, nil, level: 1) == 3
45+
assert Multilevel.get!(3, nil, level: 2) == 3
46+
assert Multilevel.get!(3, nil, level: 3) == 3
47+
end
48+
49+
test "get_all [replicate: true]" do
50+
:ok = Enum.each(1..3, &Multilevel.put(&1, &1, level: &1))
51+
52+
assert Multilevel.get_all!(in: [1]) |> Map.new() == %{1 => 1}
53+
refute Multilevel.get!(1, nil, level: 2)
54+
refute Multilevel.get!(1, nil, level: 3)
55+
56+
assert Multilevel.get_all!(in: [1, 2]) |> Map.new() == %{1 => 1, 2 => 2}
57+
assert Multilevel.get!(2, nil, level: 1) == 2
58+
assert Multilevel.get!(2, nil, level: 2) == 2
59+
refute Multilevel.get!(2, nil, level: 3)
60+
61+
assert Multilevel.get!(3, nil, level: 3) == 3
62+
refute Multilevel.get!(3, nil, level: 1)
63+
refute Multilevel.get!(3, nil, level: 2)
64+
65+
assert Multilevel.get_all!(in: [1, 2, 3]) |> Map.new() == %{1 => 1, 2 => 2, 3 => 3}
66+
assert Multilevel.get!(3, nil, level: 1) == 3
67+
assert Multilevel.get!(3, nil, level: 2) == 3
68+
assert Multilevel.get!(3, nil, level: 3) == 3
69+
end
70+
71+
test "get_all [replicate: false]" do
72+
:ok = Enum.each(1..3, &Multilevel.put(&1, &1, level: &1))
73+
74+
assert Multilevel.get_all!([in: [1]], replicate: false) |> Map.new() == %{1 => 1}
75+
refute Multilevel.get!(1, nil, level: 2)
76+
refute Multilevel.get!(1, nil, level: 3)
77+
78+
assert Multilevel.get_all!([in: [1, 2]], replicate: false) |> Map.new() == %{1 => 1, 2 => 2}
79+
refute Multilevel.get!(2, nil, level: 1)
80+
assert Multilevel.get!(2, nil, level: 2) == 2
81+
refute Multilevel.get!(2, nil, level: 3)
82+
83+
assert Multilevel.get!(3, nil, level: 3) == 3
84+
refute Multilevel.get!(3, nil, level: 1)
85+
refute Multilevel.get!(3, nil, level: 2)
86+
87+
assert Multilevel.get_all!([in: [1, 2, 3]], replicate: false) |> Map.new() == %{
88+
1 => 1,
89+
2 => 2,
90+
3 => 3
91+
}
92+
93+
refute Multilevel.get!(3, nil, level: 1)
94+
refute Multilevel.get!(3, nil, level: 2)
95+
assert Multilevel.get!(3, nil, level: 3) == 3
96+
end
97+
98+
test "get boolean" do
99+
:ok = Multilevel.put(1, true, level: 1)
100+
:ok = Multilevel.put(2, false, level: 1)
101+
102+
assert Multilevel.get!(1) == true
103+
assert Multilevel.get!(2) == false
104+
end
105+
106+
test "fetched value is replicated with TTL on previous levels" do
107+
assert Multilevel.put(:a, 1, ttl: 1000) == :ok
108+
assert Multilevel.ttl!(:a) > 0
109+
110+
_ = t_sleep(1100)
111+
112+
refute Multilevel.get!(:a, nil, level: 1)
113+
refute Multilevel.get!(:a, nil, level: 2)
114+
refute Multilevel.get!(:a, nil, level: 3)
115+
116+
assert Multilevel.put(:b, 1, level: 3) == :ok
117+
assert Multilevel.ttl!(:b) == :infinity
118+
assert Multilevel.expire!(:b, 1000)
119+
assert Multilevel.ttl!(:b) > 0
120+
refute Multilevel.get!(:b, nil, level: 1)
121+
refute Multilevel.get!(:b, nil, level: 2)
122+
assert Multilevel.get!(:b, nil, level: 3) == 1
123+
124+
assert Multilevel.get!(:b) == 1
125+
assert Multilevel.get!(:b, nil, level: 1) == 1
126+
assert Multilevel.get!(:b, nil, level: 2) == 1
127+
assert Multilevel.get!(:b, nil, level: 3) == 1
128+
129+
_ = t_sleep(1100)
130+
131+
refute Multilevel.get!(:b, nil, level: 1)
132+
refute Multilevel.get!(:b, nil, level: 2)
133+
refute Multilevel.get!(:b, nil, level: 3)
134+
end
135+
end
136+
end

0 commit comments

Comments
 (0)