Skip to content

Commit

Permalink
Headless: reapply new virtual time tests: r560024, r560074, r560103, …
Browse files Browse the repository at this point in the history
…r560112, r560140.

Change-Id: Idbc930f4087158b413bd447698098792ec1b9b04
TBR: dgozman
Reviewed-on: https://chromium-review.googlesource.com/1067133
Commit-Queue: Pavel Feldman <pfeldman@chromium.org>
Reviewed-by: Pavel Feldman <pfeldman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#560190}
  • Loading branch information
pavelfeldman authored and Commit Bot committed May 20, 2018
1 parent 008312a commit c3e19fc
Show file tree
Hide file tree
Showing 37 changed files with 551 additions and 413 deletions.
2 changes: 2 additions & 0 deletions headless/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,7 @@ test("headless_browsertests") {
"public/util/testing/test_in_memory_protocol_handler.h",
"test/headless_browser_test.cc",
"test/headless_browser_test.h",
"test/headless_protocol_browsertest.cc",
"test/headless_test_launcher.cc",
"test/test_protocol_handler.cc",
"test/test_protocol_handler.h",
Expand All @@ -771,6 +772,7 @@ test("headless_browsertests") {
"lib/dom_tree_extraction_expected_styles.txt",
"$root_out_dir/headless_lib.pak",
"//net/tools/testserver/",
"//third_party/WebKit/LayoutTests/http/tests/inspector-protocol/",
"//third_party/pyftpdlib/",
"//third_party/pywebsocket/",
"//third_party/tlslite/",
Expand Down
302 changes: 0 additions & 302 deletions headless/lib/virtual_time_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,144 +83,6 @@ class VirtualTimeBrowserTest : public HeadlessAsyncDevTooledBrowserTest,
bool runtime_enabled = false;
};

class VirtualTimeObserverTest : public VirtualTimeBrowserTest {
public:
VirtualTimeObserverTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(
embedded_test_server()->GetURL("/virtual_time_test.html").spec());
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
std::vector<std::string> expected_log = {"Paused @ 0ms",
"Advanced to 10ms",
"step1",
"Advanced to 110ms",
"step2",
"Paused @ 110ms",
"Advanced to 210ms",
"step3",
"Paused @ 210ms",
"Advanced to 310ms",
"step4",
"pass"};
// Note after the PASS step there are a number of virtual time advances, but
// this list seems to be non-deterministic because there's all sorts of
// timers in the system. We don't really care about that here.
ASSERT_GE(log_.size(), expected_log.size());
for (size_t i = 0; i < expected_log.size(); i++) {
EXPECT_EQ(expected_log[i], log_[i]) << "At index " << i;
}
EXPECT_THAT(log_, Contains("Advanced to 5000ms"));
EXPECT_THAT(log_, Contains("Paused @ 5000ms"));
FinishAsynchronousTest();
}

void OnVirtualTimeAdvanced(
const emulation::VirtualTimeAdvancedParams& params) override {
log_.push_back(base::StringPrintf("Advanced to %.fms",
params.GetVirtualTimeElapsed()));
}

void OnVirtualTimePaused(
const emulation::VirtualTimePausedParams& params) override {
log_.push_back(
base::StringPrintf("Paused @ %.fms", params.GetVirtualTimeElapsed()));
}
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeObserverTest);

class VirtualTimeBaseTest : public VirtualTimeBrowserTest {
public:
VirtualTimeBaseTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()->GetURL("/blank.html").spec());
}

void SetVirtualTimePolicy() override {
// Set to paused initially.
devtools_client_->GetEmulation()->GetExperimental()->SetVirtualTimePolicy(
emulation::SetVirtualTimePolicyParams::Builder()
.SetPolicy(emulation::VirtualTimePolicy::PAUSE)
.Build(),
base::BindRepeating(&VirtualTimeBaseTest::SetFirstVirtualTimePolicyDone,
base::Unretained(this)));
}

