dcsctp: Add packet capture support in unit tests
This is needed to be able to debug test cases when they fail.
Bug: webrtc:12961
Change-Id: I39bfe532709d02acb328ff5fdd005d33be4dc31c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/225544
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34452}
diff --git a/net/dcsctp/socket/BUILD.gn b/net/dcsctp/socket/BUILD.gn
index 58abd7a..72ac139 100644
--- a/net/dcsctp/socket/BUILD.gn
+++ b/net/dcsctp/socket/BUILD.gn
@@ -211,6 +211,7 @@
"../packet:tlv_trait",
"../public:socket",
"../public:types",
+ "../public:utils",
"../rx:data_tracker",
"../rx:reassembly_queue",
"../testing:data_generator",
@@ -220,6 +221,7 @@
"../tx:retransmission_queue",
]
absl_deps = [
+ "//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
diff --git a/net/dcsctp/socket/dcsctp_socket_test.cc b/net/dcsctp/socket/dcsctp_socket_test.cc
index 7a7daac..4ab4249 100644
--- a/net/dcsctp/socket/dcsctp_socket_test.cc
+++ b/net/dcsctp/socket/dcsctp_socket_test.cc
@@ -16,6 +16,7 @@
#include <utility>
#include <vector>
+#include "absl/flags/flag.h"
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
@@ -40,6 +41,7 @@
#include "net/dcsctp/public/dcsctp_message.h"
#include "net/dcsctp/public/dcsctp_options.h"
#include "net/dcsctp/public/dcsctp_socket.h"
+#include "net/dcsctp/public/text_pcap_packet_observer.h"
#include "net/dcsctp/public/types.h"
#include "net/dcsctp/rx/reassembly_queue.h"
#include "net/dcsctp/socket/mock_dcsctp_socket_callbacks.h"
@@ -47,6 +49,8 @@
#include "rtc_base/gunit.h"
#include "test/gmock.h"
+ABSL_FLAG(bool, dcsctp_capture_packets, false, "Print packet capture.");
+
namespace dcsctp {
namespace {
using ::testing::_;
@@ -207,14 +211,21 @@
return options;
}
+std::unique_ptr<PacketObserver> GetPacketObserver(absl::string_view name) {
+ if (absl::GetFlag(FLAGS_dcsctp_capture_packets)) {
+ return std::make_unique<TextPcapPacketObserver>(name);
+ }
+ return nullptr;
+}
+
class DcSctpSocketTest : public testing::Test {
protected:
explicit DcSctpSocketTest(bool enable_message_interleaving = false)
: options_(MakeOptionsForTest(enable_message_interleaving)),
cb_a_("A"),
cb_z_("Z"),
- sock_a_("A", cb_a_, nullptr, options_),
- sock_z_("Z", cb_z_, nullptr, options_) {}
+ sock_a_("A", cb_a_, GetPacketObserver("A"), options_),
+ sock_z_("Z", cb_z_, GetPacketObserver("Z"), options_) {}
void AdvanceTime(DurationMs duration) {
cb_a_.AdvanceTime(duration);