|
PROFINET IO Controller Stack 1.0.0
Modern C++ implementation of a PROFINET IO Controller stack
|
Unit tests for PROFINET DCE/RPC helpers and connection configuration. More...
#include <gtest/gtest.h>#include <deque>#include <optional>#include <thread>#include "mocks/mockRawEthernetSocket.h"#include "profinet/rpc.h"#include "profinet/rpcTypes.h"
Include dependency graph for test_rpc.cpp:Go to the source code of this file.
Classes | |
| class | profinet::rpc::RpcTests |
| class | profinet::rpc::RpcTests::TestRpcTransport |
| Deterministic RPC transport used to test RPCCon without UDP. More... | |
Namespaces | |
| namespace | profinet |
| namespace | profinet::rpc |
Functions | |
| profinet::rpc::TEST_F (RpcTests, UuidBytesToStringStringToUuidBytesRoundtrip) | |
| profinet::rpc::TEST_F (RpcTests, StringToUuidBytesRejectsMalformedInput) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointResolvesWellKnownProfinetInterfaceNames) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointUnknownUuidIncludesUuid) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNameIsCaseInsensitive) | |
| profinet::rpc::TEST_F (RpcTests, IOCRSetupCycleTimeCalculation) | |
| profinet::rpc::TEST_F (RpcTests, IOCRSetupValidateFlagsEmptySlotsAndLowWatchdog) | |
| profinet::rpc::TEST_F (RpcTests, IOCRSetupValidateEmptySlots) | |
| profinet::rpc::TEST_F (RpcTests, IOCRSetupValidateLowWatchdog) | |
| profinet::rpc::TEST_F (RpcTests, IOCRSetupValidateNormalConfiguration) | |
| profinet::rpc::TEST_F (RpcTests, CreateRpcBuildsExpectedHeader) | |
| profinet::rpc::TEST_F (RpcTests, PNRPCHeaderInterfaceUuidBytes) | |
| profinet::rpc::TEST_F (RpcTests, BuildIocrBlockUsesConfiguredSlots) | |
| profinet::rpc::TEST_F (RpcTests, GenerateNonZeroArUuid) | |
| profinet::rpc::TEST_F (RpcTests, GenerateDifferentArUuids) | |
| profinet::rpc::TEST_F (RpcTests, GenerateIndependentArAndActivityUuids) | |
| profinet::rpc::TEST_F (RpcTests, GenerateNonZeroSessionKey) | |
| profinet::rpc::TEST_F (RpcTests, GeneratedSessionKeysAreAlwaysNonZero) | |
| profinet::rpc::TEST_F (RpcTests, BuildsExpectedRemoteObjectUuid) | |
| profinet::rpc::TEST_F (RpcTests, BuildObjectUuidPreservesDeviceAndVendorBytes) | |
| profinet::rpc::TEST_F (RpcTests, BuildObjectUuidUsesFixedProfinetPrefixAndSuffix) | |
| profinet::rpc::TEST_F (RpcTests, RemoteObjectUuidHasExpectedLength) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNamePnioDevice) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNamePnioController) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNamePnioSupervisor) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNamePnioParameterServer) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNameEpm) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNameUnknown) | |
| profinet::rpc::TEST_F (RpcTests, EPMEndpointInterfaceNameIsCaseInsensitiveForAllKnownInterfaces) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerRejectsTooShortTower) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerStopsOnTruncatedFloorHeader) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerStopsOnTruncatedLhs) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerStopsOnTruncatedRhsLength) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerStopsOnTruncatedRhs) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerSkipsEmptyLhs) | |
| profinet::rpc::TEST_F (RpcTests, MakeInterfaceTowerLhsCreatesValidInterfaceBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesInterfaceFloor) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerSkipsEmptyFloor) | |
| profinet::rpc::TEST_F (RpcTests, MakeEpmTowerEncodesEmptyThenInterfaceFloor) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesInterfaceUuidAndVersions) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerInterfaceFloorWithoutMinorVersion) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerRejectsShortInterfaceFloor) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesUdpProtocol) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesBigEndianPort) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerIgnoresShortPortRhs) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesIpv4Address) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerIgnoresShortIpRhs) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerParsesCompleteEndpoint) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerOnlyUsesFirstInterfaceFloorForInterfaceData) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerIgnoresInterfaceDataFromLaterFloor) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerIgnoresUnknownProtocol) | |
| profinet::rpc::TEST_F (RpcTests, ParseEpmTowerContinuesAcrossAllFloors) | |
| Verifies that protocol, port and IP floors are parsed after the interface floor. | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupReturnsParsedEndpoint) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupBuildsInterfaceFilteredRequest) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupReturnsEmptyForShortResponse) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupReturnsEmptyForFaultResponse) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupReturnsEmptyForUnexpectedResponseType) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupReturnsEmptyForShortBody) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupClampsBodyLengthToReceivedData) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupStopsOnTruncatedEntryUuid) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupStopsOnTruncatedTowerPointer) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupStopsOnTruncatedAnnotationLength) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupHandlesZeroLengthAnnotation) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupTrimsTrailingAnnotationZeros) | |
| profinet::rpc::TEST_F (RpcTests, EpmLookupIgnoresEntryWithInvalidTower) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoReturnsFirstDirectResponse) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoSendsStationNameRequest) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoFallsBackToDiscovery) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoDiscoveryMatchesStationNameCaseInsensitive) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoDiscoverySkipsNonMatchingDevice) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoThrowsWhenDiscoveryFindsNoMatchingDevice) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoNotFoundExceptionContainsStationName) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoThrowsWhenDiscoveryReturnsNoResponses) | |
| profinet::rpc::TEST_F (RpcTests, GetStationInfoDoesNotFilterNonEmptyDirectResponse) | |
| profinet::rpc::TEST_F (RpcTests, CreateNrdBuildsExpectedWrapper) | |
| profinet::rpc::TEST_F (RpcTests, CreateNrdHandlesEmptyPayload) | |
| profinet::rpc::TEST_F (RpcTests, CreateNrdRoundTripsThroughSerialization) | |
| profinet::rpc::TEST_F (RpcTests, BuildAlarmCrBlockUsesProfinetEtherTypeForTransportZero) | |
| profinet::rpc::TEST_F (RpcTests, BuildAlarmCrBlockUsesIpEtherTypeForNonZeroTransport) | |
| profinet::rpc::TEST_F (RpcTests, BuildAlarmCrBlockEncodesPriority) | |
| profinet::rpc::TEST_F (RpcTests, BuildAlarmCrBlockCombinesTransportAndPriority) | |
| profinet::rpc::TEST_F (RpcTests, BuildAlarmCrBlockCreatesExpectedBlockHeader) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseReturnsMinusOneForEmptyData) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseReturnsMinusOneForShortData) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseIgnoresUnrelatedBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseReturnsLocalAlarmReference) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseContinuesAfterUnrelatedBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseContinuesAfterMalformedAlarmBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseIgnoresTruncatedAlarmBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseContinuesAfterMalformedBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseAlarmCrResponseReturnsMinusOneAfterUnrelatedBlocks) | |
| profinet::rpc::TEST_F (RpcTests, IsConnectedReturnsFalseInitially) | |
| profinet::rpc::TEST_F (RpcTests, InfoReturnsDeviceDescription) | |
| profinet::rpc::TEST_F (RpcTests, ArUuidReturnsConnectionArUuid) | |
| profinet::rpc::TEST_F (RpcTests, SessionKeyReturnsInitialValue) | |
| profinet::rpc::TEST_F (RpcTests, LocalAlarmRefReturnsConfiguredValue) | |
| profinet::rpc::TEST_F (RpcTests, DeviceAlarmRefReturnsZeroInitially) | |
| profinet::rpc::TEST_F (RpcTests, HasAlarmCrReturnsFalseInitially) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseReturnsZeroForEmptyData) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseReturnsZeroForShortData) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseIgnoresUnrelatedBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseIgnoresDifferentIocrType) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseReturnsMatchingFrameId) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseIgnoresMalformedIocrBlock) | |
| profinet::rpc::TEST_F (RpcTests, ParseIocrResponseFindsMatchingBlockAfterUnrelatedBlock) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveReturnsResponseAndMarksConnectionLive) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveRetriesAfterRequestPacket) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveThrowsForShortResponse) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveThrowsRpcFaultError) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveThrowsForRejectedResponse) | |
| profinet::rpc::TEST_F (RpcTests, SendReceiveThrowsForUnexpectedPacketType) | |
| profinet::rpc::TEST_F (RpcTests, CheckTimeoutDoesNothingWhenNotConnected) | |
| profinet::rpc::TEST_F (RpcTests, CheckTimeoutDoesNotReconnectBeforeTimeout) | |
| profinet::rpc::TEST_F (RpcTests, CheckTimeoutReconnectsAfterTimeout) | |
| profinet::rpc::TEST_F (RpcTests, ConnectRequiresSourceMacForInitialConnection) | |
| profinet::rpc::TEST_F (RpcTests, ConnectEstablishesBasicApplicationRelation) | |
| profinet::rpc::TEST_F (RpcTests, ConnectRequestsAlarmCr) | |
| profinet::rpc::TEST_F (RpcTests, ConnectLeavesAlarmCrDisabledWhenResponseHasNoAlarmCr) | |
| profinet::rpc::TEST_F (RpcTests, ConnectConvertsDevicePnioError) | |
| profinet::rpc::TEST_F (RpcTests, ConnectConvertsRpcError) | |
| profinet::rpc::TEST_F (RpcTests, ConnectReusesSourceMacDuringReconnect) | |
| profinet::rpc::TEST_F (RpcTests, ConnectReplacesSourceMacDuringReconnect) | |
| profinet::rpc::TEST_F (RpcTests, ConnectRejectsMissingSourceMacDuringReconnect) | |
| profinet::rpc::TEST_F (RpcTests, ConnectReturnsConnectResultForIocrSetup) | |
| profinet::rpc::TEST_F (RpcTests, ReadReturnsParsedIodResponse) | |
| profinet::rpc::TEST_F (RpcTests, ReadThrowsPnioErrorForDeviceError) | |
| profinet::rpc::TEST_F (RpcTests, ReadImplicitReturnsParsedIodResponse) | |
| profinet::rpc::TEST_F (RpcTests, ReadImplicitThrowsPnioErrorForDeviceError) | |
| profinet::rpc::TEST_F (RpcTests, WriteCompletesSuccessfully) | |
| profinet::rpc::TEST_F (RpcTests, WriteThrowsPnioErrorForDeviceError) | |
| profinet::rpc::TEST_F (RpcTests, ReadRawReturnsPayload) | |
| profinet::rpc::TEST_F (RpcTests, ReadImWrappersReadAllIndividualIndices) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllImReturnsAllSuccessfulRecords) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllImIgnoresRpcErrorForOptionalRecord) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllImIgnoresStandardExceptionForOptionalRecord) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllImPropagatesIm0Failure) | |
| profinet::rpc::TEST_F (RpcTests, WriteMultipleReturnsEmptyForNoWrites) | |
| profinet::rpc::TEST_F (RpcTests, WriteMultipleSendsMultipleWrites) | |
| profinet::rpc::TEST_F (RpcTests, WriteMultipleThrowsPnioErrorForDeviceError) | |
| profinet::rpc::TEST_F (RpcTests, ReadModuleDiffReturnsParsedModuleDifference) | |
| profinet::rpc::TEST_F (RpcTests, ReadDiagnosisUsesFullDiagnosisParser) | |
| profinet::rpc::TEST_F (RpcTests, ReadDiagnosisFallsBackToSimpleParser) | |
| profinet::rpc::TEST_F (RpcTests, ReadDiagnosisReturnsEmptyForShortDiagnosisPayload) | |
| profinet::rpc::TEST_F (RpcTests, ReadDiagnosisReturnsEmptyForRpcError) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllDiagnosisReturnsNonEmptyDiagnosisResults) | |
| profinet::rpc::TEST_F (RpcTests, ReadAllDiagnosisContinuesAfterRpcError) | |
| profinet::rpc::TEST_F (RpcTests, ReadPdRealDataReturnsParsedData) | |
| profinet::rpc::TEST_F (RpcTests, ReadRealIdentificationDataReturnsParsedData) | |
| profinet::rpc::TEST_F (RpcTests, DiscoverSlotsReturnsRealIdentificationSlots) | |
| profinet::rpc::TEST_F (RpcTests, DiscoverTopologyReturnsBothTopologyRecords) | |
| profinet::rpc::TEST_F (RpcTests, EnumerateIndicesReportsAllProbeOutcomes) | |
| profinet::rpc::TEST_F (RpcTests, SendControlRejectsDisconnectedConnection) | |
| profinet::rpc::TEST_F (RpcTests, SendControlSendsWithoutWaiting) | |
| profinet::rpc::TEST_F (RpcTests, SendControlReturnsResponsePayload) | |
| profinet::rpc::TEST_F (RpcTests, SendControlThrowsPnioErrorForDeviceError) | |
| profinet::rpc::TEST_F (RpcTests, PrmBeginSendsExpectedControlCommand) | |
| profinet::rpc::TEST_F (RpcTests, PrmEndSendsExpectedControlCommand) | |
| profinet::rpc::TEST_F (RpcTests, ReadyForRtClass3SendsExpectedControlCommand) | |
| profinet::rpc::TEST_F (RpcTests, ParseRawRpcHeaderRejectsShortData) | |
| profinet::rpc::TEST_F (RpcTests, ParseRawRpcHeaderParsesBigEndian) | |
| profinet::rpc::TEST_F (RpcTests, ParseRawRpcHeaderParsesLittleEndian) | |
| profinet::rpc::TEST_F (RpcTests, ParseRawRpcHeaderPreservesSerialHigh) | |
| profinet::rpc::TEST_F (RpcTests, ParseRawRpcHeaderExtractsPayloadAfterFixedHeader) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadyThrowsWhenNotConnected) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsInvalidRawRpcPacket) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsNonRequestPacket) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsNonControlOperation) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsShortNrdPayload) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsShortNrdBody) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadySkipsWrongControlBlockType) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadyProcessesBigEndianRequest) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadyProcessesLittleEndianRequest) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadyAcceptsUnexpectedControlCommand) | |
| profinet::rpc::TEST_F (RpcTests, ApplicationReadyPropagatesReceiveException) | |
| profinet::rpc::TEST_F (RpcTests, DisconnectSendsReleaseRequestAndClearsLive) | |
| profinet::rpc::TEST_F (RpcTests, DisconnectBuildsCorrectReleaseBlock) | |
| profinet::rpc::TEST_F (RpcTests, DisconnectDoesNothingWhenNotLive) | |
| profinet::rpc::TEST_F (RpcTests, DisconnectSwallowsSendExceptionAndClearsLive) | |
| profinet::rpc::TEST_F (RpcTests, DisconnectAlwaysClearsLive) | |
| profinet::rpc::TEST_F (RpcTests, CloseDisconnectsAndClosesBothTransports) | |
| profinet::rpc::TEST_F (RpcTests, CloseClosesBothTransportsWhenNotLive) | |
Unit tests for PROFINET DCE/RPC helpers and connection configuration.
Verifies UUID conversion, EPM endpoint identification, IOCR setup validation, RPC header construction, and IOCR block generation provided by rpc.h.
The tests cover:
The tests focus on deterministic protocol construction and configuration behavior without requiring a live PROFINET device or network connection.
Definition in file test_rpc.cpp.