def test_alarm_api():
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestAlarmAPI", "TestAlarmAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.RunWorkspaceFile(SYSDEFINITION, 0, 1, 80000, "", "")

    try:
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("Testing Alarm manager functionality")
        alarmMgr = NIVeriStand.AlarmManager()
        result = alarmMgr.GetAlarmList()
        assert (len(result) == 3), "Expected 3 alarms returned from the system"

        print("Testing support for deprecated GetAlarmStatus() function")
        result = alarmMgr.GetAlarmsStatus()
        print(result)
        assert (
            result['HighAlarm'] == 0), "Not expecting any alarm to be trigger"
        assert (result['MediumAlarm'] == 0
                ), "Not expecting any alarm to be trigger"
        assert (
            result['LowAlarm'] == 0), "Not expecting any alarm to be trigger"

        print("Testing Read Alarm Data")
        alarms = ('Alarm Group/AlarmTest1', 'Alarm Group/AlarmTest2',
                  'ConstantBoundAlarm')
        result = alarmMgr.GetMultipleAlarmsData(alarms, 60000)
        print("Verifying alarm data returned")
        assert (len(result) == 3), "Expected to get 3 alarms data back"

        print("Verifying Alarm Data")
        alarmTest1 = result[0]
        alarmTest2 = result[1]
        constantBoundAlarm = result[2]
        print(alarmTest1)
        assert (alarmTest1['WatchChannel'] == r"AlarmChannel1"
                ), "Fail to confirm alarm channel"
        assert ((alarmTest1['HighLimitIsConstant'] == 0) |
                (alarmTest1['HighLimitChannel']
                 == r"AlarmChannel1High")), "Fail to confirm high limit"
        assert ((alarmTest1['LowLimitIsConstant'] == 0) |
                (alarmTest1['LowLimitChannel']
                 == r"AlarmChannel1Low")), "Fail to confirm low limit"
        assert (alarmTest1['DelayDuration'] == 0.5
                ), "Fail to confirm delay duration"
        assert (alarmTest1['ProcedureName'] == r"ResetAlarmTest1"
                ), "Fail to confirm procedure"
        assert (alarmTest1['Priority'] == 2
                ), "Fail to confirm priority enum (deprecated)"
        # TODO: PriorityNumber not found key
        assert (alarmTest1['PriorityNumber'] == 5
                ), "Fail to confirm priority number"
        assert (alarmTest1['State'] == 1), "Fail to confirm state"
        assert (alarmTest1['Mode'] == 0), "Fail to confirm mode"
        # TODO: GroupNumber not found key
        assert (alarmTest1['GroupNumber'] == 1), "Fail to confirm group number"

        print("Test alarm interface")
        BoundAlarmRef = NIVeriStand.Alarm('ConstantBoundAlarm')
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == constantBoundAlarm
                ), "Alarm data from alarm interface differ from alarm manager"

        print("Test modifying alarm data")
        modAlarmData = result
        modAlarmData['HighLimit'] = 3
        modAlarmData['LowLimit'] = -3

        print("Testing support for deprecated SetAlarmData() function")
        BoundAlarmRef.SetAlarmData(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData
                ), "Alarm data set cannot be confirmed on deprecated function"

        # TODO: SetAlarmData2 not implemented.
        print("Testing support using SetAlarmData2() function")
        BoundAlarmRef.SetAlarmData2(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData
                ), "Alarm data set cannot be confirmed on function"

        print("Test modifying alarm state and mode")
        BoundAlarmRef.SetEnabledState(0)
        #indicate only
        BoundAlarmRef.SetAlarmMode(1)
        sleep()

        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result['State'] == 0), "Alarm Mode is wrong"

        assert (result['Mode'] == 1), "Alarm Mode is wrong"

        BoundAlarmRef.SetEnabledState(1)
        BoundAlarmRef.SetAlarmMode(0)
        sleep()
        sleep()
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel1", 20)
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel2", 10)
        sleep()
        sleep()

        print("Testing alarm mutual exclusion within a group")
        AlarmTest2Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest2')
        AlarmTest1Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest1')
        result = AlarmTest1Ref.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert (result['State'] == 2), "Alarm should be tripped"
        assert (
            result2['State'] != 2
        ), "Alarm should not be running due to an execution of a higher priority."

        print("Testing Alarm Execution Across Groups")
        result = BoundAlarmRef.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert ((result['State'] == 2)
                and (result2['State']
                     == 2)), " Two alarms should be tripped simulteneously."

        print("Test PASSED")
        print("")

    finally:
        wks.StopWorkspaceFile("")
