PROFINET IO Controller Stack 1.0.0
Modern C++ implementation of a PROFINET IO Controller stack
Loading...
Searching...
No Matches
test_alarmListenerRta.cpp File Reference

PROFINET RTA AlarmListener conformance and regression tests. More...

#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <array>
#include <cstdint>
#include <memory>
#include <span>
#include <string>
#include <utility>
#include <vector>
#include "mocks/alarmListenerTestAccess.h"
#include "mocks/mockRawEthernetSocket.h"
#include "profinet/alarmListener.h"
#include "profinet/alarms.h"
#include "profinet/protocol.h"
+ Include dependency graph for test_alarmListenerRta.cpp:

Go to the source code of this file.

Classes

class  profinet::AlarmListenerRtaTest
 Test fixture for Layer 2 RTA alarm handling. More...
 
class  profinet::AlarmListenerRtaIntegrationTest
 Test fixture for multi-frame RTA alarm exchanges. More...
 
class  profinet::AlarmListenerCallbackTest
 Test fixture for AlarmListener callback behavior. More...
 
class  profinet::RtaErrorTests
 Tests for PROFINET RTA ERR-PDU decoding. More...
 
struct  profinet::RtaErrorReasonTestCase
 One complete RTA ErrorCode2 test case. More...
 
class  profinet::RtaErrorsTests
 

Namespaces

namespace  profinet
 

Functions

 profinet::TEST_F (AlarmListenerRtaTest, UntaggedAlarmFrameIsProcessed)
 
 profinet::TEST_F (AlarmListenerRtaTest, VlanTaggedAlarmFrameIsProcessed)
 
 profinet::TEST_F (AlarmListenerRtaTest, HighPriorityAlarmUsesHighFrameId)
 
 profinet::TEST_F (AlarmListenerRtaTest, NonProfinetEtherTypeIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaTest, WrongSourceMacIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaTest, WrongDestinationReferenceIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaTest, ShortEthernetFrameIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaTest, AlarmAckIsPriorityVlanTagged)
 
 profinet::TEST_F (AlarmListenerRtaTest, AlarmAckUsesDataPdu)
 
 profinet::TEST_F (AlarmListenerRtaTest, AlarmAckUsesDeviceEndpointAsDestination)
 
 profinet::TEST_F (AlarmListenerRtaTest, AlarmAckEchoesReceivedSequenceNumber)
 
 profinet::TEST_F (AlarmListenerCallbackTest, ReceivedAlarmInvokesCallback)
 
 profinet::TEST_F (AlarmListenerCallbackTest, MultipleCallbacksAreInvoked)
 
 profinet::TEST_F (AlarmListenerCallbackTest, EmptyCallbackIsIgnored)
 
 profinet::TEST_F (AlarmListenerCallbackTest, CallbackExceptionDoesNotPreventOtherCallbacks)
 
 profinet::TEST_F (AlarmListenerRtaIntegrationTest, TwoAlarmNotificationsAreDispatched)
 
 profinet::TEST_F (AlarmListenerRtaTest, InvalidAlarmPayloadIsNotAcknowledged)
 
 profinet::TEST_F (AlarmListenerRtaTest, WrongRtaVersionIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaTest, DataWithoutTackIsIgnored)
 
 profinet::TEST_F (AlarmListenerRtaIntegrationTest, DISABLED_DuplicateNotificationIsNotDispatchedTwice)
 
 profinet::TEST_F (AlarmListenerRtaTest, DISABLED_OutOfSequenceNotificationIsRejected)
 
 profinet::TEST_F (AlarmListenerRtaTest, FirstAlarmAckUsesInitialSequenceNumber)
 
 profinet::TEST_F (RtaErrorTests, ParsesAumaReleaseIndReceivedError)
 
 profinet::TEST_F (RtaErrorTests, IgnoresEthernetPaddingAfterStatus)
 
 profinet::TEST_F (RtaErrorTests, RejectsNonErrRtaPdu)
 
 profinet::TEST_F (RtaErrorTests, RejectsWrongVariablePartLength)
 
 profinet::TEST_F (RtaErrorTests, RejectsTruncatedStatus)
 
 profinet::TEST_F (RtaErrorTests, SequenceErrorIsNotAbort)
 
 profinet::TEST_F (RtaErrorTests, NonRtaStatusIsNotProtocolError)
 
 profinet::TEST_P (RtaErrorsTests, EveryDefinedReasonIsDecoded)
 
 profinet::INSTANTIATE_TEST_SUITE_P (AllDefinedReasons, RtaErrorsTests, ::testing::Values(RtaErrorReasonTestCase{0x00, RtaErrorReason::Reserved, RtaErrorClass::Reserved}, RtaErrorReasonTestCase{0x01, RtaErrorReason::SequenceNumber, RtaErrorClass::SequenceNumber}, RtaErrorReasonTestCase{0x02, RtaErrorReason::InstanceClosed, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x03, RtaErrorReason::ArOutOfMemory, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x04, RtaErrorReason::ArAddProviderConsumerFailed, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x05, RtaErrorReason::ArConsumerDhtWdtExpired, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x06, RtaErrorReason::ArCmiTimeout, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x07, RtaErrorReason::ArAlarmOpenFailed, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x08, RtaErrorReason::ArAlarmSendConfirmationNegative, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x09, RtaErrorReason::ArAlarmAckSendConfirmationNegative, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0A, RtaErrorReason::ArAlarmDataTooLong, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0B, RtaErrorReason::ArAlarmIndError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0C, RtaErrorReason::ArRpcClientCallConfirmationNegative, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0D, RtaErrorReason::ArAbortRequest, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0E, RtaErrorReason::ArRerunAbortsExisting, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x0F, RtaErrorReason::ArReleaseIndReceived, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x10, RtaErrorReason::ArDeviceDeactivated, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x11, RtaErrorReason::ArRemoved, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x12, RtaErrorReason::ArProtocolViolation, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x13, RtaErrorReason::ArNameResolutionError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x14, RtaErrorReason::ArRpcBindError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x15, RtaErrorReason::ArRpcConnectError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x16, RtaErrorReason::ArRpcReadError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x17, RtaErrorReason::ArRpcWriteError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x18, RtaErrorReason::ArRpcControlError, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x19, RtaErrorReason::ArForbiddenPullPlug, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1A, RtaErrorReason::ArApRemoved, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1B, RtaErrorReason::ArLinkDown, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1C, RtaErrorReason::ArMulticastMacRegistrationFailed, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1D, RtaErrorReason::NotSynchronized, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1E, RtaErrorReason::WrongTopology, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x1F, RtaErrorReason::DcpStationNameChanged, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x20, RtaErrorReason::DcpResetToFactorySettings, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x21, RtaErrorReason::CompanionAr8ippSubmodule, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x22, RtaErrorReason::NoIrdataRecordYet, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x23, RtaErrorReason::Pdev, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x24, RtaErrorReason::PdevNoRequiredSpeedDuplexity, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x25, RtaErrorReason::IpSuiteChanged, RtaErrorClass::Abort}, RtaErrorReasonTestCase{0x26, RtaErrorReason::IocarSrRdhtExpired, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x27, RtaErrorReason::IocarSrPdevParameterizationImpossible, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x28, RtaErrorReason::RemoteApplicationReadyTimeout, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x29, RtaErrorReason::IocarSrRedundantInterfaceLost, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x2A, RtaErrorReason::IocarSrMtotExpired, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x2B, RtaErrorReason::IocarSrArProtocolViolation, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x2C, RtaErrorReason::PdevPlugPortWithoutCombinedObjectContainer, RtaErrorClass::Extended}, RtaErrorReasonTestCase{0x2D, RtaErrorReason::ObsoletedNmeNoConfiguration, RtaErrorClass::Obsoleted}, RtaErrorReasonTestCase{0xFF, RtaErrorReason::UserAbort, RtaErrorClass::Abort}), [](const ::testing::TestParamInfo< RtaErrorReasonTestCase > &info) { return std::format("{:#04x}", info.param.code);})
 
 profinet::TEST (RtaErrorsTests, UndefinedReasonIsUnknown)
 

