blob: 2eec9c969cb3ad1666d5365658bc4082e808731d [file] [log] [blame]
# =================================================================================2
# Copyright (c) 2020 AT&T Intellectual Property.
# Copyright (c) 2020 Nokia
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==================================================================================
import json
import pytest
import time
from ricxappframe.alarm import alarm
from ricxappframe.alarm.alarm import AlarmAction, AlarmDetail, AlarmManager, AlarmSeverity, ALARM_MGR_SERVICE_NAME_ENV, ALARM_MGR_SERVICE_PORT_ENV
from ricxappframe.alarm.exceptions import InitFailed
from ricxappframe.rmr import rmr
MRC_SEND = None
MRC_RCV = None
SIZE = 256
def setup_module():
"""
test alarm module setup
"""
global MRC_SEND
MRC_SEND = rmr.rmr_init(b"4566", rmr.RMR_MAX_RCV_BYTES, 0x00)
while rmr.rmr_ready(MRC_SEND) == 0:
time.sleep(1)
global MRC_RCV
MRC_RCV = rmr.rmr_init(b"4567", rmr.RMR_MAX_RCV_BYTES, 0x00)
while rmr.rmr_ready(MRC_RCV) == 0:
time.sleep(1)
def teardown_module():
"""
test alarm module teardown
"""
rmr.rmr_close(MRC_SEND)
rmr.rmr_close(MRC_RCV)
def test_alarm_set_get(monkeypatch):
"""
test set functions
"""
act = AlarmAction.RAISE
assert act is not None
sev = AlarmSeverity.CRITICAL
assert sev is not None
det = AlarmDetail("1", "2", 3, AlarmSeverity.MINOR, "4", "5")
assert det[alarm.KEY_MANAGED_OBJECT_ID] == "1"
assert det[alarm.KEY_APPLICATION_ID] == "2"
assert det[alarm.KEY_SPECIFIC_PROBLEM] == 3
assert det[alarm.KEY_PERCEIVED_SEVERITY] == AlarmSeverity.MINOR.name
assert det[alarm.KEY_IDENTIFYING_INFO] == "4"
assert det[alarm.KEY_ADDITIONAL_INFO] == "5"
# missing environment variables
with pytest.raises(InitFailed):
alarm.AlarmManager(MRC_SEND, "missing", "envvars")
# invalid environment variables
monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "0")
monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "a")
with pytest.raises(InitFailed):
alarm.AlarmManager(MRC_SEND, "bogus", "envvars")
# good environment variables
monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "127.0.0.1") # do NOT use localhost
monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "4567") # any int is ok here
mgr = alarm.AlarmManager(MRC_SEND, "moid2", "appid2")
assert mgr is not None
assert mgr.managed_object_id == "moid2"
assert mgr.application_id == "appid2"
def _receive_alarm_msg(action: AlarmAction):
"""
delays briefly, receives a message, checks the message type and action
"""
time.sleep(0.5)
sbuf_rcv = rmr.rmr_alloc_msg(MRC_RCV, SIZE)
sbuf_rcv = rmr.rmr_torcv_msg(MRC_RCV, sbuf_rcv, 2000)
rcv_summary = rmr.message_summary(sbuf_rcv)
assert rcv_summary[rmr.RMR_MS_MSG_STATE] == rmr.RMR_OK
assert rcv_summary[rmr.RMR_MS_MSG_TYPE] == alarm.RIC_ALARM_UPDATE
# parse JSON
data = json.loads(rcv_summary[rmr.RMR_MS_PAYLOAD].decode())
assert data[alarm.KEY_ALARM_ACTION] == action.name
def test_alarm_manager(monkeypatch):
"""
test send functions and ensure a message arrives
"""
monkeypatch.setenv(ALARM_MGR_SERVICE_NAME_ENV, "127.0.0.1") # do NOT use localhost
monkeypatch.setenv(ALARM_MGR_SERVICE_PORT_ENV, "4567") # must match rcv port above
mgr = AlarmManager(MRC_SEND, "moid", "appid")
assert mgr is not None
det = mgr.create_alarm(3, AlarmSeverity.DEFAULT, "identifying", "additional")
assert det is not None
success = mgr.raise_alarm(det)
assert success
_receive_alarm_msg(AlarmAction.RAISE)
success = mgr.clear_alarm(det)
assert success
_receive_alarm_msg(AlarmAction.CLEAR)
success = mgr.reraise_alarm(det)
assert success
_receive_alarm_msg(AlarmAction.CLEAR)
_receive_alarm_msg(AlarmAction.RAISE)
success = mgr.clear_all_alarms()
assert success
_receive_alarm_msg(AlarmAction.CLEARALL)