Esempio n. 2
0
def test_alarm2_api():
    wks = NIVeriStand.Workspace2("localhost")
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestAlarmAPI", "TestAlarmAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.ConnectToSystem(SYSDEFINITION, 1, 80000)

    try:
        # Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("Testing Alarm manager Get Alarm List")
        alarmMgr = NIVeriStand.AlarmManager2("localhost")
        result = alarmMgr.GetAlarmList("Controller")
        assert (len(result) == 3), "Expected 3 alarms returned from the system"

        with pytest.raises(NIVeriStandException):
            alarmMgr.GetAlarmList("Invalid Controller")

        print("Testing Alarm manager Read Alarm Data")
        alarms = ('Alarm Group/AlarmTest1', 'Alarm Group/AlarmTest2',
                  'ConstantBoundAlarm')
        result = alarmMgr.GetMultipleAlarmsData("Controller", alarms, 60000)
        print("Verifying alarm data returned")
        assert (len(result) == 3), "Expected to get 3 alarms data back"

        with pytest.raises(NIVeriStandException):
            alarmMgr.GetMultipleAlarmsData("INVALID CONTROLLER", alarms, 60000)

        print("Verifying Alarm Data")
        alarmTest1 = result[0]
        alarmTest2 = result[1]
        constantBoundAlarm = result[2]
        print(alarmTest1)
        assert (alarmTest1['WatchChannel'] == r"AlarmChannel1"
                ), "Fail to confirm alarm channel"
        assert ((alarmTest1['HighLimitIsConstant'] == 0)
                or (alarmTest1['HighLimitChannel']
                    == r"AlarmChannel1High")), "Fail to confirm high limit"
        assert ((alarmTest1['LowLimitIsConstant'] == 0)
                or (alarmTest1['LowLimitChannel']
                    == r"AlarmChannel1Low")), "Fail to confirm low limit"
        assert (alarmTest1['DelayDuration'] == 0.5
                ), "Fail to confirm delay duration"
        assert (alarmTest1['ProcedureName'] == r"ResetAlarmTest1"
                ), "Fail to confirm procedure"
        assert (alarmTest1['Priority'] == 2
                ), "Fail to confirm priority (deprecated)"
        assert (alarmTest1['PriorityNumber'] == 5
                ), "Fail to confirm priority number"
        assert (alarmTest1['State'] == 1), "Fail to confirm state"
        assert (alarmTest1['Mode'] == 0), "Fail to confirm mode"
        assert (alarmTest1['GroupNumber'] == 1), "Fail to confirm alarm group"

        print("Test alarm interface")

        print("Test Alarm constructor mode")
        Constructor1 = NIVeriStand.Alarm('Alarm Group/Alarm Test2')
        Constructor2 = NIVeriStand.Alarm('Alarm Group/Alarm Test2',
                                         'Controller')
        Constructor3 = NIVeriStand.Alarm('Alarm Group/Alarm Test2', None,
                                         'localhost')
        Constructor4 = NIVeriStand.Alarm('Alarm Group/Alarm Test2',
                                         'Controller', 'localhost')

        print("Test access to alarm")
        BoundAlarmRef = NIVeriStand.Alarm('ConstantBoundAlarm', 'Controller',
                                          'localhost')
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == constantBoundAlarm
                ), "Alarm data from alarm interface differ from alarm manager"

        print("Test modifying alarm data")
        modAlarmData = result
        modAlarmData['HighLimit'] = 3
        modAlarmData['LowLimit'] = -3
        BoundAlarmRef.SetAlarmData2(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData), "Alarm data set cannot be confirmed"

        print("Test modifying alarm state and mode")
        BoundAlarmRef.SetEnabledState(0)
        #indicate only
        BoundAlarmRef.SetAlarmMode(1)
        sleep()

        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result['State'] == 0), "Alarm Mode is wrong"

        assert (result['Mode'] == 1), "Alarm Mode is wrong"

        BoundAlarmRef.SetEnabledState(1)
        BoundAlarmRef.SetAlarmMode(0)
        sleep()
        sleep()
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel1", 20)
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel2", 10)
        sleep()
        sleep()

        print("Testing alarm mutual exclusion within a group")
        AlarmTest2Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest2')
        AlarmTest1Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest1')
        result = AlarmTest1Ref.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert (result['State'] == 2), "Alarm should be tripped"
        assert (
            result2['State'] != 2
        ), "Alarm should not be running due to an execution of a higher priority."

        print("Testing Alarm Execution Across Groups")
        result = BoundAlarmRef.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert ((result['State'] == 2)
                and (result2['State']
                     == 2)), " Two alarms should be tripped simulteneously."

        print("Test PASSED")
        print("")
    finally:
        wks.DisconnectFromSystem("", 1)