aboutsummaryrefslogtreecommitdiffstats
path: root/lib/snmp/test/snmp_note_store_test.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/snmp/test/snmp_note_store_test.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/snmp/test/snmp_note_store_test.erl')
-rw-r--r--lib/snmp/test/snmp_note_store_test.erl306
1 files changed, 306 insertions, 0 deletions
diff --git a/lib/snmp/test/snmp_note_store_test.erl b/lib/snmp/test/snmp_note_store_test.erl
new file mode 100644
index 0000000000..8686a47468
--- /dev/null
+++ b/lib/snmp/test/snmp_note_store_test.erl
@@ -0,0 +1,306 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2009. 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%
+%%
+
+%%----------------------------------------------------------------------
+%% Purpose:
+%%----------------------------------------------------------------------
+-module(snmp_note_store_test).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include("test_server.hrl").
+-include("snmp_test_lib.hrl").
+
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+-export([
+ init_per_testcase/2, fin_per_testcase/2,
+ all/1,
+ start_and_stop/1,
+ notes/1,
+ info/1,
+ garbage_in/1
+ ]).
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+-export([
+ system_start_time/0
+ ]).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+
+init_per_testcase(_Case, Config) when is_list(Config) ->
+ Config.
+
+fin_per_testcase(_Case, Config) when is_list(Config) ->
+ Config.
+
+%%======================================================================
+%% Test case definitions
+%%======================================================================
+all(suite) ->
+ [
+ start_and_stop,
+ notes,
+ info,
+ garbage_in
+
+ ].
+
+
+%%======================================================================
+%% Test functions
+%%======================================================================
+
+
+%%======================================================================
+
+start_and_stop(suite) ->
+ [];
+start_and_stop(doc) ->
+ ["Simple start and stop."];
+start_and_stop(Config) when is_list(Config) ->
+
+ Prio = normal,
+ Mod = ?MODULE,
+ Opts = [{verbosity, trace}],
+ {ok, Pid} = snmp_note_store:start_link(Prio, Mod, Opts),
+ snmp_note_store:stop(Pid),
+
+ ok.
+
+
+%%======================================================================
+
+notes(suite) ->
+ [];
+notes(doc) ->
+ ["Testing that it does what it is actually supposed to do, "
+ "namilly to handle notes. "];
+notes(Config) when is_list(Config) ->
+
+ {ok, Handler, Pid} = note_store_handler_start(),
+
+ io:format("sleep some before we begin the tests~n", []),
+ ?SLEEP(timer:seconds(1)),
+
+ %% Default lifetime is infinity. A note with lifetime
+ %% infinity is permanent
+ io:format("create permanent note sune~n", []),
+ true = snmp_note_store:set_note(Pid, sune, 10),
+ 10 = snmp_note_store:get_note(Pid, sune),
+ 10 = snmp_note_store:get_note(Pid, sune),
+
+ %% Lifetime is in 1/100 sec ticks, so 500 equals 5 seconds
+ io:format("create 5 sec note kalle~n", []),
+ true = snmp_note_store:set_note(Pid, 500, kalle, hobbe),
+ io:format("wait 1 sec~n", []),
+ ?SLEEP(timer:seconds(1)),
+ io:format("get note kalle~n", []),
+ hobbe = snmp_note_store:get_note(Pid, kalle),
+ io:format("wait 5 sec~n", []),
+ ?SLEEP(timer:seconds(5)),
+ io:format("get note kalle again (now it should not exist)~n", []),
+ undefined = snmp_note_store:get_note(Pid, kalle),
+
+ io:format("create 5 sec note kalle~n", []),
+ true = snmp_note_store:set_note(Pid, 500, kalle, hobbe),
+ io:format("wait 6 sec (to allow timer to clean up note)~n", []),
+ ?SLEEP(timer:seconds(6)),
+ io:format("get note kalle - should not exist~n", []),
+ undefined = snmp_note_store:get_note(Pid, kalle),
+
+ io:format("read the permanent note sune again~n", []),
+ 10 = snmp_note_store:get_note(Pid, sune),
+
+ note_store_handler_stop(Handler),
+
+ ok.
+
+
+%%======================================================================
+
+info(suite) ->
+ [];
+info(doc) ->
+ ["Testing that we can retreive process info."];
+info(Config) when is_list(Config) ->
+
+ Prio = normal,
+ Mod = ?MODULE,
+ Opts = [{verbosity, trace}],
+ {ok, Pid} = snmp_note_store:start_link(Prio, Mod, Opts),
+
+ %% Get the info:
+ Info = snmp_note_store:info(Pid),
+ io:format("Info: ~p~n", [Info]),
+
+ %% Verify content
+ io:format("get process memory~n", []),
+ {value, {process_memory, ProcMem}} =
+ lists:keysearch(process_memory, 1, Info),
+ io:format("get notes process memory~n", []),
+ {value, {notes, NotesProcMem}} =
+ lists:keysearch(notes, 1, ProcMem),
+ io:format("verify notes process memory~n", []),
+ if
+ is_integer(NotesProcMem) andalso (NotesProcMem > 0) ->
+ ok;
+ true ->
+ throw({error, {bad_notes_proc_memery, NotesProcMem}})
+ end,
+ io:format("get timer process memory~n", []),
+ {value, {timer, TmrProcMem}} =
+ lists:keysearch(timer, 1, ProcMem),
+ io:format("verify timer process memory~n", []),
+ if
+ is_integer(TmrProcMem) andalso (TmrProcMem > 0) ->
+ ok;
+ true ->
+ throw({error, {bad_timer_proc_memery, TmrProcMem}})
+ end,
+ io:format("get db memory~n", []),
+ {value, {db_memory, DbMem}} =
+ lists:keysearch(db_memory, 1, Info),
+ io:format("get notes db memory~n", []),
+ {value, {notes, NotesDbMem}} =
+ lists:keysearch(notes, 1, DbMem),
+ io:format("verify notes db memory~n", []),
+ if
+ is_integer(NotesDbMem) andalso (NotesDbMem > 0) ->
+ ok;
+ true ->
+ throw({error, {bad_notes_db_memery, NotesDbMem}})
+ end,
+
+
+ snmp_note_store:stop(Pid),
+
+ ok.
+
+
+%%======================================================================
+
+garbage_in(suite) ->
+ [];
+garbage_in(doc) ->
+ ["Test that the process handles garbage sent to it."];
+garbage_in(Config) when is_list(Config) ->
+
+ io:format("start note_store server~n", []),
+ Prio = normal,
+ Mod = ?MODULE,
+ Opts = [{verbosity, trace}],
+ {ok, Pid} = snmp_note_store:start_link(Prio, Mod, Opts),
+
+ io:format("issue bad request~n", []),
+ {error, _} = gen_server:call(Pid, bad_request),
+
+ io:format("cast bad message~n", []),
+ gen_server:cast(Pid, bad_message),
+
+ io:format("bang bad info~n", []),
+ Pid ! bad_info,
+
+ io:format("verify note_Store server still alive and kicking~n", []),
+ Info = snmp_note_store:info(Pid),
+ if
+ is_list(Info) andalso (length(Info) > 0) ->
+ ok;
+ true ->
+ throw({error, {bad_info, Info}})
+ end,
+
+ io:format("stop note_store server~n", []),
+ snmp_note_store:stop(Pid),
+
+ io:format("done~n", []),
+ ok.
+
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+
+system_start_time() ->
+ note_store_handler ! {system_start_time, self()},
+ receive
+ {system_start_time, SysStartTime} ->
+ SysStartTime
+ end.
+
+note_store_handler_start() ->
+ Self = self(),
+ Fun = fun() -> note_store_handler(Self) end,
+ HandlerPid = spawn_link(Fun),
+ receive
+ {started, HandlerPid, NSPid} ->
+ {ok, HandlerPid, NSPid}
+ after 5000 ->
+ exit(HandlerPid, kill),
+ {error, timeout}
+ end.
+
+note_store_handler_stop(Pid) ->
+ Pid ! {stop, self()},
+ receive
+ {stopped, Pid} ->
+ ok
+ after 5000 ->
+ exit(Pid, kill),
+ {error, timeout}
+ end.
+
+note_store_handler(Parent) ->
+ erlang:register(note_store_handler, self()),
+ put(system_start_time, snmp_misc:now(cs)),
+ Prio = normal,
+ Mod = ?MODULE,
+ Opts = [{verbosity, trace}],
+ {ok, Pid} = snmp_note_store:start_link(Prio, Mod, Opts),
+ Parent ! {started, self(), Pid},
+ note_store_handler_loop(Parent, Pid).
+
+note_store_handler_loop(Parent, NSPid) ->
+ receive
+ {stop, Parent} ->
+ snmp_note_store:stop(NSPid),
+ Parent ! {stopped, self()},
+ exit(normal);
+ {system_start_time, Pid} ->
+ StartTime = get(system_start_time),
+ Pid ! {system_start_time, StartTime},
+ note_store_handler_loop(Parent, NSPid)
+ end.
+