Skip to content

Commit fb6d032

Browse files
committed
Refactor tests
1 parent cfcf034 commit fb6d032

8 files changed

Lines changed: 46 additions & 107 deletions

File tree

loop_test.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
rm -rf _build
12
for i in {1..1000}; do mix test; done

test/crash_test.exs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Strom.CrashTest do
22
use ExUnit.Case, async: false
3+
import Strom.TestHelper
34

45
alias Strom.{Source, Source.ReadLines, Sink}
56
alias Strom.{Transformer, Splitter}
@@ -25,23 +26,6 @@ defmodule Strom.CrashTest do
2526
end
2627
end
2728

28-
def build_stream(list, sleep \\ 0) do
29-
{:ok, agent} = Agent.start_link(fn -> list end)
30-
31-
Stream.resource(
32-
fn -> agent end,
33-
fn agent ->
34-
Process.sleep(sleep)
35-
36-
Agent.get_and_update(agent, fn
37-
[] -> {{:halt, agent}, []}
38-
[datum | data] -> {{[datum], agent}, data}
39-
end)
40-
end,
41-
fn agent -> agent end
42-
)
43-
end
44-
4529
describe "crash in transformer" do
4630
setup do
4731
%{stream: build_stream([1, 2, 3, 4, 5])}
@@ -214,14 +198,6 @@ defmodule Strom.CrashTest do
214198
end
215199
end
216200

217-
defp wait_for_dying(pid) do
218-
if Process.alive?(pid) do
219-
wait_for_dying(pid)
220-
else
221-
true
222-
end
223-
end
224-
225201
describe "crash in splitter" do
226202
setup do
227203
%{stream: build_stream([1, 2, 3, 4, 5, 6], 1)}

test/gen_mix_test.exs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
defmodule Strom.GenMixTest do
22
use ExUnit.Case, async: true
3-
3+
import Strom.TestHelper
44
alias Strom.GenMix
55

66
@moduletag timeout: 5000
77