void SetFirstVirtualTimePolicyDone(
std::unique_ptr<emulation::SetVirtualTimePolicyResult> result) {
// Should have enabled virtual time, and returned a valid time base.
virtual_time_ticks_base_ = result->GetVirtualTimeTicksBase();
EXPECT_NE(0, virtual_time_ticks_base_);

// Set with wait_for_navigation, the returned time base shouldn't change.
devtools_client_->GetEmulation()->GetExperimental()->SetVirtualTimePolicy(
emulation::SetVirtualTimePolicyParams::Builder()
.SetPolicy(
emulation::VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING)
.SetBudget(1000)
.SetWaitForNavigation(true)
.Build(),
base::BindRepeating(
&VirtualTimeBaseTest::SetSecondVirtualTimePolicyDone,
base::Unretained(this)));
}

void SetSecondVirtualTimePolicyDone(
std::unique_ptr<emulation::SetVirtualTimePolicyResult> result) {
EXPECT_EQ(virtual_time_ticks_base_, result->GetVirtualTimeTicksBase());

SetVirtualTimePolicyDone(std::move(result));
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
FinishAsynchronousTest();
}

private:
double virtual_time_ticks_base_ = 0;
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeBaseTest);

class MaxVirtualTimeTaskStarvationCountTest : public VirtualTimeBrowserTest {
public:
MaxVirtualTimeTaskStarvationCountTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()
->GetURL("/virtual_time_starvation_test.html")
.spec());
}

void SetVirtualTimePolicy() override {
devtools_client_->GetEmulation()->GetExperimental()->SetVirtualTimePolicy(
emulation::SetVirtualTimePolicyParams::Builder()
.SetPolicy(
emulation::VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING)
.SetBudget(4001)
.SetMaxVirtualTimeTaskStarvationCount(100)
.SetWaitForNavigation(true)
.Build(),
base::BindRepeating(&VirtualTimeBrowserTest::SetVirtualTimePolicyDone,
base::Unretained(this)));
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// If SetMaxVirtualTimeTaskStarvationCount was not set, this callback would
// never fire.
FinishAsynchronousTest();
}
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(MaxVirtualTimeTaskStarvationCountTest);

namespace {
static constexpr char kIndexHtml[] = R"(
<html>
Expand Down Expand Up @@ -317,112 +179,6 @@ class FrameDetatchWithPendingResourceLoadVirtualTimeTest
HEADLESS_ASYNC_DEVTOOLED_TEST_F(
FrameDetatchWithPendingResourceLoadVirtualTimeTest);

class VirtualTimeLocalStorageTest : public VirtualTimeBrowserTest {
public:
VirtualTimeLocalStorageTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()
->GetURL("/virtual_time_local_storage.html")
.spec());
}

void OnConsoleAPICalled(
const runtime::ConsoleAPICalledParams& params) override {
EXPECT_EQ(runtime::ConsoleAPICalledType::LOG, params.GetType());
ASSERT_EQ(1u, params.GetArgs()->size());
ASSERT_EQ(runtime::RemoteObjectType::STRING,
(*params.GetArgs())[0]->GetType());
std::string count_string = (*params.GetArgs())[0]->GetValue()->GetString();
int count;
ASSERT_TRUE(base::StringToInt(count_string, &count)) << count_string;
EXPECT_EQ(count, 400);
console_log_seen_ = true;
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// If SetMaxVirtualTimeTaskStarvationCount was not set, this callback would
// never fire.
EXPECT_TRUE(console_log_seen_);
FinishAsynchronousTest();
}

bool console_log_seen_ = false;
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeLocalStorageTest);

class VirtualTimeSessionStorageTest : public VirtualTimeBrowserTest {
public:
VirtualTimeSessionStorageTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()
->GetURL("/virtual_time_session_storage.html")
.spec());
}

void OnConsoleAPICalled(
const runtime::ConsoleAPICalledParams& params) override {
EXPECT_EQ(runtime::ConsoleAPICalledType::LOG, params.GetType());
ASSERT_EQ(1u, params.GetArgs()->size());
ASSERT_EQ(runtime::RemoteObjectType::STRING,
(*params.GetArgs())[0]->GetType());
std::string count_string = (*params.GetArgs())[0]->GetValue()->GetString();
int count;
ASSERT_TRUE(base::StringToInt(count_string, &count)) << count_string;
EXPECT_EQ(count, 400);
console_log_seen_ = true;
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// If SetMaxVirtualTimeTaskStarvationCount was not set, this callback would
// never fire.
EXPECT_TRUE(console_log_seen_);
FinishAsynchronousTest();
}

