Skip to content

Commit a7a761c

Browse files
authored
Introduce status/2 (#90)
* Add status/2 Returns `:idle | :transaction | :error` and does not raise. Change handle_begin/rollback/commit returns to match status and deprecate their error exception tuples. Disconnect should always be used there.
1 parent 664d962 commit a7a761c

File tree

3 files changed

+195
-50
lines changed

3 files changed

+195
-50
lines changed

integration_test/cases/transaction_test.exs

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -776,8 +776,8 @@ defmodule TransactionTest do
776776
test "transaction logs begin :commit and :rollback" do
777777
stack = [
778778
{:ok, :state},
779-
{:commit, :new_state},
780-
{:rollback, :newer_state},
779+
{:transaction, :new_state},
780+
{:error, :newer_state},
781781
]
782782
{:ok, agent} = A.start_link(stack)
783783

@@ -791,7 +791,7 @@ defmodule TransactionTest do
791791
[log: log]) == {:error, :rollback}
792792

793793
assert_received %DBConnection.LogEntry{call: :begin} = entry
794-
err = DBConnection.TransactionError.exception(:commit)
794+
err = DBConnection.TransactionError.exception(:transaction)
795795
assert %{query: :begin, params: nil, result: {:error, ^err}} = entry
796796
assert is_integer(entry.pool_time)
797797
assert entry.pool_time >= 0
@@ -805,7 +805,7 @@ defmodule TransactionTest do
805805
[log: log]) == {:error, :rollback}
806806

807807
assert_received %DBConnection.LogEntry{call: :begin} = entry
808-
err = DBConnection.TransactionError.exception(:rollback)
808+
err = DBConnection.TransactionError.exception(:error)
809809
assert %{query: :begin, params: nil, result: {:error, ^err}} = entry
810810
assert is_integer(entry.pool_time)
811811
assert entry.pool_time >= 0
@@ -825,9 +825,9 @@ defmodule TransactionTest do
825825
stack = [
826826
{:ok, :state},
827827
{:ok, :began, :new_state},
828-
{:begin, :newer_state},
828+
{:idle, :newer_state},
829829
{:ok, :began, :newest_state},
830-
{:rollback, :state2},
830+
{:error, :state2},
831831
{:ok, :rolledback, :new_state2}
832832
]
833833
{:ok, agent} = A.start_link(stack)
@@ -843,7 +843,7 @@ defmodule TransactionTest do
843843
[log: log]) == {:error, :rollback}
844844

845845
assert_received %DBConnection.LogEntry{call: :commit} = entry
846-
err = DBConnection.TransactionError.exception(:begin)
846+
err = DBConnection.TransactionError.exception(:idle)
847847
assert %{query: :commit, params: nil, result: {:error, ^err}} = entry
848848
assert is_nil(entry.pool_time)
849849
assert is_integer(entry.connection_time)
@@ -878,7 +878,7 @@ defmodule TransactionTest do
878878
stack = [
879879
{:ok, :state},
880880
{:ok, :began, :new_state},
881-
{:begin, :newer_state}
881+
{:idle, :newer_state}
882882
]
883883
{:ok, agent} = A.start_link(stack)
884884

@@ -896,7 +896,7 @@ defmodule TransactionTest do
896896
[log: log]) == {:error, :oops}
897897

898898
assert_received %DBConnection.LogEntry{call: :rollback} = entry
899-
err = DBConnection.TransactionError.exception(:begin)
899+
err = DBConnection.TransactionError.exception(:idle)
900900
assert %{query: :rollback, params: nil, result: {:error, ^err}} = entry
901901
assert is_nil(entry.pool_time)
902902
assert is_integer(entry.connection_time)
@@ -953,4 +953,44 @@ defmodule TransactionTest do
953953
handle_begin: [_, :state2],
954954
handle_rollback: [_, :new_state2]] = A.record(agent)
955955
end
956+
957+
test "status returns result" do
958+
err = RuntimeError.exception("oops")
959+
stack = [
960+
{:ok, :state},
961+
{:idle, :new_state},
962+
{:transaction, :newer_state},
963+
{:error, :newest_state},
964+
{:disconnect, err, :state2},
965+
:ok,
966+
fn(opts) ->
967+
send(opts[:parent], :reconnected)
968+
{:ok, :new_state2}
969+
end,
970+
]
971+
{:ok, agent} = A.start_link(stack)
972+
973+
opts = [agent: agent, parent: self()]
974+
{:ok, pool} = P.start_link(opts)
975+
976+
assert P.status(pool, opts) == :idle
977+
assert P.status(pool, opts) == :transaction
978+
assert P.run(pool, fn(conn) ->
979+
assert P.status(pool, [queue: false] ++ opts) == :error
980+
assert P.status(conn, opts)
981+
end, opts)
982+
assert P.status(pool, opts) == :error
983+
984+
assert_receive :reconnected
985+
986+
assert [
987+
connect: [_],
988+
handle_status: [ _, :state],
989+
handle_status: [_, :new_state],
990+
handle_status: [_, :newer_state],
991+
handle_status: [_, :newest_state],
992+
disconnect: [^err, :state2],
993+
connect: [_]
994+
] = A.record(agent)
995+
end
956996
end

0 commit comments

Comments
 (0)