bdd-freertos-lwipraw-mbedtls-fatfs-syslogng

Tested from main at 9ba7f64.

BDD 86 scenarios, 72 passed, 14 skipped, 4 min 48 s.

On this page: Block lifecycle · Buffer discard policy · Buffered message delivery · Capacity threshold alert · Custom structured data — caller-supplied SD-ELEMENT · Message ID and message body · Message header fields · PRIVAL encoding · Power cycle replay from block store · Store and forward during sender outage · Store capacity limit and discard policy · Structured data — meta SD-ELEMENT · Structured data — origin · Structured data — time quality · Switch transport at runtime · TCP message delivery · TCP reconnection after server outage · TLS equivalence matrix · TLS reconnection after server outage · Timestamp encoding · UDP datagram path-MTU clipping · Walking skeleton end-to-end · Built against

Block lifecycle @buffered @store @tcp 2 scenarios, 2 passed, 6.5 s

The block store rotates blocks across files of fixed size. Once every record
in a non-active block is sent and acknowledged, that block is disposed
immediately — flash drivers prefer "erase-then-write" so producers can drain
retired blocks during idle moments rather than clustering erases at capacity
boundaries. The active write block is never disposed by this path.

pass Active write block is not disposed when its only records are sent @buffered @store @tcp 3.4 s
  • Given the syslog oracle is running 1 ms
  • And the block store is enabled with max-blocks 4 and max-block-size 5000 and discard-policy oldest 1 ms
  • And the BDD target is running with transport tcp and no structured data 2.8 s
  • And the set of existing block files is recorded 50 ms
  • When the client sends 2 messages 552 ms
  • Then the syslog oracle receives 2 messages 1 ms
  • And no recorded block file has been disposed 8 ms
pass Older block is disposed once all its records are drained @buffered @store @tcp 3.0 s
  • Given the syslog oracle is running 1 ms
  • And the block store is enabled with max-blocks 4 and max-block-size 520 and discard-policy oldest 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.5 s
  • When the client sends 5 messages 510 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And block file 00 has been disposed 25 ms

Buffer discard policy @buffered @host_buffer @tcp 4 scenarios, 0 passed, 4 skipped, 0 ms

With a store that keeps nothing, the buffer is the only queue. Service holds
the record whose send failed and reads nothing more until it has gone, so the
records logged during an outage fill the buffer behind it. The discard policy
the logger was given decides what becomes of the records that do not fit, and
of the record Service holds once the buffer has filled behind it. Unless it
halts, the logger reports the loss to the collector as a record of its own.
Each scenario logs one record into the outage first, so Service is holding it
before the burst arrives and the burst meets a buffer nothing is read from.
The message body is padded so a hundred records outgrow the buffer on every
hosted target; the Linux queue holds ten records whatever their size.

skip Discard-newest keeps the records that fitted and refuses the rest @buffered @host_buffer @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the client's message body is 250 characters long 0 ms
  • Given the discard policy is newest 0 ms
  • And the BDD target is running with transport tcp and no structured data 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends a message 0 ms
  • And the client sends 100 messages 0 ms
  • And the syslog oracle resumes accepting TCP connections 0 ms
  • Then the syslog oracle finishes draining 0 ms
  • And the syslog oracle received sequenceId 2 0 ms
  • And the syslog oracle did not receive sequenceId 102 0 ms
  • And the outage messages have contiguous sequenceIds 0 ms
  • And the syslog oracle received a report that the buffer lost records 0 ms
  • And the target reports once that the buffer lost records 0 ms
skip Discard-oldest keeps the latest records @buffered @host_buffer @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the client's message body is 250 characters long 0 ms
  • Given the discard policy is oldest 0 ms
  • And the BDD target is running with transport tcp and no structured data 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends a message 0 ms
  • And the client sends 100 messages 0 ms
  • And the syslog oracle resumes accepting TCP connections 0 ms
  • Then the syslog oracle finishes draining 0 ms
  • And the syslog oracle received sequenceId 102 0 ms
  • And the syslog oracle did not receive sequenceId 2 0 ms
  • And the syslog oracle received a report that the buffer lost records 0 ms
  • And the target reports that the buffer lost records 0 ms
skip Halt stops the application when the buffer overflows @buffered @host_buffer @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the client's message body is 250 characters long 0 ms
  • Given the discard policy is halt 0 ms
  • And the halt callback exits the process 0 ms
  • And the BDD target is running with transport tcp and no structured data 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends a message 0 ms
  • And the client sends 100 messages 0 ms
  • And the client attempts to send it exits with code 2 0 ms
  • Then the target reports once that the buffer lost records 0 ms
skip Halt prevents further service after the buffer overflows @buffered @host_buffer @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the client's message body is 250 characters long 0 ms
  • Given the discard policy is halt 0 ms
  • And the BDD target is running with transport tcp and no structured data 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends a message 0 ms
  • And the client sends 100 messages 0 ms
  • And the syslog oracle resumes accepting TCP connections 0 ms
  • Then the syslog oracle receives no more messages 0 ms
  • And the target reports once that the buffer lost records 0 ms