bool console_log_seen_ = false;
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeSessionStorageTest);

class DeferredLoadDoesntBlockVirtualTimeTest : public VirtualTimeBrowserTest {
public:
DeferredLoadDoesntBlockVirtualTimeTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()->GetURL("/video.html").spec());
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// The video should not block virtual time.
FinishAsynchronousTest();
}
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(DeferredLoadDoesntBlockVirtualTimeTest);

class Http404DoesntBlockVirtualTimeTest : public VirtualTimeBrowserTest {
public:
Http404DoesntBlockVirtualTimeTest() {
EXPECT_TRUE(embedded_test_server()->Start());
SetInitialURL(embedded_test_server()->GetURL("/NoSuchFile.html").spec());
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// The video should not block virtual time.
FinishAsynchronousTest();
}
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(Http404DoesntBlockVirtualTimeTest);

class RedirectVirtualTimeTest : public VirtualTimeBrowserTest {
public:
RedirectVirtualTimeTest() { SetInitialURL("http://test.com/index.html"); }
Expand Down Expand Up @@ -689,64 +445,6 @@ class PendingScriptVirtualTimeTest : public VirtualTimeBrowserTest {

HEADLESS_ASYNC_DEVTOOLED_TEST_F(PendingScriptVirtualTimeTest);

namespace {
static constexpr char kResourceErrorLoop[] = R"(
<html>
<script>
var counter = 1;
</script>
<img src="1" onerror="this.src='' + ++counter;">
</html>
)";
}

class VirtualTimeAndResourceErrorLoopTest : public VirtualTimeBrowserTest {
public:
VirtualTimeAndResourceErrorLoopTest() { SetInitialURL("http://foo.com/"); }

ProtocolHandlerMap GetProtocolHandlers() override {
ProtocolHandlerMap protocol_handlers;
std::unique_ptr<TestInMemoryProtocolHandler> http_handler(
new TestInMemoryProtocolHandler(browser()->BrowserIOThread(), nullptr));
http_handler_ = http_handler.get();
http_handler->InsertResponse("http://foo.com/",
{kResourceErrorLoop, "text/html"});
protocol_handlers[url::kHttpScheme] = std::move(http_handler);
return protocol_handlers;
}

void RunDevTooledTest() override {
http_handler_->SetHeadlessBrowserContext(browser_context_);
VirtualTimeBrowserTest::RunDevTooledTest();
}

void SetVirtualTimePolicy() override {
devtools_client_->GetEmulation()->GetExperimental()->SetVirtualTimePolicy(
emulation::SetVirtualTimePolicyParams::Builder()
.SetPolicy(
emulation::VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING)
.SetBudget(5000)
.SetMaxVirtualTimeTaskStarvationCount(1000000) // Prevent flakes.
.SetWaitForNavigation(true)
.Build(),
base::BindRepeating(&VirtualTimeBrowserTest::SetVirtualTimePolicyDone,
base::Unretained(this)));
}

// emulation::Observer implementation:
void OnVirtualTimeBudgetExpired(
const emulation::VirtualTimeBudgetExpiredParams& params) override {
// The budget is 5000 virtual ms. The resources are delivered with 10
// virtual ms delay, so we should have 500 urls.
EXPECT_EQ(500u, http_handler_->urls_requested().size());
FinishAsynchronousTest();
}

TestInMemoryProtocolHandler* http_handler_; // NOT OWNED
};

HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeAndResourceErrorLoopTest);

namespace {
static constexpr char kSiteA[] = R"(
<html>
Expand Down
19 changes: 0 additions & 19 deletions headless/test/data/mojo_page_one.html

This file was deleted.

19 changes: 0 additions & 19 deletions headless/test/data/mojo_page_two.html

This file was deleted.

1 change: 1 addition & 0 deletions headless/test/data/protocol/emulation/resources/blank.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!doctype html>
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<html>
<script>
var counter = 1;
</script>
<img src="1" onerror="this.src='' + ++counter">
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
window.addEventListener('message', callback, false);
window.postMessage('message', '*');
window.setTimeout(function() {
console.log('event count: ' + event_count);
console.log('Timer Fired, alot of events seen: ' + (event_count > 1));
}, 4000);
</script>
</html>
Loading

0 comments on commit c3e19fc

Please sign in to comment.