mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
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:
parent
9d29026216
commit
38c762c0ab
2 changed files with 34 additions and 24 deletions
|
@ -416,6 +416,7 @@ if (!build_with_chromium) {
|
|||
"../../pc:libjingle_peerconnection",
|
||||
"../../test:test_support",
|
||||
]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
|
||||
seed_corpus = "corpora/sdp-corpus"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "pc/test/integration_test_helpers.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
@ -20,6 +21,36 @@ class FuzzerTest : public PeerConnectionIntegrationBaseTest {
|
|||
FuzzerTest()
|
||||
: PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan) {}
|
||||
|
||||
void RunNegotiateCycle(absl::string_view message) {
|
||||
CreatePeerConnectionWrappers();
|
||||
// Note - we do not do test.ConnectFakeSignaling(); all signals
|
||||
// generated are discarded.
|
||||
|
||||
auto srd_observer =
|
||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||
|
||||
SdpParseError error;
|
||||
std::unique_ptr<SessionDescriptionInterface> sdp(
|
||||
CreateSessionDescription("offer", std::string(message), &error));
|
||||
// Note: This form of SRD takes ownership of the description.
|
||||
caller()->pc()->SetRemoteDescription(srd_observer, sdp.release());
|
||||
// Wait a short time for observer to be called. Timeout is short
|
||||
// because the fuzzer should be trying many branches.
|
||||
EXPECT_TRUE_WAIT(srd_observer->called(), 100);
|
||||
|
||||
// If set-remote-description was successful, try to answer.
|
||||
auto sld_observer =
|
||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||
if (srd_observer->result()) {
|
||||
caller()->pc()->SetLocalDescription(sld_observer.get());
|
||||
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 {}
|
||||
};
|
||||
|
||||
|
@ -27,32 +58,10 @@ 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
|
||||
// generated are discarded.
|
||||
|
||||
auto srd_observer =
|
||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||
|
||||
webrtc::SdpParseError error;
|
||||
std::unique_ptr<webrtc::SessionDescriptionInterface> sdp(
|
||||
CreateSessionDescription("offer", message, &error));
|
||||
// Note: This form of SRD takes ownership of the description.
|
||||
test.caller()->pc()->SetRemoteDescription(srd_observer, sdp.release());
|
||||
// Wait a short time for observer to be called. Timeout is short
|
||||
// because the fuzzer should be trying many branches.
|
||||
EXPECT_TRUE_WAIT(srd_observer->called(), 100);
|
||||
|
||||
// If set-remote-description was successful, try to answer.
|
||||
auto sld_observer =
|
||||
rtc::make_ref_counted<MockSetSessionDescriptionObserver>();
|
||||
if (srd_observer->result()) {
|
||||
test.caller()->pc()->SetLocalDescription(sld_observer.get());
|
||||
EXPECT_TRUE_WAIT(sld_observer->called(), 100);
|
||||
}
|
||||
test.RunNegotiateCycle(
|
||||
absl::string_view(reinterpret_cast<const char*>(data), size));
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
|
Loading…
Reference in a new issue