Buffered message delivery @udp 2 scenarios, 2 passed, 4.9 s

An example wired with a real (non-Null) buffer drives messages
through a service thread that drains the buffer and sends to the
oracle. Linux runner uses the pthread-driven Threaded example with
PosixMessageQueueBuffer; Windows runner uses the Win32-thread-driven
example with the portable CircularBuffer (S13.18); FreeRTOS-on-QEMU
runner uses the SingleTask example, itself buffered with
CircularBuffer + FreeRtosMutex + a FreeRTOS Service task (S08.04).
The same scenario pins all three wirings.

pass Single buffered message arrives at the oracle @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the syslog oracle receives a message with priority "134" 0 ms
  • And the syslog oracle receives a message with a timestamp within 60 seconds of now 0 ms
pass Multiple buffered messages arrive at the oracle @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends 3 syslog messages 2.5 s
  • Then the syslog oracle receives 3 messages 1 ms

Capacity threshold alert @buffered @store @tcp 2 scenarios, 2 passed, 7.0 s

An early-warning callback fires when the block store crosses a configured
capacity threshold, before the terminal full-store callback engages.
The callback marker is observed via a host file on POSIX/Windows
(OnThresholdCrossed writes /tmp/solidsyslog_threshold_marker.log) and
via a [THRESHOLD-CROSSED] line on UART on FreeRTOS-on-QEMU (which the
behave harness's captured-stdout reader sees) — see
Bdd/features/steps/syslog_steps.py::_threshold_marker_present for the
cross-target assertion.

pass Threshold callback fires when usage crosses configured threshold @buffered @store @tcp 4.3 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy oldest 0 ms
  • And the capacity threshold callback is enabled at 200 bytes 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.7 s
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 4 messages 516 ms
  • Then the capacity threshold callback was invoked 0 ms
pass Threshold callback does not fire while usage stays below threshold @buffered @store @tcp 2.7 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy oldest 0 ms
  • And the capacity threshold callback is enabled at 5000 bytes 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.4 s
  • When the client sends a message 210 ms
  • Then the syslog oracle receives 1 message 1 ms
  • And the capacity threshold callback was not invoked 0 ms

Custom structured data — caller-supplied SD-ELEMENT @udp 1 scenarios, 1 passed, 2.4 s

An integrator can attach a custom SD-ELEMENT to a single log call via
SolidSyslog_LogWithSd. The library frames it per RFC 5424 section 6.3 and the
element reaches the receiver alongside the per-instance SDs.

pass A custom SD-ELEMENT reaches the oracle @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a custom syslog message 2.4 s
  • Then the structured data contains detail "Hello World" 0 ms

Message ID and message body @udp 3 scenarios, 3 passed, 7.4 s

The library includes message ID and message body in the RFC 5424 message.

pass Message ID appears in the message @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with message ID "ID47" 2.5 s
  • Then the message ID is "ID47" 0 ms
pass Message body appears in the message @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with body "system started" 2.5 s
  • Then the message is "system started" 0 ms
pass Complete RFC 5424 message with all fields @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a complete message with message ID "CONN" and body "session opened" 2.5 s
  • Then the syslog oracle receives a message with priority "134" 0 ms
  • And the syslog oracle receives a message with a timestamp within 60 seconds of now 0 ms
  • And the syslog oracle receives a message with the system hostname 0 ms
  • And the app name is "SolidSyslogBddTarget" 0 ms
  • And the syslog oracle receives a message with the process ID of the BDD target 0 ms
  • And the message ID is "CONN" 0 ms
  • And the message is "session opened" 0 ms

Message header fields @udp 3 scenarios, 3 passed, 7.4 s

The library includes hostname, app-name, and process ID in the
RFC 5424 message header.

pass Hostname matches the system hostname @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the syslog oracle receives a message with the system hostname 0 ms
pass App name matches the BDD target @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the app name is "SolidSyslogBddTarget" 0 ms
pass Process ID matches the BDD target PID @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.5 s
  • Then the syslog oracle receives a message with the process ID of the BDD target 0 ms

PRIVAL encoding @udp 6 scenarios, 6 passed, 15.3 s

The library calculates RFC 5424 PRIVAL from facility and severity.
The BDD target accepts --facility and --severity flags,
defaulting to local0 (16) and info (6) when omitted.

pass Valid facility and severity produce correct PRIVAL -- @1.1 @udp 2.6 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 0 and severity 0 2.6 s
  • Then the syslog oracle receives a message with priority "0" 0 ms
pass Valid facility and severity produce correct PRIVAL -- @1.2 @udp 2.6 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 1 and severity 6 2.6 s
  • Then the syslog oracle receives a message with priority "14" 0 ms
pass Valid facility and severity produce correct PRIVAL -- @1.3 @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 16 and severity 6 2.5 s
  • Then the syslog oracle receives a message with priority "134" 0 ms
pass Valid facility and severity produce correct PRIVAL -- @1.4 @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 23 and severity 7 2.5 s
  • Then the syslog oracle receives a message with priority "191" 0 ms
pass Out-of-range facility is reported as internal error @udp 2.5 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 24 and severity 6 2.5 s
  • Then the syslog oracle receives a message with priority "43" 0 ms
pass Out-of-range severity is reported as internal error @udp 2.6 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a message with facility 16 and severity 8 2.6 s
  • Then the syslog oracle receives a message with priority "43" 0 ms

Power cycle replay from block store @buffered @store @tcp 3 scenarios, 3 passed, 22.2 s

After a power cycle, unsent messages persisted in the block store
are replayed before new messages. The collector sees old-session
sequenceIds followed by a jump to 1 (restart signal).

pass Stored messages replayed after power cycle @buffered @store @tcp 7.3 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the BDD target is running with transport tcp 2.3 s
  • When the client sends a message 214 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 510 ms
  • And the client is killed 32 ms
  • And the syslog oracle resumes accepting TCP connections 540 ms
  • Given the BDD target is running with transport tcp 2.3 s
  • Then the syslog oracle receives 4 messages 101 ms
  • And the replayed messages have sequenceIds 2, 3, 4 0 ms
  • When the client sends a message 226 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And the last message has sequenceId 1 0 ms
pass Stored messages replayed after power cycle with HMAC-SHA256 at rest @buffered @hmac @store @tcp 7.6 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the security policy is hmac-sha256 0 ms
  • And the BDD target is running with transport tcp 2.4 s
  • When the client sends a message 210 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 508 ms
  • And the client is killed 164 ms
  • And the syslog oracle resumes accepting TCP connections 536 ms
  • Given the BDD target is running with transport tcp 2.3 s
  • Then the syslog oracle receives 4 messages 101 ms
  • And the replayed messages have sequenceIds 2, 3, 4 0 ms
  • When the client sends a message 207 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And the last message has sequenceId 1 0 ms
pass Stored messages replayed after power cycle with AES-256-GCM at rest @aesgcm @buffered @store @tcp 7.3 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the security policy is aes-256-gcm 0 ms
  • And the BDD target is running with transport tcp 2.3 s
  • When the client sends a message 240 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 504 ms
  • And the client is killed 32 ms
  • And the syslog oracle resumes accepting TCP connections 536 ms
  • Given the BDD target is running with transport tcp 2.3 s
  • Then the syslog oracle receives 4 messages 101 ms
  • And the replayed messages have sequenceIds 2, 3, 4 0 ms
  • When the client sends a message 207 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And the last message has sequenceId 1 0 ms

Store and forward during sender outage @buffered @store @tcp 5 scenarios, 3 passed, 2 skipped, 24.8 s

When the syslog oracle goes down, messages accumulate in the
file-based store. Once the oracle recovers, the service loop
drains the store and delivers the buffered messages.

pass Messages delivered after sender outage @buffered @store @tcp 4.7 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the BDD target is running with transport tcp 2.3 s
  • When the client sends a message 228 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 5 messages 510 ms
  • And the syslog oracle resumes accepting TCP connections 539 ms
  • Then the syslog oracle receives 6 messages 1 ms
  • And the messages have contiguous sequenceIds 1 ms
  • And the syslog oracle received a report that delivery failed 1 ms
  • And the syslog oracle received a report that delivery was restored 0 ms
skip Messages delivered after a stored record is corrupted @buffered @host_store @store @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the BDD target is running with transport tcp 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends 3 messages 0 ms
  • And the client is killed 0 ms
  • And a byte of the first stored record still to send is corrupted 0 ms
  • And the syslog oracle resumes accepting TCP connections 0 ms
  • Given the BDD target is running with transport tcp 0 ms
  • Then the syslog oracle receives 3 messages 0 ms
  • And the replayed messages have sequenceIds 3, 4 0 ms
  • And the syslog oracle received a report that a stored record was discarded 0 ms
  • And the target reports that a stored record was discarded 0 ms
pass Stored messages wait for an HMAC key that is briefly unavailable @buffered @hmac @store @tcp 10.0 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the security policy is hmac-sha256 0 ms
  • And the BDD target is running with transport tcp 2.3 s
  • When the client sends a message 216 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 509 ms
  • And the key is withheld 177 ms
  • And the syslog oracle resumes accepting TCP connections 538 ms
  • Then the syslog oracle receives no more messages 5.0 s
  • And the target reports once that the key is unavailable 0 ms
  • When the key is restored 85 ms
  • Then the syslog oracle receives 4 messages 102 ms
  • And the messages have contiguous sequenceIds 1 ms
  • And the syslog oracle received a report that the key is unavailable 0 ms
  • And the syslog oracle received a report that a record could not be sealed 1 ms
pass Stored messages wait for an AES-256-GCM key that is briefly unavailable @aesgcm @buffered @store @tcp 10.0 s
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled 0 ms
  • And the security policy is aes-256-gcm 0 ms
  • And the BDD target is running with transport tcp 2.4 s
  • When the client sends a message 210 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 519 ms
  • And the key is withheld 99 ms
  • And the syslog oracle resumes accepting TCP connections 541 ms
  • Then the syslog oracle receives no more messages 5.0 s
  • And the target reports once that the key is unavailable 0 ms
  • When the key is restored 7 ms
  • Then the syslog oracle receives 4 messages 101 ms
  • And the messages have contiguous sequenceIds 1 ms
  • And the syslog oracle received a report that the key is unavailable 0 ms
  • And the syslog oracle received a report that a record could not be sealed 0 ms
skip Messages delivered after the store freezes @buffered @host_store @store @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled on a path that cannot be opened 0 ms
  • And the BDD target is running with transport tcp 0 ms
  • When the client sends 3 messages 0 ms
  • Then the syslog oracle receives 3 messages 0 ms
  • And the syslog oracle received a report that a file operation failed 0 ms
  • And the syslog oracle received a report that the store froze 0 ms
  • And the target reports that the store froze 0 ms

Store capacity limit and discard policy @buffered @store @tcp 4 scenarios, 4 passed, 28.8 s

The block store uses rotating files with a configurable capacity.
When the store is full, the discard policy determines whether
the oldest or newest messages are dropped.

pass Discard-oldest drops oldest messages when store overflows @buffered @store @tcp 5.6 s
  • Given the logger does not report its own events 0 ms
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy oldest 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.4 s
  • When the client sends a message 210 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 10 messages 511 ms
  • And the syslog oracle resumes accepting TCP connections 547 ms
  • Then the syslog oracle finishes draining 803 ms
  • And the syslog oracle received sequenceId 1 0 ms
  • And the syslog oracle received sequenceId 11 0 ms
  • And the syslog oracle did not receive sequenceId 2 0 ms
  • And the outage messages have contiguous sequenceIds 0 ms
  • And the target reports once that the store lost records 0 ms
pass Discard-newest preserves oldest messages when store overflows @buffered @store @tcp 6.1 s
  • Given the logger does not report its own events 0 ms
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy newest 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.8 s
  • When the client sends a message 228 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 10 messages 548 ms
  • And the syslog oracle resumes accepting TCP connections 540 ms
  • Then the syslog oracle finishes draining 803 ms
  • And the syslog oracle received sequenceId 1 0 ms
  • And the syslog oracle received sequenceId 2 0 ms
  • And the syslog oracle did not receive sequenceId 11 0 ms
  • And the outage messages have contiguous sequenceIds 0 ms
  • And the target reports once that the store lost records 0 ms
pass Halt stops the application when store overflows @buffered @store @tcp 7.4 s
  • Given the logger does not report its own events 0 ms
  • Given the syslog oracle is running 1 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy halt 0 ms
  • And the halt callback exits the process 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.5 s
  • When the client sends a message 222 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 8 messages 511 ms
  • And the client attempts to send it exits with code 2 3.0 s
  • Then the target reports once that the store lost records 0 ms
pass Halt prevents further service after store overflows @buffered @store @tcp 9.7 s
  • Given the logger does not report its own events 0 ms
  • Given the syslog oracle is running 0 ms
  • And the block store is enabled with max-blocks 2 and max-block-size 520 and discard-policy halt 0 ms
  • And the BDD target is running with transport tcp and no structured data 2.3 s
  • When the client sends a message 216 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 10 messages 526 ms
  • And the syslog oracle resumes accepting TCP connections 539 ms
  • Then the syslog oracle receives no more messages 5.0 s
  • And the target reports once that the store lost records 0 ms

Structured data — meta SD-ELEMENT @udp 3 scenarios, 3 passed, 7.2 s

The library populates the IANA-registered "meta" SD-ELEMENT with
sequenceId, sysUpTime, and language per RFC 5424 section 7.3.

pass First message has sequence ID 1 @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains sequenceId "1" 0 ms
pass Sequence ID increments with each message @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends 3 syslog messages 2.4 s
  • Then the syslog oracle receives 3 messages with sequential sequenceId values 0 ms
pass Message includes sysUpTime and language from example callbacks @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains sysUpTime as a decimal integer 0 ms
  • And the structured data contains language "en-GB" 0 ms

Structured data — origin @udp 6 scenarios, 5 passed, 1 skipped, 12.1 s

The library includes origin metadata identifying the software component.

pass Origin software appears in structured data @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains software "SolidSyslogBddTarget" 0 ms
pass Origin version appears in structured data @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains swVersion "0.7.0" 0 ms
pass Origin enterpriseId appears in structured data @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains enterpriseId "32473" 0 ms
pass Origin ip parameter appears in structured data @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains ip "192.0.2.1" 0 ms
skip All standard structured data present @rtc @udp 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 0 ms
  • Then the structured data contains sequenceId "1" 0 ms
  • And the structured data contains tzKnown "1" 0 ms
  • And the structured data contains software "SolidSyslogBddTarget" 0 ms
  • And the structured data contains swVersion "0.7.0" 0 ms
  • And the structured data contains enterpriseId "32473" 0 ms
  • And the structured data contains ip "192.0.2.1" 0 ms
pass All standard structured data present (no RTC) @no_rtc @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains sequenceId "1" 0 ms
  • And the structured data contains tzKnown "0" 0 ms
  • And the structured data contains isSynced "0" 0 ms
  • And the structured data contains software "SolidSyslogBddTarget" 0 ms
  • And the structured data contains swVersion "0.7.0" 0 ms
  • And the structured data contains enterpriseId "32473" 0 ms
  • And the structured data contains ip "192.0.2.1" 0 ms

Structured data — time quality @udp 4 scenarios, 2 passed, 2 skipped, 4.9 s

The library includes time quality metadata in structured data. RTC-equipped
targets (Linux, Windows) report tzKnown="1" and isSynced="1"; embedded
targets without an RTC report tzKnown="0" and isSynced="0", per the
no-RTC product stance modelled in the FreeRTOS reference example.

skip Time quality appears in structured data @rtc @udp 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 0 ms
  • Then the structured data contains tzKnown "1" 0 ms
  • And the structured data contains isSynced "1" 0 ms
skip Time quality and sequence ID coexist @rtc @udp 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 0 ms
  • Then the structured data contains sequenceId "1" 0 ms
  • And the structured data contains tzKnown "1" 0 ms
  • And the structured data contains isSynced "1" 0 ms
pass Time quality reflects no RTC @no_rtc @udp 2.4 s
  • Given the syslog oracle is running 1 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the structured data contains tzKnown "0" 0 ms
  • And the structured data contains isSynced "0" 0 ms
pass Time quality and sequence ID coexist (no RTC) @no_rtc @udp 2.5 s
  • Given the syslog oracle is running 1 ms
  • When the BDD target sends a syslog message 2.5 s
  • Then the structured data contains sequenceId "1" 0 ms
  • And the structured data contains tzKnown "0" 0 ms
  • And the structured data contains isSynced "0" 0 ms

Switch transport at runtime @buffered 2 scenarios, 2 passed, 5.9 s

The BDD target always wraps its UDP and TCP senders in a
SwitchingSender. The --transport CLI flag sets the initial selector
value, and the interactive `switch` command updates it at runtime.

pass Switch from UDP to TCP mid-run delivers via both @buffered @tcp @udp 3.0 s
  • Given the syslog oracle is running 0 ms
  • And the BDD target is running with default transport udp 2.3 s
  • When the client sends a message 224 ms
  • Then the syslog oracle receives 1 message over udp 0 ms
  • When the client switches to transport tcp 212 ms
  • And the client sends a message 229 ms
  • Then the syslog oracle receives 1 message over tcp 1 ms
  • And the syslog oracle receives 1 message over udp 0 ms
pass Switch from TCP to TLS mid-run delivers via both reliable transports @buffered @tls 3.0 s
  • Given the syslog oracle is running 0 ms
  • And the BDD target is running with default transport tcp 2.4 s
  • When the client sends a message 218 ms
  • Then the syslog oracle receives 1 message over tcp 1 ms
  • When the client switches to transport tls 205 ms
  • And the client sends a message 203 ms
  • Then the syslog oracle receives 1 message over tls 1 ms
  • And the syslog oracle receives 1 message over tcp 0 ms

TCP message delivery @tcp 1 scenarios, 1 passed, 2.5 s

An example wired with a real (non-Null) buffer sends messages via
TCP transport with RFC 6587 octet-counting framing. Linux runner
uses the pthread-driven Threaded example; Windows runner uses the
Win32-thread-driven example (S13.18). The same scenario pins both
wirings against their respective oracle (syslog-ng / OTel collector).

pass Message delivered over TCP @tcp 2.5 s
  • Given the syslog oracle is running 1 ms
  • When the BDD target sends a syslog message with transport tcp 2.5 s
  • Then the syslog oracle receives a message with priority "134" 0 ms

TCP reconnection after server outage @tcp 2 scenarios, 1 passed, 1 skipped, 4.9 s

The TCP sender detects connection failure and reconnects when the
server recovers. With no store, what becomes of the records logged
during the outage is the buffer's to decide. A queue keeps them:
Service holds the record whose send failed and reads nothing more
from the buffer until it has gone, so they wait and arrive, in order,
once the server is back. A passthrough buffer has nowhere to keep
them, so they are lost, and the logger reports the loss.

pass Messages delivered after server recovery @buffered @tcp 4.9 s
  • Given the syslog oracle is running 1 ms
  • And the BDD target is running with transport tcp 2.3 s
  • When the client sends a message 216 ms
  • Then the syslog oracle receives 1 message 1 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 506 ms
  • And the syslog oracle resumes accepting TCP connections 541 ms
  • And the client sends a message 205 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And the messages have contiguous sequenceIds 0 ms
  • And the syslog oracle received a report that delivery failed 0 ms
  • And the syslog oracle received a report that delivery was restored 0 ms
  • And the target reports once that the collector could not be reached 0 ms
  • And the target reports once that delivery was restored 0 ms
skip Records sent during the outage are lost, and the loss is reported once the server is back @passthrough @tcp 0 ms
  • Given the syslog oracle is running 0 ms
  • And the BDD target is running with transport tcp 0 ms
  • When the client sends a message 0 ms
  • Then the syslog oracle receives 1 message 0 ms
  • When the syslog oracle stops accepting TCP connections 0 ms
  • And the client sends 3 messages 0 ms
  • And the syslog oracle resumes accepting TCP connections 0 ms
  • And the client sends a message 0 ms
  • Then the syslog oracle receives 2 messages 0 ms
  • And the syslog oracle received a report that delivery failed 0 ms
  • And the syslog oracle received a report that delivery was restored 0 ms
  • And the target reports once that the collector could not be reached 0 ms
  • And the target reports once that delivery was restored 0 ms

TLS equivalence matrix @tls @tls_matrix 28 scenarios, 27 passed, 1 skipped, 1 min 56 s

Given equivalent configuration, SolidSyslog reaches the same decision on
every target - the same connect-or-refuse outcome, and the same portable
detail code from enum SolidSyslogTlsStreamErrors. Each cell runs on every
BDD lane, so one that passes has been proved against both TLS libraries,
both collectors and every transport the library ships.
The library that spoke is never asserted. It is the one thing that is
supposed to differ.

pass A peer signed by the trusted anchor and named as expected is authorised @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • When the BDD target sends a syslog message with transport tls 2.6 s
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the syslog oracle receives a message with priority "134" 0 ms
  • And the target reports no TLS fault 0 ms
pass A pinned certificate is authorised with no chain at all @pins @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 0 ms
  • And the collector presents "self-signed" 0 ms
  • And the BDD target trusts no certificate authority 0 ms
  • And the fingerprint of "self-signed" is pinned 1 ms
  • When the BDD target sends a syslog message with transport tls 2.7 s
  • Then the syslog oracle receives 1 message over tls 1 ms
  • And the target reports no TLS fault 0 ms
pass A peer presented with its issuer satisfies both the anchor and the pin @pins @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "chained" 0 ms
  • And the fingerprint of "chained" is pinned 0 ms
  • When the BDD target sends a syslog message with transport tls 2.7 s
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the target reports no TLS fault 0 ms
pass A pin set holding a certificate the collector no longer presents keeps delivering @pins @tls @tls_matrix 3.3 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the fingerprint of "collector-b" is pinned 0 ms
  • And the fingerprint of "anchor-signed" is pinned 0 ms
  • When the BDD target sends a syslog message with transport tls 3.3 s
  • Then the syslog oracle receives 1 message over tls 1 ms
  • And the target reports no TLS fault 0 ms
pass Opting out of the peer name check accepts a name that would not have matched @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "wrong-name" 0 ms
  • And the BDD target opts out of the peer name check 0 ms
  • When the BDD target sends a syslog message with transport tls 2.6 s
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the target reports no TLS fault 0 ms
pass A device that authenticates itself as well delivers over mutual TLS @mtls @tls @tls_matrix 3.1 s
  • Given the syslog oracle is running 1 ms
  • When the BDD target sends a syslog message with transport mtls 3.1 s
  • Then the syslog oracle receives 1 message over mtls 0 ms
  • And the syslog oracle receives a message with priority "134" 0 ms
  • And the target reports no TLS fault 0 ms
pass A device that declares no peer name delivers, and says the peer is unnamed @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target declares no expected peer name 0 ms
  • When the BDD target sends a syslog message with transport tls 2.6 s
  • Then the syslog oracle receives 1 message over tls 1 ms
  • And the target reports TLS detail "SERVER_NAME_NOT_SET" at severity WARNING 0 ms
pass A client credential the library cannot complete does not stop delivery @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target holds half a client credential 0 ms
  • When the BDD target sends a syslog message with transport tls 2.7 s
  • Then the syslog oracle receives 1 message over tls 1 ms
pass A pin RFC 5425 makes mandatory but no longer trusts is honoured, and objected to @pins @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the sha-1 fingerprint of "anchor-signed" is pinned 0 ms
  • When the BDD target sends a syslog message with transport tls 2.6 s
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the target reports TLS detail "FINGERPRINT_SHA1" at severity WARNING 0 ms
pass A peer that does not chain to the trusted anchor is refused @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "untrusted" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.4 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_UNTRUSTED" 200 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A peer whose certificate names another host is refused @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "wrong-name" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.5 s
  • Then the target reports TLS detail "PEER_NAME_MISMATCHED" 201 ms
  • And the syslog oracle receives no message over tls 1 ms
  • And the BDD target is still running 0 ms
pass A pin matching nothing the collector presents is refused @pins @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the fingerprint of "collector-b" is pinned 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.5 s
  • Then the target reports TLS detail "PEER_FINGERPRINT_MISMATCHED" 201 ms
  • And the syslog oracle receives no message over tls 1 ms
  • And the BDD target is still running 0 ms
pass A device given neither anchors nor pins never connects, and says why @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target trusts no certificate authority 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.5 s
  • Then the target reports TLS detail "NO_PEER_AUTHORISATION" 100 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A cipher policy naming a suite the collector offers connects at the version it offers @cipher @tls @tls_matrix 4.1 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "tls-1-2" 0 ms
  • And the BDD target asks for a suite the collector offers 0 ms
  • When the BDD target sends a syslog message with transport tls 4.1 s
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the target reports no TLS fault 0 ms
pass A device connects at TLS 1.3 to a collector that refuses anything older @tls @tls13 @tls_matrix 2.7 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • When the BDD target sends a syslog message with transport tls 2.7 s
  • Then the syslog oracle receives 1 message over tls 1 ms
  • And the target reports no TLS fault 0 ms
pass A cipher policy the collector cannot satisfy is refused rather than quietly widened @cipher @tls @tls_matrix 2.7 s
  • Given the syslog oracle is running 0 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target asks for a suite the collector does not offer 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.6 s
  • Then the target reports TLS detail "HANDSHAKE_REJECTED" 100 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A collector whose certificate has expired is refused @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "expired" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.4 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_EXPIRED" 200 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A collector whose certificate is not valid yet is refused @tls @tls_matrix 2.5 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "not-yet-valid" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.3 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_NOT_YET_VALID" 200 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A pin does not extend the validity period of the certificate it names @pins @tls @tls_matrix 3.2 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "expired" 0 ms
  • And the fingerprint of "expired" is pinned 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 3.0 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_EXPIRED" 200 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A chain that reaches no anchor is named ahead of the dates the certificate carries @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "untrusted-and-expired" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.4 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_UNTRUSTED" 201 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass The dates a certificate carries are named ahead of a name that does not match @tls @tls_matrix 2.6 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "wrong-name-and-expired" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.4 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_EXPIRED" 201 ms
  • And the syslog oracle receives no message over tls 0 ms
  • And the BDD target is still running 0 ms
pass A device the collector rejects after the handshake is told, rather than believing it delivered @tls @tls_matrix 22.8 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "mtls-required" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • And the BDD target is running with default transport tls 2.3 s
  • When the client sends a message 233 ms
  • Then the syslog oracle receives no message over mtls 20.1 s
  • When the client sends a message 225 ms
  • Then the target reports that delivery failed 0 ms
  • And the BDD target is still running 0 ms
pass Rotating the trust anchors lets a refused device deliver without a restart @buffered @rotation @tls @tls_matrix 2.9 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target trusts certificate authority "ca-b" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 2.4 s
  • Then the target reports TLS detail "PEER_CERTIFICATE_UNTRUSTED" 201 ms
  • And the syslog oracle receives no message over tls 1 ms
  • When the client is given trust anchors "ca" 62 ms
  • And the client sends a message 204 ms
  • Then the syslog oracle receives 2 messages over tls 1 ms
  • And the syslog oracle received a report that the collector's certificate was refused 0 ms
skip Rotating the trust anchors lets a refused device deliver, and the record it refused is lost @passthrough @rotation @tls @tls_matrix 0 ms
  • Given the syslog oracle is running 0 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target trusts certificate authority "ca-b" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • When the BDD target attempts to send a syslog message over tls 0 ms
  • Then the target reports TLS detail "PEER_CERTIFICATE_UNTRUSTED" 0 ms
  • And the syslog oracle receives no message over tls 0 ms
  • When the client is given trust anchors "ca" 0 ms
  • And the client sends a message 0 ms
  • Then the syslog oracle receives 1 message over tls 0 ms
  • And the syslog oracle received a report that the collector's certificate was refused 0 ms
pass Rotating the pin set stops a delivering device at its next connection @pins @rotation @tls @tls_matrix 3.0 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the fingerprint of "anchor-signed" is pinned 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • And the BDD target is running with default transport tls 2.3 s
  • When the client sends a message 212 ms
  • Then the syslog oracle receives 1 message over tls 0 ms
  • When the client is given the pin of "collector-b" 216 ms
  • And the client sends a message 237 ms
  • Then the target reports TLS detail "PEER_FINGERPRINT_MISMATCHED" 0 ms
  • And the syslog oracle receives 1 message over tls 0 ms
pass Rotating the expected peer name stops a delivering device @rotation @tls @tls_matrix 2.8 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • And the BDD target is running with default transport tls 2.3 s
  • When the client sends a message 215 ms
  • Then the syslog oracle receives 1 message over tls 1 ms
  • When the client expects the peer name "not-the-collector.bdd.test" 15 ms
  • And the client sends a message 219 ms
  • Then the target reports TLS detail "PEER_NAME_MISMATCHED" 0 ms
  • And the syslog oracle receives 1 message over tls 0 ms
pass A redirected device carries the identity it expects with it @rotation @tls @tls_matrix 2.9 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "anchor-signed" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • And the BDD target is running with default transport tls 2.4 s
  • When the client sends a message 212 ms
  • Then the syslog oracle receives 1 message over tls 1 ms
  • When the client is redirected to "collector-b" 20 ms
  • And the client is given trust anchors "ca-b" 14 ms
  • And the client expects the peer name "collector-b.bdd.test" 35 ms
  • And the client sends a message 208 ms
  • Then the syslog oracle receives 1 message over tls_b 1 ms
  • And the target reports no TLS fault 0 ms
pass Rotating in the client credential lets a refused device deliver @mtls @rotation @tls @tls_matrix 23.2 s
  • Given the syslog oracle is running 1 ms
  • And the collector presents "mtls-required" 0 ms
  • And the BDD target tolerates a refused handshake 0 ms
  • And the BDD target is running with default transport tls 2.4 s
  • When the client sends a message 218 ms
  • Then the syslog oracle receives no message over mtls 20.1 s
  • When the client is given the client credential "client" 28 ms
  • And the client sends a message 225 ms
  • Then the syslog oracle receives at least 1 message over mtls 301 ms

TLS reconnection after server outage @buffered @tls 1 scenarios, 1 passed, 4.9 s

A TLS stream writes through the plain TCP stream it is given, so a peer
that closes its end should be seen the same way over TLS as over TCP.
The risk is a TLS library taking a record into its own buffering without
reaching the transport, and so returning success for a record that the
closed connection will never deliver. If none is lost, the records logged
during the outage wait in the buffer and arrive, in order, once the server
is back.

pass Messages delivered over TLS after server recovery @buffered @tls 4.9 s
  • Given the syslog oracle is running 1 ms
  • And the BDD target is running with transport tls 2.3 s
  • When the client sends a message 218 ms
  • Then the syslog oracle receives 1 message over tls 0 ms
  • When the syslog oracle stops accepting TCP connections 1.1 s
  • And the client sends 3 messages 524 ms
  • And the syslog oracle resumes accepting TCP connections 540 ms
  • And the client sends a message 211 ms
  • Then the syslog oracle receives 5 messages 1 ms
  • And the syslog oracle receives 5 messages over tls 1 ms
  • And the messages have contiguous sequenceIds 0 ms
  • And the syslog oracle received a report that delivery failed 0 ms
  • And the syslog oracle received a report that delivery was restored 0 ms

Timestamp encoding @rtc @udp 1 scenarios, 0 passed, 1 skipped, 0 ms

The library captures the timestamp at raise-time via an injected clock
and formats it as RFC 5424 FULL-DATE "T" FULL-TIME. The no-RTC product
shape (config.clock = NULL -> NILVALUE TIMESTAMP per RFC 5424 section 6.2.3.1)
is covered by formatter unit tests; syslog-ng silently substitutes
receipt time for ${ISODATE} and ${S_ISODATE} when the wire TIMESTAMP
is NILVALUE, so a BDD assertion against the oracle would re-test what
the unit tests already cover, with no extra coverage.

skip Timestamp is received by syslog-ng @rtc @udp 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 0 ms
  • Then the syslog oracle receives a message with a timestamp within 60 seconds of now 0 ms

UDP datagram path-MTU clipping @requires_message_size_1500 @udp 2 scenarios, 0 passed, 2 skipped, 0 ms

When a UDP message exceeds the path MTU the sender clips it to the
path-MTU's safe payload, walking back over any partial UTF-8
codepoint at the trim point so the receiver always sees valid UTF-8.
The oversize scenario is POSIX-only (tagged windows_wip): the
Windows BDD runner uses the OTel Collector on 127.0.0.1, and
loopback's ~65535-byte MTU never triggers WSAEMSGSIZE for any
message inside SOLIDSYSLOG_MAX_MESSAGE_SIZE, so the EMSGSIZE retry
path can't actually fire. Full delivery runs on both runners.

skip Full delivery of a UTF-8 message within the path MTU @requires_message_size_1500 @udp 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a UTF-8 message that fits the path MTU 0 ms
  • Then the received message is byte-identical to the sent message 0 ms
skip Oversize UTF-8 message is clipped at a codepoint boundary @requires_message_size_1500 @udp @windows_wip 0 ms
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends an oversize UTF-8 message 0 ms
  • Then the received message is shorter than the sent message 0 ms
  • And the received message is a clean prefix of the sent message 0 ms

Walking skeleton end-to-end @udp 1 scenarios, 1 passed, 2.4 s

The BDD target sends an RFC 5424 message via UDP.
syslog-ng receives it and writes the parsed fields to a log file.

pass SolidSyslog sends a valid RFC 5424 message to syslog-ng @udp 2.4 s
  • Given the syslog oracle is running 0 ms
  • When the BDD target sends a syslog message 2.4 s
  • Then the syslog oracle receives a message with priority "134" 0 ms
  • And the syslog oracle receives a message with a timestamp within 60 seconds of now 0 ms
  • And the syslog oracle receives a message with the system hostname 0 ms
  • And the app name is "SolidSyslogBddTarget" 0 ms
  • And the syslog oracle receives a message with the process ID of the BDD target 0 ms

Built against

CompilerGNU 14.2.1 (arm-none-eabi-gcc), cross-compiling for Generic arm
BDD targetFREERTOS_LWIP
PacksStdAtomic, MbedTls, LwipRaw, FreeRtos, FatFs
MbedTls3.6.7 mbedtls-3.6.7 at 068ff08, MBEDTLS_DIR
LwipRaw2.2.1 STABLE-2_2_1_RELEASE at 77dcd25, LWIP_PATH
FreeRtosV11.3.3 V11.3.3 at 8959280, FREERTOS_KERNEL_PATH
FatFsR0.16 R0.16 at 30ca13c, FATFS_PATH