1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2011-2016. All Rights Reserved. 5%% 6%% Licensed under the Apache License, Version 2.0 (the "License"); 7%% you may not use this file except in compliance with the License. 8%% You may obtain a copy of the License at 9%% 10%% http://www.apache.org/licenses/LICENSE-2.0 11%% 12%% Unless required by applicable law or agreed to in writing, software 13%% distributed under the License is distributed on an "AS IS" BASIS, 14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15%% See the License for the specific language governing permissions and 16%% limitations under the License. 17%% 18%% %CopyrightEnd% 19%% 20-module(alarm_handler_SUITE). 21 22-include_lib("common_test/include/ct.hrl"). 23 24%%----------------------------------------------------------------- 25%% We will add an own alarm handler in order to verify that the 26%% alarm_handler deliver the expected events. 27%%----------------------------------------------------------------- 28 29-export([init_per_suite/1, end_per_suite/1, all/0,groups/0, 30 init_per_group/2,end_per_group/2, 31 set_alarm/1, clear_alarm/1, swap/1]). 32 33-export([init/1, handle_event/2, handle_call/2, handle_info/2, 34 terminate/2]). 35 36 37init_per_suite(Config) -> 38 application:start(sasl), 39 Config. 40 41end_per_suite(_Config) -> 42 ok. 43 44all() -> 45 [set_alarm, clear_alarm, swap]. 46 47groups() -> 48 []. 49 50init_per_group(_GroupName, Config) -> 51 Config. 52 53end_per_group(_GroupName, Config) -> 54 Config. 55 56 57 58%%----------------------------------------------------------------- 59 60set_alarm(Config) when is_list(Config) -> 61 gen_event:add_handler(alarm_handler, ?MODULE, self()), 62 Alarm1 = {alarm1, "this is the alarm"}, 63 Alarm2 = {"alarm2", this_is_the_alarm}, 64 Alarm3 = {{alarm3}, {this_is,"the_alarm"}}, 65 ok = alarm_handler:set_alarm(Alarm1), 66 reported(set_alarm, Alarm1), 67 ok = alarm_handler:set_alarm(Alarm2), 68 reported(set_alarm, Alarm2), 69 ok = alarm_handler:set_alarm(Alarm3), 70 reported(set_alarm, Alarm3), 71 72 [Alarm3,Alarm2,Alarm1] = alarm_handler:get_alarms(), 73 alarm_handler:clear_alarm(alarm1), 74 alarm_handler:clear_alarm("alarm2"), 75 alarm_handler:clear_alarm({alarm3}), 76 [] = alarm_handler:get_alarms(), 77 78 test_server:messages_get(), 79 my_yes = gen_event:delete_handler(alarm_handler, ?MODULE, []), 80 ok. 81 82%%----------------------------------------------------------------- 83 84clear_alarm(Config) when is_list(Config) -> 85 gen_event:add_handler(alarm_handler, ?MODULE, self()), 86 Alarm1 = {alarm1, "this is the alarm"}, 87 Alarm2 = {"alarm2", this_is_the_alarm}, 88 Alarm3 = {{alarm3}, {this_is,"the_alarm"}}, 89 alarm_handler:set_alarm(Alarm1), 90 alarm_handler:set_alarm(Alarm2), 91 alarm_handler:set_alarm(Alarm3), 92 test_server:messages_get(), 93 94 ok = alarm_handler:clear_alarm(alarm1), 95 reported(clear_alarm, alarm1), 96 ok = alarm_handler:clear_alarm("alarm2"), 97 reported(clear_alarm, "alarm2"), 98 ok = alarm_handler:clear_alarm({alarm3}), 99 reported(clear_alarm, {alarm3}), 100 [] = alarm_handler:get_alarms(), 101 102 my_yes = gen_event:delete_handler(alarm_handler, ?MODULE, []), 103 ok. 104 105%%----------------------------------------------------------------- 106 107swap(Config) when is_list(Config) -> 108 Alarm1 = {alarm1, "this is the alarm"}, 109 Alarm2 = {"alarm2", this_is_the_alarm}, 110 Alarm3 = {{alarm3}, {this_is,"the_alarm"}}, 111 alarm_handler:set_alarm(Alarm1), 112 alarm_handler:set_alarm(Alarm2), 113 alarm_handler:set_alarm(Alarm3), 114 115 case gen_event:which_handlers(alarm_handler) of 116 [alarm_handler] -> 117 ok = gen_event:swap_handler(alarm_handler, 118 {alarm_handler, swap}, 119 {?MODULE, self()}), 120 [?MODULE] = gen_event:which_handlers(alarm_handler), 121 Alarms = [Alarm3, Alarm2, Alarm1], 122 reported(swap_alarms, Alarms), 123 124 %% get_alarms is only valid with the default handler installed. 125 {error, _} = alarm_handler:get_alarms(), 126 127 my_yes = gen_event:delete_handler(alarm_handler, 128 ?MODULE, []), 129 gen_event:add_handler(alarm_handler, alarm_handler, []), 130 ok; 131 _ -> 132 alarm_handler:clear_alarm(alarm1), 133 alarm_handler:clear_alarm("alarm2"), 134 alarm_handler:clear_alarm({alarm3}), 135 ok 136 end. 137 138%%----------------------------------------------------------------- 139%% Check that the alarm has been received. 140%%----------------------------------------------------------------- 141reported(Tag, Data) -> 142 receive 143 {Tag, Data} -> 144 test_server:messages_get(), 145 ok 146 after 1000 -> 147 test_server:fail(no_alarm_received) 148 end. 149 150%%----------------------------------------------------------------- 151%% The error_logger handler (gen_event behaviour). 152%% Sends a notification to the Tester process about the events 153%% generated by the Tester process. 154%%----------------------------------------------------------------- 155init(Tester) when is_pid(Tester) -> 156 {ok, Tester}; 157init({Tester, {alarm_handler,Alarms}}) -> % Swap from default handler. 158 Tester ! {swap_alarms, Alarms}, 159 {ok, Tester}. 160 161handle_event({set_alarm, Alarm}, Tester) -> 162 Tester ! {set_alarm, Alarm}, 163 {ok, Tester}; 164handle_event({clear_alarm, AlarmId}, Tester) -> 165 Tester ! {clear_alarm, AlarmId}, 166 {ok, Tester}; 167handle_event(_Event, Tester) -> 168 {ok, Tester}. 169 170handle_info(_, Tester) -> 171 {ok, Tester}. 172 173handle_call(_Query, Tester) -> {ok, {error, bad_query}, Tester}. 174 175terminate(_Reason, _Tester) -> 176 my_yes. 177