From: Otto Moerbeek Date: Tue, 27 Jan 2026 12:32:29 +0000 (+0100) Subject: Add basic tests of EDNSOTTraceRecord and EDNSOTTraceRecordView X-Git-Tag: rec-5.5.0-alpha0~34^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e583e57cb1f61eba468b3031ba722699a4617f0a;p=thirdparty%2Fpdns.git Add basic tests of EDNSOTTraceRecord and EDNSOTTraceRecordView Signed-off-by: Otto Moerbeek --- diff --git a/pdns/protozero-trace.hh b/pdns/protozero-trace.hh index 3e8353e2fa..5f65299e4b 100644 --- a/pdns/protozero-trace.hh +++ b/pdns/protozero-trace.hh @@ -786,6 +786,10 @@ struct EDNSOTTraceRecord { data[0] = version; } + void setReserved(uint8_t reserved) + { + data[1] = reserved; + } void setTraceID(const TraceID& traceid) { std::copy(traceid.begin(), traceid.end(), &data[traceIDOffset]); @@ -817,6 +821,14 @@ struct EDNSOTTraceRecordView } return false; } + [[nodiscard]] bool getReserved(uint8_t& reserved) const + { + if (size > 1) { + reserved = data[1]; + return true; + } + return false; + } [[nodiscard]] bool getTraceID(TraceID& traceid) const { if (size == pdns::trace::EDNSOTTraceRecord::fullSize) { diff --git a/pdns/sdig.cc b/pdns/sdig.cc index de8ba692e7..34fd0f8cfd 100644 --- a/pdns/sdig.cc +++ b/pdns/sdig.cc @@ -101,6 +101,7 @@ static void fillPacket(vector& packet, const string& q, const string& t std::array data{}; pdns::trace::EDNSOTTraceRecord record{data.data()}; record.setVersion(0); + record.setReserved(0); record.setTraceID(traceid); record.setSpanID(spanid); record.setFlags(flags); diff --git a/pdns/test-protozero-trace.cc b/pdns/test-protozero-trace.cc index 69489d929c..49472ba240 100644 --- a/pdns/test-protozero-trace.cc +++ b/pdns/test-protozero-trace.cc @@ -220,4 +220,69 @@ BOOST_AUTO_TEST_CASE(traces2) BOOST_CHECK_EQUAL(data, copyData); } +BOOST_AUTO_TEST_CASE(EDNSOTTraceRecordView) +{ + std::array data; + data[0] = 0; + data[1] = 1; + size_t i; + for (i = 2; i < data.size(); i++) { + data[i] = i; + } + + pdns::trace::EDNSOTTraceRecordView record(data.data(), data.size()); + + uint8_t version; + BOOST_CHECK(record.getVersion(version)); + BOOST_CHECK_EQUAL(version, 0); + + uint8_t reserved; + BOOST_CHECK(record.getReserved(reserved)); + BOOST_CHECK_EQUAL(reserved, 1); + + pdns::trace::TraceID traceid; + BOOST_CHECK(record.getTraceID(traceid)); + + const std::array expectedTID = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; + BOOST_CHECK_EQUAL_COLLECTIONS(traceid.begin(), traceid.end(), expectedTID.begin(), expectedTID.end()); + + pdns::trace::SpanID spanid; + BOOST_CHECK(record.getSpanID(spanid)); + + const std::array expectedSID = {18, 19, 20, 21, 22, 23, 24, 25}; + BOOST_CHECK_EQUAL_COLLECTIONS(spanid.begin(), spanid.end(), expectedSID.begin(), expectedSID.end()); + + uint8_t flags; + BOOST_CHECK(record.getFlags(flags)); + BOOST_CHECK_EQUAL(flags, 26); +} + +BOOST_AUTO_TEST_CASE(EDNSOTTraceRecord) +{ + std::array data; + pdns::trace::EDNSOTTraceRecord record(data.data()); + + pdns::trace::TraceID traceid; + pdns::trace::SpanID spanid; + traceid.makeRandom(); + spanid.makeRandom(); + record.setVersion(1); + record.setReserved(0); + record.setTraceID(traceid); + record.setSpanID(spanid); + record.setFlags(99); + + std::array expected; + expected[0] = 1; + expected[1] = 0; + + for (size_t i = 0; i < traceid.size(); i++) { + expected[i + 2] = traceid.data()[i]; + } + for (size_t i = 0; i < spanid.size(); i++) { + expected[i + 18] = spanid.data()[i]; + } + expected[pdns::trace::EDNSOTTraceRecord::flagsOffset] = 99; + BOOST_CHECK_EQUAL_COLLECTIONS(data.begin(), data.end(), expected.begin(), expected.end()); +} BOOST_AUTO_TEST_SUITE_END()