Add bare-bones fuzztest for MoqtControlParser and MoqtDataParser
The new test target uses of Google's FuzzTest framework: https://github.com/google/fuzztest
In the future, it would be nice to use FuzzTest to the fullest, and test more advanced properties than "does not crash"!
PiperOrigin-RevId: 769118206
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 978226f..1c01d4a 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1584,6 +1584,7 @@
"quic/moqt/moqt_outgoing_queue.cc",
"quic/moqt/moqt_outgoing_queue_test.cc",
"quic/moqt/moqt_parser.cc",
+ "quic/moqt/moqt_parser_fuzz_test.cc",
"quic/moqt/moqt_parser_test.cc",
"quic/moqt/moqt_priority.cc",
"quic/moqt/moqt_priority_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 433467f..5ca530c 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1588,6 +1588,7 @@
"src/quiche/quic/moqt/moqt_outgoing_queue.cc",
"src/quiche/quic/moqt/moqt_outgoing_queue_test.cc",
"src/quiche/quic/moqt/moqt_parser.cc",
+ "src/quiche/quic/moqt/moqt_parser_fuzz_test.cc",
"src/quiche/quic/moqt/moqt_parser_test.cc",
"src/quiche/quic/moqt/moqt_priority.cc",
"src/quiche/quic/moqt/moqt_priority_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 1e652a7..f35ce33 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1587,6 +1587,7 @@
"quiche/quic/moqt/moqt_outgoing_queue.cc",
"quiche/quic/moqt/moqt_outgoing_queue_test.cc",
"quiche/quic/moqt/moqt_parser.cc",
+ "quiche/quic/moqt/moqt_parser_fuzz_test.cc",
"quiche/quic/moqt/moqt_parser_test.cc",
"quiche/quic/moqt/moqt_priority.cc",
"quiche/quic/moqt/moqt_priority_test.cc",
diff --git a/quiche/quic/moqt/moqt_parser_fuzz_test.cc b/quiche/quic/moqt/moqt_parser_fuzz_test.cc
new file mode 100644
index 0000000..73cadd7
--- /dev/null
+++ b/quiche/quic/moqt/moqt_parser_fuzz_test.cc
@@ -0,0 +1,39 @@
+// Copyright (c) 2025 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "absl/strings/string_view.h"
+#include "quiche/quic/moqt/moqt_parser.h"
+#include "quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h"
+#include "quiche/common/platform/api/quiche_fuzztest.h"
+#include "quiche/web_transport/test_tools/in_memory_stream.h"
+
+namespace moqt::test {
+namespace {
+
+void MoqtControlParserNeverCrashes(bool is_data_stream, bool uses_web_transport,
+ absl::string_view stream_data, bool fin) {
+ webtransport::test::InMemoryStream stream(/*stream_id=*/0);
+ MoqtParserTestVisitor visitor(/*enable_logging=*/false);
+
+ MoqtControlParser control_parser(uses_web_transport, &stream, visitor);
+ MoqtDataParser data_parser(&stream, &visitor);
+
+ if (is_data_stream) {
+ stream.Receive(stream_data, /*fin=*/fin);
+ data_parser.ReadAllData();
+ } else {
+ stream.Receive(stream_data, /*fin=*/false);
+ control_parser.ReadAndDispatchMessages();
+ }
+}
+
+FUZZ_TEST(MoqtParserTest, MoqtControlParserNeverCrashes)
+ .WithDomains(fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
+ fuzztest::Arbitrary<std::string>(),
+ fuzztest::Arbitrary<bool>());
+
+} // namespace
+} // namespace moqt::test