Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: webrtc/api/dtmfsender_unittest.cc

Issue 2447013007: Fixing flaky DtmfSenderTest by using fake clock. (Closed)
Patch Set: Replace WAIT with SIMULATED_WAIT in a couple places. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/dtmfsender_unittest.cc
diff --git a/webrtc/api/dtmfsender_unittest.cc b/webrtc/api/dtmfsender_unittest.cc
index e5fe26171b504701692fe6296930caa5a77acead..54f3a7b96d6f6a3ec4355bd86b0eb77eb4ddd136 100644
--- a/webrtc/api/dtmfsender_unittest.cc
+++ b/webrtc/api/dtmfsender_unittest.cc
@@ -16,6 +16,7 @@
#include <vector>
#include "webrtc/api/audiotrack.h"
+#include "webrtc/base/fakeclock.h"
#include "webrtc/base/gunit.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/timeutils.h"
@@ -27,6 +28,9 @@ using webrtc::DtmfSender;
using webrtc::DtmfSenderObserverInterface;
static const char kTestAudioLabel[] = "test_audio_track";
+// TODO(deadbeef): Even though this test now uses a fake clock, it has a
+// generous 3-second timeout for every test case. The timeout could be tuned
+// to each test based on the tones sent, instead.
static const int kMaxWaitMs = 3000;
class FakeDtmfObserver : public DtmfSenderObserverInterface {
@@ -191,9 +195,9 @@ class DtmfSenderTest : public testing::Test {
while (it_ref != dtmf_queue_ref.end() && it != dtmf_queue.end()) {
EXPECT_EQ(it_ref->code, it->code);
EXPECT_EQ(it_ref->duration, it->duration);
- // Allow ~100ms error.
- EXPECT_GE(it_ref->gap, it->gap - 100);
- EXPECT_LE(it_ref->gap, it->gap + 100);
+ // Allow ~10ms error (can be small since we're using a fake clock).
+ EXPECT_GE(it_ref->gap, it->gap - 10);
+ EXPECT_LE(it_ref->gap, it->gap + 10);
++it_ref;
++it;
}
@@ -218,6 +222,7 @@ class DtmfSenderTest : public testing::Test {
std::unique_ptr<FakeDtmfObserver> observer_;
std::unique_ptr<FakeDtmfProvider> provider_;
rtc::scoped_refptr<DtmfSender> dtmf_;
+ rtc::ScopedFakeClock fake_clock_;
};
TEST_F(DtmfSenderTest, CanInsertDtmf) {
@@ -231,7 +236,7 @@ TEST_F(DtmfSenderTest, InsertDtmf) {
int duration = 100;
int inter_tone_gap = 50;
EXPECT_TRUE(dtmf_->InsertDtmf(tones, duration, inter_tone_gap));
- EXPECT_TRUE_WAIT(observer_->completed(), kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->completed(), kMaxWaitMs, fake_clock_);
// The unrecognized characters should be ignored.
std::string known_tones = "1a*";
@@ -247,13 +252,14 @@ TEST_F(DtmfSenderTest, InsertDtmfTwice) {
EXPECT_TRUE(dtmf_->InsertDtmf(tones1, duration, inter_tone_gap));
VerifyExpectedState(track_, tones1, duration, inter_tone_gap);
// Wait until the first tone got sent.
- EXPECT_TRUE_WAIT(observer_->tones().size() == 1, kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs,
+ fake_clock_);
VerifyExpectedState(track_, "2", duration, inter_tone_gap);
// Insert with another tone buffer.
EXPECT_TRUE(dtmf_->InsertDtmf(tones2, duration, inter_tone_gap));
VerifyExpectedState(track_, tones2, duration, inter_tone_gap);
// Wait until it's completed.
- EXPECT_TRUE_WAIT(observer_->completed(), kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->completed(), kMaxWaitMs, fake_clock_);
std::vector<FakeDtmfProvider::DtmfInfo> dtmf_queue_ref;
GetDtmfInfoFromString("1", duration, inter_tone_gap, &dtmf_queue_ref);
@@ -268,11 +274,12 @@ TEST_F(DtmfSenderTest, InsertDtmfWhileProviderIsDeleted) {
int inter_tone_gap = 50;
EXPECT_TRUE(dtmf_->InsertDtmf(tones, duration, inter_tone_gap));
// Wait until the first tone got sent.
- EXPECT_TRUE_WAIT(observer_->tones().size() == 1, kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs,
+ fake_clock_);
// Delete provider.
provider_.reset();
// The queue should be discontinued so no more tone callbacks.
- WAIT(false, 200);
+ SIMULATED_WAIT(false, 200, fake_clock_);
EXPECT_EQ(1U, observer_->tones().size());
}
@@ -282,11 +289,12 @@ TEST_F(DtmfSenderTest, InsertDtmfWhileSenderIsDeleted) {
int inter_tone_gap = 50;
EXPECT_TRUE(dtmf_->InsertDtmf(tones, duration, inter_tone_gap));
// Wait until the first tone got sent.
- EXPECT_TRUE_WAIT(observer_->tones().size() == 1, kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs,
+ fake_clock_);
// Delete the sender.
dtmf_ = NULL;
// The queue should be discontinued so no more tone callbacks.
- WAIT(false, 200);
+ SIMULATED_WAIT(false, 200, fake_clock_);
EXPECT_EQ(1U, observer_->tones().size());
}
@@ -297,11 +305,12 @@ TEST_F(DtmfSenderTest, InsertEmptyTonesToCancelPreviousTask) {
int inter_tone_gap = 50;
EXPECT_TRUE(dtmf_->InsertDtmf(tones1, duration, inter_tone_gap));
// Wait until the first tone got sent.
- EXPECT_TRUE_WAIT(observer_->tones().size() == 1, kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs,
+ fake_clock_);
// Insert with another tone buffer.
EXPECT_TRUE(dtmf_->InsertDtmf(tones2, duration, inter_tone_gap));
// Wait until it's completed.
- EXPECT_TRUE_WAIT(observer_->completed(), kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->completed(), kMaxWaitMs, fake_clock_);
std::vector<FakeDtmfProvider::DtmfInfo> dtmf_queue_ref;
GetDtmfInfoFromString("1", duration, inter_tone_gap, &dtmf_queue_ref);
@@ -309,14 +318,12 @@ TEST_F(DtmfSenderTest, InsertEmptyTonesToCancelPreviousTask) {
VerifyOnObserver("1");
}
-// Flaky when run in parallel.
-// See https://code.google.com/p/webrtc/issues/detail?id=4219.
-TEST_F(DtmfSenderTest, DISABLED_InsertDtmfWithCommaAsDelay) {
+TEST_F(DtmfSenderTest, InsertDtmfWithCommaAsDelay) {
std::string tones = "3,4";
int duration = 100;
int inter_tone_gap = 50;
EXPECT_TRUE(dtmf_->InsertDtmf(tones, duration, inter_tone_gap));
- EXPECT_TRUE_WAIT(observer_->completed(), kMaxWaitMs);
+ EXPECT_TRUE_SIMULATED_WAIT(observer_->completed(), kMaxWaitMs, fake_clock_);
VerifyOnProvider(tones, duration, inter_tone_gap);
VerifyOnObserver(tones);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698