]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add basic tests of EDNSOTTraceRecord and EDNSOTTraceRecordView
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 27 Jan 2026 12:32:29 +0000 (13:32 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 27 Jan 2026 13:32:01 +0000 (14:32 +0100)
Signed-off-by: Otto Moerbeek <otto.moerbeek@open-xchange.com>
pdns/protozero-trace.hh
pdns/sdig.cc
pdns/test-protozero-trace.cc

index 3e8353e2fa720ebb6fe2e18d9408081051c67d87..5f65299e4be6b08895fd059d72b2b47391b38560 100644 (file)
@@ -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) {
index de8ba692e7bcda78a5c3ada5a3951e1bdee63c81..34fd0f8cfdb936e042a0e269d23b512e9a6114fd 100644 (file)
@@ -101,6 +101,7 @@ static void fillPacket(vector<uint8_t>& packet, const string& q, const string& t
       std::array<uint8_t, pdns::trace::EDNSOTTraceRecord::fullSize> data{};
       pdns::trace::EDNSOTTraceRecord record{data.data()};
       record.setVersion(0);
+      record.setReserved(0);
       record.setTraceID(traceid);
       record.setSpanID(spanid);
       record.setFlags(flags);
index 69489d929c5794e28ce39b6b0cd0f28c8b5a6895..49472ba240eb7d5091fa0b7471301d7c5447af70 100644 (file)
@@ -220,4 +220,69 @@ BOOST_AUTO_TEST_CASE(traces2)
   BOOST_CHECK_EQUAL(data, copyData);
 }
 
+BOOST_AUTO_TEST_CASE(EDNSOTTraceRecordView)
+{
+  std::array<uint8_t, pdns::trace::EDNSOTTraceRecord::fullSize> 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<uint8_t, 16> 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<uint8_t, 8> 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<uint8_t, pdns::trace::EDNSOTTraceRecord::fullSize> 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<uint8_t, pdns::trace::EDNSOTTraceRecord::fullSize> 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()