SDP fuzzer: Add functionality for break on assert fails in framework
This makes fuzzer test cases fail if there's an assert failure in the helper functions called by the test. Bug: None Change-Id: Ic187d72b8d4e016659a68a7bdcaadb78ab2aab05 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/246400 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35804}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
9d29026216
commit
38c762c0ab
@ -416,6 +416,7 @@ if (!build_with_chromium) {
|
|||||||
"../../pc:libjingle_peerconnection",
|
"../../pc:libjingle_peerconnection",
|
||||||
"../../test:test_support",
|
"../../test:test_support",
|
||||||
]
|
]
|
||||||
|
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
|
||||||
seed_corpus = "corpora/sdp-corpus"
|
seed_corpus = "corpora/sdp-corpus"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "absl/strings/string_view.h"
|
||||||
#include "pc/test/integration_test_helpers.h"
|
#include "pc/test/integration_test_helpers.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -20,28 +21,19 @@ class FuzzerTest : public PeerConnectionIntegrationBaseTest {
|
|||||||
FuzzerTest()
|
FuzzerTest()
|
||||||
: PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan) {}
|
: PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan) {}
|
||||||
|
|
||||||
void TestBody() override {}
|
void RunNegotiateCycle(absl::string_view message) {
|
||||||
};
|
CreatePeerConnectionWrappers();
|
||||||
|
|
||||||
void FuzzOneInput(const uint8_t* data, size_t size) {
|
|
||||||
if (size > 16384) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::string message(reinterpret_cast<const char*>(data), size);
|
|
||||||
|
|
||||||
FuzzerTest test;
|
|
||||||
test.CreatePeerConnectionWrappers();
|
|
||||||
// Note - we do not do test.ConnectFakeSignaling(); all signals
|
// Note - we do not do test.ConnectFakeSignaling(); all signals
|
||||||
// generated are discarded.
|
// generated are discarded.
|
||||||
|
|
||||||
auto srd_observer =
|
auto srd_observer =
|
||||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||||
|
|
||||||
webrtc::SdpParseError error;
|
SdpParseError error;
|
||||||
std::unique_ptr<webrtc::SessionDescriptionInterface> sdp(
|
std::unique_ptr<SessionDescriptionInterface> sdp(
|
||||||
CreateSessionDescription("offer", message, &error));
|
CreateSessionDescription("offer", std::string(message), &error));
|
||||||
// Note: This form of SRD takes ownership of the description.
|
// Note: This form of SRD takes ownership of the description.
|
||||||
test.caller()->pc()->SetRemoteDescription(srd_observer, sdp.release());
|
caller()->pc()->SetRemoteDescription(srd_observer, sdp.release());
|
||||||
// Wait a short time for observer to be called. Timeout is short
|
// Wait a short time for observer to be called. Timeout is short
|
||||||
// because the fuzzer should be trying many branches.
|
// because the fuzzer should be trying many branches.
|
||||||
EXPECT_TRUE_WAIT(srd_observer->called(), 100);
|
EXPECT_TRUE_WAIT(srd_observer->called(), 100);
|
||||||
@ -50,9 +42,26 @@ void FuzzOneInput(const uint8_t* data, size_t size) {
|
|||||||
auto sld_observer =
|
auto sld_observer =
|
||||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||||
if (srd_observer->result()) {
|
if (srd_observer->result()) {
|
||||||
test.caller()->pc()->SetLocalDescription(sld_observer.get());
|
caller()->pc()->SetLocalDescription(sld_observer.get());
|
||||||
EXPECT_TRUE_WAIT(sld_observer->called(), 100);
|
EXPECT_TRUE_WAIT(sld_observer->called(), 100);
|
||||||
}
|
}
|
||||||
|
// If there is an EXPECT failure, die here.
|
||||||
|
RTC_CHECK(!HasFailure());
|
||||||
|
}
|
||||||
|
|
||||||
|
// This test isn't using the test definition macros, so we have to
|
||||||
|
// define the TestBody() function, even though we don't need it.
|
||||||
|
void TestBody() override {}
|
||||||
|
};
|
||||||
|
|
||||||
|
void FuzzOneInput(const uint8_t* data, size_t size) {
|
||||||
|
if (size > 16384) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FuzzerTest test;
|
||||||
|
test.RunNegotiateCycle(
|
||||||
|
absl::string_view(reinterpret_cast<const char*>(data), size));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user