57 lines
2.5 KiB
C++
57 lines
2.5 KiB
C++
#ifndef TESTCOMMON_H
|
|
#define TESTCOMMON_H
|
|
|
|
#include "BasicUDPSocket.h"
|
|
#include "CompilerTypes.h"
|
|
#include "StreamString.h"
|
|
|
|
namespace MARTe {
|
|
extern const char8 * const debug_test_config;
|
|
bool SendCommandGAM(uint16 port, const char8* cmd, StreamString &reply);
|
|
void TestMessageCommand();
|
|
|
|
/**
|
|
* @brief Reads DebugService trace telemetry off @p sock until a real
|
|
* UDPS DATA packet (Common/UDP/UDPSProtocol.h) is decoded or
|
|
* @p overallTimeoutMs elapses, and extracts the value of the first
|
|
* (and, for these single-signal integration tests, only) traced
|
|
* signal — a scalar at wire offset 0, right after the 8-byte HRT
|
|
* timestamp that opens every DATA payload.
|
|
*
|
|
* DebugService's real UDP telemetry (DebugService::Streamer) speaks the
|
|
* shared UDPS protocol, not the legacy TraceHeader format declared in
|
|
* DebugCore.h (that struct is now dead code, kept only for historical
|
|
* reference) — callers must not reinterpret raw datagrams as
|
|
* TraceHeader. CONFIG packets (sent once when the traced-signal set
|
|
* changes) are silently skipped so callers don't need to special-case
|
|
* them.
|
|
*
|
|
* @param sock DebugService's StreamPort/UdpPort listener, already Open()+Listen()ed.
|
|
* @param overallTimeoutMs total time budget across all read attempts.
|
|
* @param value output: the decoded scalar value.
|
|
* @return true if a DATA packet was decoded within the budget.
|
|
*/
|
|
bool ReadUDPSTraceScalar(BasicUDPSocket &sock, uint32 overallTimeoutMs, uint32 &value);
|
|
|
|
/**
|
|
* @brief Grows the OS receive buffer (SO_RCVBUF) on an already-Open()ed
|
|
* UDP socket.
|
|
*
|
|
* BasicUDPSocket never touches SO_RCVBUF, so listeners are left at the
|
|
* Linux default (net.core.rmem_default, ~208 KiB on most systems). At
|
|
* sustained 1 kHz+ trace rates a single scheduling delay in the test
|
|
* process (e.g. a printf, a GC pass, or just being descheduled) is
|
|
* enough to overflow that default buffer, causing silent kernel-level
|
|
* datagram drops (visible as RcvbufErrors in /proc/net/snmp) that show
|
|
* up as false "discontinuities" even though DebugService sent every
|
|
* sample. UDPSClient already works around this for production code
|
|
* (UDPSClient::SetRecvBufferSize); integration tests that Listen()
|
|
* directly on a raw BasicUDPSocket need the same treatment.
|
|
*
|
|
* Best-effort: a failure here just leaves the OS default in place.
|
|
*/
|
|
void GrowUDPRecvBuffer(BasicUDPSocket &sock, uint32 bytes = 4194304u);
|
|
}
|
|
|
|
#endif
|