aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosTransactions/test/etrap_test_server_impl.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cosTransactions/test/etrap_test_server_impl.erl')
-rw-r--r--lib/cosTransactions/test/etrap_test_server_impl.erl210
1 files changed, 210 insertions, 0 deletions
diff --git a/lib/cosTransactions/test/etrap_test_server_impl.erl b/lib/cosTransactions/test/etrap_test_server_impl.erl
new file mode 100644
index 0000000000..69c823f3ca
--- /dev/null
+++ b/lib/cosTransactions/test/etrap_test_server_impl.erl
@@ -0,0 +1,210 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+-module(etrap_test_server_impl).
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% Local
+-include_lib("cosTransactions/src/ETraP_Common.hrl").
+-include_lib("cosTransactions/include/CosTransactions.hrl").
+%%--------------- IMPORTS-------------------------------------
+%%--------------- EXPORTS-------------------------------------
+-export([prepare/2,
+ rollback/2,
+ commit/2,
+ commit_one_phase/2,
+ forget/2,
+% before_completion/2,
+% after_completion/3,
+ commit_subtransaction/3,
+ rollback_subtransaction/2]).
+
+
+%%--------------- gen_server specific ------------------------
+-export([init/1, terminate/2]).
+-export([handle_call/3, handle_cast/2, handle_info/2, code_change/3]).
+
+%%------------------------------------------------------------
+%% function : init, terminate
+%%------------------------------------------------------------
+init(State) ->
+ process_flag(trap_exit,true),
+ io:format("etrap_test_server:init ~p~n", [State]),
+ ?debug_print("STARTING etrap_test_server( ~p )~n", [State]),
+ {ok, State}.
+
+terminate(Reason, _State) ->
+ io:format("etrap_test_server:terminate ~p~n", [Reason]),
+ ?debug_print("STOPREASON etrap_test_server( ~p )~n", [Reason]),
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+handle_call(_,_, State) ->
+ {noreply, State}.
+handle_cast(_, State) ->
+ {noreply, State}.
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%-- Inherit from CosTransactions::SubtransactionAwareResource --
+prepare(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:prepare ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:prepare ~p~n", [State]),
+ action(prepare, State, {reply, 'VoteCommit', State}).
+
+rollback(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:rollback ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:rollback ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ action(rollback, State, {reply, ok, State});
+ _->
+ action(rollback, State, {stop, normal, ok, State})
+ end.
+
+commit(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ action(commit, State, {reply, ok, State});
+ _->
+ action(commit, State, {stop, normal, ok, State})
+ end.
+
+commit_one_phase(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit_one_phase ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit_one_phase ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ {reply, ok, State};
+ _->
+ {stop, normal, ok, State}
+ end.
+
+forget(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:forget ~p~n", [State]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:forget ~p~n", [State]),
+ case sync_test(State) of
+ true ->
+ {reply, ok, State};
+ _->
+ {stop, normal, ok, State}
+ end.
+
+commit_subtransaction(_Self, State, Parent) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:commit_subtransaction( ~p )~n", [Parent]);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:commit_subtransaction( ~p )~n", [Parent]),
+ {reply, ok, State}.
+rollback_subtransaction(_Self, State) ->
+ case ?is_debug_compiled of
+ true ->
+ io:format("etrap_test_server:rollback_subtransaction()~n", []);
+ _->
+ ok
+ end,
+% ?debug_print("etrap_test_server:rollback_subtransaction()~n", []),
+ {reply, ok, State}.
+
+%before_completion(_Self, State) ->
+% case ?is_debug_compiled of
+% true ->
+% io:format("etrap_test_server:before_completion()~n", []);
+% _->
+% ok
+% end,
+%% ?debug_print("etrap_test_server:before_completion()~n", []),
+% {reply, ok, State}.
+%after_completion(_Self, State, Status) ->
+% case ?is_debug_compiled of
+% true ->
+% io:format("etrap_test_server:after_completion( ~p )~n", [Status]);
+% _->
+% ok
+% end,
+%% ?debug_print("etrap_test_server:after_completion( ~p )~n", [Status]),
+% {stop, normal, ok, State}.
+
+%%--------------- LOCAL FUNCTIONS ----------------------------
+action(Key, State, Default) ->
+ case catch lists:keysearch(Key, 1, State) of
+ {value,{Key, stop_reply, R}} ->
+ case sync_test(State) of
+ true ->
+ {reply, R, State};
+ _->
+ {stop, normal, R, State}
+ end;
+ {value,{Key, reply, R}} ->
+ {reply, R, State};
+ {value,{Key, exc, E}} ->
+ corba:raise(E);
+ {value,{Key, delay, Time}} ->
+ timer:sleep(Time*1000),
+ Default;
+ {value,{Key,Value}} ->
+ Value;
+ _ ->
+ Default
+ end.
+
+sync_test(State) ->
+ case catch lists:keysearch(sync, 1, State) of
+ {value,{sync, true}} ->
+ true;
+ _ ->
+ false
+ end.
+
+
+%%--------------- END OF MODULE ------------------------------
+