Skip to content

Commit c889f85

Browse files
committed
Add FETestHelpers.HeartbeatTracker.count/1
This makes it straight forward to get the count of heartbeats recorded on each tracker.
1 parent fb7ab76 commit c889f85

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

fe_test_helpers/lib/fe_test_helpers/heartbeat_tracker.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ defmodule FETestHelpers.HeartbeatTracker do
2020
end)
2121
end
2222

23+
@spec count(tracker) :: pos_integer
24+
def count(pid) do
25+
pid
26+
|> Agent.get(& &1)
27+
|> Impl.count()
28+
end
29+
2330
@spec list_heartbeat_timestamps(tracker) :: [DateTime.t()]
2431
def list_heartbeat_timestamps(pid) do
2532
pid

fe_test_helpers/lib/fe_test_helpers/heartbeat_tracker/impl.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ defmodule FETestHelpers.HeartbeatTracker.Impl do
1919
Enum.reverse(reversed_heartbeats)
2020
end
2121

22+
@spec count(t) :: non_neg_integer
23+
def count(reversed_heartbeats) when is_impl(reversed_heartbeats) do
24+
length(reversed_heartbeats)
25+
end
26+
2227
@spec list_heartbeat_intervals(t, System.time_unit()) :: [integer]
2328
def list_heartbeat_intervals(reversed_heartbeats, time_unit \\ :second) do
2429
reversed_heartbeats

fe_test_helpers/test/fe_test_helpers/heartbeat_tracker/impl_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ defmodule FETestHelpers.HeartbeatTracker.ImplTest do
1313
assert DateTime.diff(recorded_timestamp, DateTime.utc_now(), :millisecond) < 20
1414
end
1515

16+
property "count/1 returns the number of recorded heartbeats" do
17+
forall heartbeat_count <- non_neg_integer() do
18+
impl = Impl.new() |> record_heartbeat_multiple_times(heartbeat_count)
19+
20+
heartbeat_count == Impl.count(impl)
21+
end
22+
end
23+
1624
property "list_heartbeat_timestamps/1 returns the timestamps in the order received" do
1725
current_timestamp = DateTime.utc_now()
1826

fe_test_helpers/test/fe_test_helpers/heartbeat_tracker_test.exs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,28 @@ defmodule FETestHelpers.HeartbeatTrackerTest do
44

55
alias FETestHelpers.HeartbeatTracker
66

7-
property "record_heartbeat/1 stores the heartbeat" do
8-
forall [heartbeat_count <- non_neg_integer()] do
7+
property "record_heartbeat/1 stores the current timestamp in order each time it's called" do
8+
forall [heartbeat_count <- pos_integer()] do
99
{:ok, tracker} = HeartbeatTracker.start_link([])
1010

1111
record_heartbeat_multiple_times(tracker, heartbeat_count)
1212

13-
actual_heartbeat_count =
14-
tracker
15-
|> HeartbeatTracker.list_heartbeat_timestamps()
16-
|> length()
13+
timestamps = HeartbeatTracker.list_heartbeat_timestamps(tracker)
14+
15+
timestamps_sorted? =
16+
Enum.sort_by(timestamps, &DateTime.to_unix(&1, :nanosecond)) == timestamps
17+
18+
timestamps_sorted?
19+
end
20+
end
21+
22+
property "count/1 returns the number of heartbeats recorded" do
23+
forall [heartbeat_count <- non_neg_integer()] do
24+
{:ok, tracker} = HeartbeatTracker.start_link([])
25+
26+
record_heartbeat_multiple_times(tracker, heartbeat_count)
1727

18-
actual_heartbeat_count == heartbeat_count
28+
heartbeat_count == HeartbeatTracker.count(tracker)
1929
end
2030
end
2131

0 commit comments

Comments
 (0)