Detailed Description

PROFINET RTA AlarmListener conformance and regression tests.

Verifies Layer 2 PROFINET alarm reception and AlarmAck transmission against the wire-level behavior.

The tests cover:

  • Untagged and VLAN-tagged RTA alarm reception.
  • PROFINET EtherType validation.
  • Source-MAC validation.
  • RTA destination endpoint validation.
  • AlarmNotification parsing and callback dispatch.
  • High- and low-priority AlarmAck frame IDs.
  • Mandatory priority VLAN tagging on transmitted AlarmAck frames.
  • RTA header serialization.
  • AlarmAck block serialization.
  • Callback exception isolation.

Definition in file test_alarmListenerRta.cpp.

Variable Documentation

◆ ackSeq

std::uint16_t ackSeq = 0

RTA AckSeqNum.

Definition at line 202 of file test_alarmListenerRta.cpp.

◆ addFlags

std::uint8_t addFlags = 0

RTA AdditionalFlags field.

Definition at line 196 of file test_alarmListenerRta.cpp.

Referenced by profinet::AlarmListener::SendRtaFrame().

◆ dstRef

std::uint16_t dstRef = 0

RTA destination alarm endpoint.

Definition at line 187 of file test_alarmListenerRta.cpp.

◆ frameId

◆ pduType

std::uint8_t pduType = 0

RTA PDU type including version nibble.

Definition at line 193 of file test_alarmListenerRta.cpp.

Referenced by profinet::sim::TEST().

◆ sendSeq

std::uint16_t sendSeq = 0

RTA SendSeqNum.

Definition at line 199 of file test_alarmListenerRta.cpp.

◆ srcRef

std::uint16_t srcRef = 0

RTA source alarm endpoint.

Definition at line 190 of file test_alarmListenerRta.cpp.

◆ varPart

Bytes varPart

RTA variable part.

Definition at line 205 of file test_alarmListenerRta.cpp.

Referenced by profinet::sim::VirtualAumaValve::BuildRtaErrorFrame().