8-
def build_stream(list, sleep \\ 0) do
8+
def build_list_stream(list, sleep \\ 0) do
99
Stream.resource(
1010
fn -> list end,
1111
fn
@@ -28,7 +28,7 @@ defmodule Strom.GenMixTest do
2828
end
2929

3030
test "start and stop with simple stream" do
31-
stream = build_stream(Enum.to_list(1..10), 0)
31+
stream = build_list_stream(Enum.to_list(1..10), 0)
3232
gen_mix = GenMix.start(%GenMix{inputs: [:stream], outputs: %{stream: & &1}, opts: [chunk: 1]})
3333
%{stream: stream} = GenMix.call(%{stream: stream}, gen_mix)
3434
task = Task.async(fn -> Enum.to_list(stream) end)
@@ -43,7 +43,7 @@ defmodule Strom.GenMixTest do
4343

4444
flow =
4545
Enum.reduce(stream_names, %{}, fn name, acc ->
46-
Map.put(acc, name, build_stream(Enum.to_list(1..max), 0))
46+
Map.put(acc, name, build_list_stream(Enum.to_list(1..max), 0))
4747
end)
4848

4949
outputs =
@@ -64,20 +64,12 @@ defmodule Strom.GenMixTest do
6464
|> Task.await_many()
6565
|> List.flatten()
6666

67-
assert length(numbers) == 10000
67+
assert length(numbers) == 10_000
6868

6969
:ok = GenMix.stop(gen_mix)
7070
assert wait_for_dying(gen_mix.pid)
7171
end
7272

73-
defp wait_for_dying(pid) do
74-
if Process.alive?(pid) do
75-
wait_for_dying(pid)
76-
else
77-
true
78-
end
79-
end
80-
8173
test "call one by one" do
8274
flow = %{numbers1: [1, 2, 3, 4, 5], numbers2: [6, 7, 8, 9, 10], numbers3: [0, 0, 0, 0, 0]}
8375

@@ -248,8 +240,8 @@ defmodule Strom.GenMixTest do
248240
end
249241

250242
test "two streams with different rates, be sure that quick stream doesn't block the slow one" do
251-
quick = build_stream(List.duplicate([101], 10000), 0)
252-
slow = build_stream(Enum.to_list(1..10), 1)
243+
quick = build_list_stream(List.duplicate([101], 10_000), 0)
244+
slow = build_list_stream(Enum.to_list(1..10), 1)
253245

254246
outputs = %{
255247
quick: fn n -> n > 10 end,

test/replace_test.exs

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,11 @@
11
defmodule Strom.ReplaceTest do
22
use ExUnit.Case, async: false
3-
3+
import Strom.TestHelper
44
alias Strom.Transformer
55
alias Strom.Composite
66

77
@moduletag timeout: 10_000
88

9-
def build_stream(list, sleep \\ 0) do
10-
{:ok, agent} = Agent.start_link(fn -> list end)
11-
12-
Stream.resource(
13-
fn -> agent end,
14-
fn agent ->
15-
Process.sleep(sleep)
16-
17-
Agent.get_and_update(agent, fn
18-
[] -> {{:halt, agent}, []}
19-
[datum | data] -> {{[datum], agent}, data}
20-
end)
21-
end,
22-
fn agent -> agent end
23-
)
24-
end
25-
269
describe "delete components" do
2710
test "delete one transformer" do
2811
stream = build_stream(Enum.to_list(1001..1020), 1)
@@ -108,16 +91,15 @@ defmodule Strom.ReplaceTest do
10891
list3 = Task.await(task3)
10992

11093
Composite.stop(composite)
111-
# one event can be lost, I'll address this later
11294
assert length(list1) == 10_000
113-
# assert [10_011 | _] = list1
114-
# assert [20_000 | _] = Enum.reverse(list1)
95+
assert [10_011 | _] = list1
96+
assert [20_000 | _] = Enum.reverse(list1)
11597
assert length(list2) == 10_000
116-
# assert [20_011 | _] = list2
117-
# assert [30_000 | _] = Enum.reverse(list2)
98+
assert [20_011 | _] = list2
99+
assert [30_000 | _] = Enum.reverse(list2)
118100
assert length(list3) == 10_000
119-
# assert [30_011 | _] = list3
120-
# assert [40_000 | _] = Enum.reverse(list3)
101+
assert [30_011 | _] = list3
102+
assert [40_000 | _] = Enum.reverse(list3)
121103
end
122104

123105
test "delete two transformers" do
@@ -200,14 +182,6 @@ defmodule Strom.ReplaceTest do
200182
Composite.stop(composite)
201183
end
202184

203-
defp wait_for_dying(pid) do
204-
if Process.alive?(pid) do
205-
wait_for_dying(pid)
206-
else
207-
true
208-
end
209-
end
210-
211185
# test "when there are two streams" do
212186
# # TODO
213187
# end

test/sink_test.exs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Strom.SinkTest do
22
use ExUnit.Case, async: true
3+
import Strom.TestHelper
34
doctest Strom.Sink
45

56
alias Strom.Source
@@ -80,12 +81,4 @@ defmodule Strom.SinkTest do
8081
assert wait_for_dying(agent)
8182
end
8283
end
83-
84-
defp wait_for_dying(pid) do
85-
if Process.alive?(pid) do
86-
wait_for_dying(pid)
87-
else
88-
true
89-
end
90-
end
9184
end

test/source_test.exs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule Strom.SourceTest do
22
use ExUnit.Case, async: true
33
doctest Strom.Source
4-
4+
import Strom.TestHelper
55
alias Strom.Source
66
alias Strom.Source.ReadLines
77

@@ -128,12 +128,4 @@ defmodule Strom.SourceTest do
128128
assert wait_for_dying(agent)
129129
end
130130
end
131-
132-
defp wait_for_dying(pid) do
133-
if Process.alive?(pid) do
134-
wait_for_dying(pid)
135-
else
136-
true
137-
end
138-
end
139131
end

test/test_helper.exs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,28 @@
11
ExUnit.start()
2+
3+
defmodule Strom.TestHelper do
4+
def build_stream(list, sleep \\ 0) do
5+
{:ok, agent} = Agent.start_link(fn -> list end)
6+
7+
Stream.resource(
8+
fn -> agent end,
9+
fn agent ->
10+
Process.sleep(sleep)
11+
12+
Agent.get_and_update(agent, fn
13+
[] -> {{:halt, agent}, []}
14+
[datum | data] -> {{[datum], agent}, data}
15+
end)
16+
end,
17+
fn agent -> agent end
18+
)
19+
end
20+
21+
def wait_for_dying(pid) do
22+
if Process.alive?(pid) do
23+
wait_for_dying(pid)
24+
else
25+
true
26+
end
27+
end
28+
end

test/transformer_test.exs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,10 @@
11
defmodule Strom.TransformerTest do
22
use ExUnit.Case, async: true
3+
import Strom.TestHelper
34
doctest Strom.Transformer
45

56
alias Strom.Transformer
67

7-
def build_stream(list, sleep \\ 0) do
8-
{:ok, agent} = Agent.start_link(fn -> list end)
9-
10-
Stream.resource(
11-
fn -> agent end,
12-
fn agent ->
13-
Process.sleep(sleep)
14-
15-
Agent.get_and_update(agent, fn
16-
[] -> {{:halt, agent}, []}
17-
[datum | data] -> {{[datum], agent}, data}
18-
end)
19-
end,
20-
fn agent -> agent end
21-
)
22-
end
23-
248
test "start and stop" do
259
transformer =
2610
:stream

0 commit comments

Comments
 (0)