1 # =================================================================================2
2 # Copyright (c) 2020 AT&T Intellectual Property.
3 # Copyright (c) 2020 Nokia
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 # ==================================================================================
20 from ricxappframe.alarm import alarm
21 from ricxappframe.alarm.alarm import AlarmAction, AlarmDetail, AlarmManager, AlarmSeverity, ALARM_MGR_SERVICE_NAME_ENV, ALARM_MGR_SERVICE_PORT_ENV
22 from ricxappframe.alarm.exceptions import InitFailed
23 from ricxappframe.rmr import rmr
32 test alarm module setup
35 MRC_SEND = rmr.rmr_init(b"4566", rmr.RMR_MAX_RCV_BYTES, 0x00)
36 while rmr.rmr_ready(MRC_SEND) == 0:
40 MRC_RCV = rmr.rmr_init(b"4567", rmr.RMR_MAX_RCV_BYTES, 0x00)
41 while rmr.rmr_ready(MRC_RCV) == 0:
45 def teardown_module():
47 test alarm module teardown
49 rmr.rmr_close(MRC_SEND)
52 def test_alarm_set_get(monkeypatch):
56 act = AlarmAction.RAISE
57 assert act is not None
59 sev = AlarmSeverity.CRITICAL
60 assert sev is not None
62 det = AlarmDetail("1", "2", 3, AlarmSeverity.MINOR, "4", "5")
63 assert det[alarm.KEY_MANAGED_OBJECT_ID] == "1"
64 assert det[alarm.KEY_APPLICATION_ID] == "2"
65 assert det[alarm.KEY_SPECIFIC_PROBLEM] == 3
66 assert det[alarm.KEY_PERCEIVED_SEVERITY] == AlarmSeverity.MINOR.name
67 assert det[alarm.KEY_IDENTIFYING_INFO] == "4"
68 assert det[alarm.KEY_ADDITIONAL_INFO] == "5"
70 # missing environment variables
71 with pytest.raises(InitFailed):
72 alarm.AlarmManager(MRC_SEND, "missing", "envvars")
74 # invalid environment variables
75 monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "0")
76 monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "a")
77 with pytest.raises(InitFailed):
78 alarm.AlarmManager(MRC_SEND, "bogus", "envvars")
80 # good environment variables
81 monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "localhost")
82 monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "4567") # any int is ok here
83 mgr = alarm.AlarmManager(MRC_SEND, "moid2", "appid2")
84 assert mgr is not None
85 assert mgr.managed_object_id == "moid2"
86 assert mgr.application_id == "appid2"
89 def _receive_alarm_msg(action: AlarmAction):
91 delays briefly, receives a message, checks the message type and action
94 sbuf_rcv = rmr.rmr_alloc_msg(MRC_RCV, SIZE)
95 sbuf_rcv = rmr.rmr_torcv_msg(MRC_RCV, sbuf_rcv, 2000)
96 rcv_summary = rmr.message_summary(sbuf_rcv)
97 assert rcv_summary[rmr.RMR_MS_MSG_STATE] == rmr.RMR_OK
98 assert rcv_summary[rmr.RMR_MS_MSG_TYPE] == alarm.RIC_ALARM_UPDATE
100 data = json.loads(rcv_summary[rmr.RMR_MS_PAYLOAD].decode())
101 assert data[alarm.KEY_ALARM_ACTION] == action.name
104 def test_alarm_manager(monkeypatch):
106 test send functions and ensure a message arrives
108 monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "localhost")
109 monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "4567") # must match rcv port above
110 mgr = AlarmManager(MRC_SEND, "moid", "appid")
111 assert mgr is not None
113 det = mgr.create_alarm(3, AlarmSeverity.DEFAULT, "identifying", "additional")
114 assert det is not None
116 success = mgr.raise_alarm(det)
118 _receive_alarm_msg(AlarmAction.RAISE)
120 success = mgr.clear_alarm(det)
122 _receive_alarm_msg(AlarmAction.CLEAR)
124 success = mgr.reraise_alarm(det)
126 _receive_alarm_msg(AlarmAction.CLEAR)
127 _receive_alarm_msg(AlarmAction.RAISE)
129 success = mgr.clear_all_alarms()
131 _receive_alarm_msg(AlarmAction.CLEARALL)