Skip to content

Commit 180a4e5

Browse files
committed
Remove unnecessary test file
1 parent df77232 commit 180a4e5

File tree

2 files changed

+237
-238
lines changed

2 files changed

+237
-238
lines changed

test/test_helper.exs

+237-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,242 @@
11
ExUnit.start(capture_log: true, assert_receive_timeout: 500)
22

3-
Code.require_file("test_support.exs", __DIR__)
3+
defmodule TestHelpers do
4+
def poll(fun, attempts \\ 5) do
5+
try do
6+
fun.()
7+
rescue
8+
e ->
9+
if attempts > 0 do
10+
:timer.sleep(50)
11+
poll(fun, attempts - 1)
12+
else
13+
reraise e, __STACKTRACE__
14+
end
15+
end
16+
end
17+
end
18+
19+
defmodule TestConnection do
20+
defmacro __using__(opts) do
21+
quote do
22+
def start_link(opts2) do
23+
defaults = [backoff_type: :exp, backoff_min: 200]
24+
TestConnection.start_link(opts2 ++ unquote(opts) ++ defaults)
25+
end
26+
27+
def disconnect_all(pool, checkout_count, opts2 \\ []) do
28+
DBConnection.disconnect_all(pool, checkout_count, opts2 ++ unquote(opts))
29+
end
30+
31+
def run(pool, fun, opts2 \\ []) do
32+
DBConnection.run(pool, fun, opts2 ++ unquote(opts))
33+
end
34+
35+
def transaction(pool, fun, opts2 \\ []) do
36+
DBConnection.transaction(pool, fun, opts2 ++ unquote(opts))
37+
end
38+
39+
defdelegate rollback(conn, reason), to: DBConnection
40+
defdelegate get_connection_metrics(pool, opts \\ []), to: DBConnection
41+
42+
def prepare(pool, query, opts2 \\ []) do
43+
DBConnection.prepare(pool, query, opts2 ++ unquote(opts))
44+
end
45+
46+
def prepare!(pool, query, opts2 \\ []) do
47+
DBConnection.prepare!(pool, query, opts2 ++ unquote(opts))
48+
end
49+
50+
def prepare_execute(pool, query, params, opts2 \\ []) do
51+
DBConnection.prepare_execute(pool, query, params, opts2 ++ unquote(opts))
52+
end
53+
54+
def prepare_execute!(pool, query, params, opts2 \\ []) do
55+
DBConnection.prepare_execute!(pool, query, params, opts2 ++ unquote(opts))
56+
end
57+
58+
def execute(pool, query, params, opts2 \\ []) do
59+
DBConnection.execute(pool, query, params, opts2 ++ unquote(opts))
60+
end
61+
62+
def execute!(pool, query, params, opts2 \\ []) do
63+
DBConnection.execute!(pool, query, params, opts2 ++ unquote(opts))
64+
end
65+
66+
def stream(conn, query, params, opts2 \\ []) do
67+
DBConnection.stream(conn, query, params, opts2 ++ unquote(opts))
68+
end
69+
70+
def prepare_stream(conn, query, params, opts2 \\ []) do
71+
DBConnection.prepare_stream(conn, query, params, opts2 ++ unquote(opts))
72+
end
73+
74+
def close(pool, query, opts2 \\ []) do
75+
DBConnection.close(pool, query, opts2 ++ unquote(opts))
76+
end
77+
78+
def close!(pool, query, opts2 \\ []) do
79+
DBConnection.close!(pool, query, opts2 ++ unquote(opts))
80+
end
81+
82+
def status(pool, opts2 \\ []) do
83+
DBConnection.status(pool, opts2 ++ unquote(opts))
84+
end
85+
86+
defoverridable start_link: 1
87+
end
88+
end
89+
90+
def start_link(opts), do: DBConnection.start_link(__MODULE__, opts)
91+
92+
def connect(opts) do
93+
Process.flag(:trap_exit, true)
94+
put_agent_from_opts(opts)
95+
TestAgent.eval(:connect, [opts])
96+
end
97+
98+
def disconnect(err, state) do
99+
TestAgent.eval(:disconnect, [err, state])
100+
end
101+
102+
def checkout(state) do
103+
{:ok, state}
104+
end
105+
106+
def checkin(state) do
107+
{:ok, state}
108+
end
109+
110+
def ping(state) do
111+
TestAgent.eval(:ping, [state])
112+
end
113+
114+
def handle_begin(opts, state) do
115+
TestAgent.eval(:handle_begin, [opts, state])
116+
end
117+
118+
def handle_commit(opts, state) do
119+
TestAgent.eval(:handle_commit, [opts, state])
120+
end
121+
122+
def handle_rollback(opts, state) do
123+
TestAgent.eval(:handle_rollback, [opts, state])
124+
end
125+
126+
def handle_status(opts, state) do
127+
put_agent_from_opts(opts)
128+
TestAgent.eval(:handle_status, [opts, state])
129+
end
130+
131+
def handle_prepare(query, opts, state) do
132+
TestAgent.eval(:handle_prepare, [query, opts, state])
133+
end
134+
135+
def handle_execute(query, params, opts, state) do
136+
TestAgent.eval(:handle_execute, [query, params, opts, state])
137+
end
138+
139+
def handle_close(query, opts, state) do
140+
TestAgent.eval(:handle_close, [query, opts, state])
141+
end
142+
143+
def handle_declare(query, params, opts, state) do
144+
TestAgent.eval(:handle_declare, [query, params, opts, state])
145+
end
146+
147+
def handle_fetch(query, cursor, opts, state) do
148+
TestAgent.eval(:handle_fetch, [query, cursor, opts, state])
149+
end
150+
151+
def handle_deallocate(query, cursor, opts, state) do
152+
TestAgent.eval(:handle_deallocate, [query, cursor, opts, state])
153+
end
154+
155+
defp put_agent_from_opts(opts) do
156+
Process.get(:agent) || Process.put(:agent, agent_from_opts(opts))
157+
end
158+
159+
defp agent_from_opts(opts) do
160+
case opts[:agent] do
161+
[_ | _] = agent -> Enum.fetch!(agent, Keyword.fetch!(opts, :pool_index) - 1)
162+
agent -> agent
163+
end
164+
end
165+
end
166+
167+
defmodule TestQuery do
168+
defstruct [:state, :statement]
169+
170+
defimpl String.Chars do
171+
def to_string(%{statement: statement}) do
172+
IO.iodata_to_binary(statement)
173+
end
174+
end
175+
end
176+
177+
defmodule TestCursor do
178+
defstruct []
179+
end
180+
181+
defmodule TestResult do
182+
defstruct []
183+
end
184+
185+
defimpl DBConnection.Query, for: TestQuery do
186+
def parse(query, opts) do
187+
parse = Keyword.get(opts, :parse, & &1)
188+
parse.(query)
189+
end
190+
191+
def describe(query, opts) do
192+
describe = Keyword.get(opts, :describe, & &1)
193+
describe.(query)
194+
end
195+
196+
def encode(_, params, opts) do
197+
encode = Keyword.get(opts, :encode, & &1)
198+
encode.(params)
199+
end
200+
201+
def decode(query, result, opts) do
202+
case Keyword.get(opts, :decode, & &1) do
203+
decode when is_function(decode, 1) ->
204+
decode.(result)
205+
206+
decode when is_function(decode, 2) ->
207+
decode.(query, result)
208+
end
209+
end
210+
end
211+
212+
defmodule TestAgent do
213+
def start_link(stack) do
214+
{:ok, agent} = ok = Agent.start_link(fn -> {stack, []} end)
215+
_ = Process.put(:agent, agent)
216+
ok
217+
end
218+
219+
def eval(fun, args) do
220+
agent = Process.get(:agent) || raise "no agent in process dictionary"
221+
action = {fun, args}
222+
223+
case Agent.get_and_update(agent, &get_and_update(&1, action)) do
224+
fun when is_function(fun) ->
225+
apply(fun, args)
226+
227+
result ->
228+
result
229+
end
230+
end
231+
232+
def record(agent) do
233+
Enum.reverse(Agent.get(agent, &elem(&1, 1)))
234+
end
235+
236+
defp get_and_update({[next | stack], record}, action) do
237+
{next, {stack, [action | record]}}
238+
end
239+
end
4240

5241
defmodule TestPool do
6242
use TestConnection, pool: DBConnection.ConnectionPool, pool_size: 1

0 commit comments

Comments
 (0)