Commit 5b9afffb authored by Sebastien Marchand's avatar Sebastien Marchand Committed by Commit Bot

[PM] Fix some flakiness in the PageNodeImplBrowserTest

Using an EmbeddedTestServer bound to a specific port is flaky because
it's not guaranteed that this port will be available when running the
test, switching to a URLLoaderInterceptor fix this.

Bug: 998071
Change-Id: Ieae65bb2e9a12f5e5cf3aaaa772667a1d0e2aef9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1779201Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#692216}
parent f55fd953
...@@ -14,47 +14,45 @@ ...@@ -14,47 +14,45 @@
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h" #include "chrome/test/base/ui_test_utils.h"
#include "net/http/http_status_code.h" #include "content/public/test/url_loader_interceptor.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace performance_manager { namespace performance_manager {
namespace { namespace {
// Origin Trial tokens are bound to a specific origin (incl. port), so we need
// to force our test server to run on the same port that the test token has
// been generated for.
const int kServerPort = 54321;
constexpr char kOriginTrialTestPublicKey[] = constexpr char kOriginTrialTestPublicKey[] =
"dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA="; "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
const char kTestHeaders[] = "HTTP/1.1 200 OK\nContent-type: text/html\n\n";
constexpr char kOriginTrialTestHostname[] = "https://lifecycle_ot_test.com";
// Origin Trial Token for PageLifecycleTransitionsOptOut generated with: // Origin Trial Token for PageLifecycleTransitionsOptOut generated with:
// $ tools/origin_trials/generate_token.py \ // $ tools/origin_trials/generate_token.py \
// https://127.0.0.1:54321/ \ // https://lifecycle_ot_test.com/ \
// "PageLifecycleTransitionsOptOut" \ // "PageLifecycleTransitionsOptOut" \
// --expire-timestamp=2000000000 // --expire-timestamp=2000000000
// (Token will expire ca. ~2033. See content/test/data/origin_trials/basic.html) // (Token will expire ca. ~2033. See content/test/data/origin_trials/basic.html)
constexpr char kOriginTrialPageLifecycleOptOutToken[] = constexpr char kOriginTrialPageLifecycleOptOutToken[] =
"Ah4aYo237SBR30bpy6p2AtxDi//nEjBJMvdRVK5XywJHT3h6AZEdfvIejN9BBTn+" "ArFuhJf1Qa7r7LIOWprpcssb/Vz76rIe0QyGJw2NP+S/Zy7Q7AVg2UfUqgARHPNk6KQ60/"
"JXWpxCBU6PcSPQct5BSZAAEAAABoeyJvcmlnaW4iOiAiaHR0cHM6Ly8xMjcuMC4wLjE6NTQzMj" "ii4ef4ZwJmNi+"
"EiLCAiZmVhdHVyZSI6ICJQYWdlTGlmZWN5Y2xlVHJhbnNpdGlvbnNPcHRPdXQiLCAiZXhwaXJ5" "VbwoAAAByeyJvcmlnaW4iOiAiaHR0cHM6Ly9saWZlY3ljbGVfb3RfdGVzdC5jb206NDQzIiwgI"
"IjogMjAwMDAwMDAwMH0="; "mZlYXR1cmUiOiAiUGFnZUxpZmVjeWNsZVRyYW5zaXRpb25zT3B0T3V0IiwgImV4cGlyeSI6IDI"
"wMDAwMDAwMDB9";
// Origin Trial Token for PageLifecycleTransitionsOptIn generated with: // Origin Trial Token for PageLifecycleTransitionsOptIn generated with:
// $ tools/origin_trials/generate_token.py \ // $ tools/origin_trials/generate_token.py \
// https://127.0.0.1:54321/ \ // https://lifecycle_ot_test.com/ \
// "PageLifecycleTransitionsOptIn" \ // "PageLifecycleTransitionsOptIn" \
// --expire-timestamp=2000000000 // --expire-timestamp=2000000000
// (Token will expire ca. ~2033. See content/test/data/origin_trials/basic.html) // (Token will expire ca. ~2033. See content/test/data/origin_trials/basic.html)
constexpr char kOriginTrialPageLifecycleOptInToken[] = constexpr char kOriginTrialPageLifecycleOptInToken[] =
"AhTNLPzOPkxjkQoNWrLvdOBbET3ZX+OCe7k4SnkYHikPsq2aFTTKF2xVwwTZnepfn1heEK7q" "AgI1yybGRSVe5oDQ1EAK9/"
"bJu6yokw9zFjwwAAAABneyJvcmlnaW4iOiAiaHR0cHM6Ly8xMjcuMC4wLjE6NTQzMjEiLCAiZm" "bp3vmEbysprYviipejGsRR5aqAj37I6SHEnZGvmg4iEzxDRWfwvctZH+"
"VhdHVyZSI6ICJQYWdlTGlmZWN5Y2xlVHJhbnNpdGlvbnNPcHRJbiIsICJleHBpcnkiOiAyMDAw" "rSdZ58kA0AAABxeyJvcmlnaW4iOiAiaHR0cHM6Ly9saWZlY3ljbGVfb3RfdGVzdC5jb206NDQz"
"MDAwMDAwfQ=="; "IiwgImZlYXR1cmUiOiAiUGFnZUxpZmVjeWNsZVRyYW5zaXRpb25zT3B0SW4iLCAiZXhwaXJ5Ij"
"ogMjAwMDAwMDAwMH0=";
// The path used in the URL of the Page Lifecycle Origin Trial tests. // The path used in the URL of the Page Lifecycle Origin Trial tests.
constexpr char kOriginTrialTestLifecyclePath[] = "lifecycle_origin_trial"; constexpr char kOriginTrialTestLifecyclePath[] = "lifecycle_origin_trial";
...@@ -87,7 +85,7 @@ constexpr char kOriginTrialTestResponseTemplate[] = R"( ...@@ -87,7 +85,7 @@ constexpr char kOriginTrialTestResponseTemplate[] = R"(
constexpr char kTwoiFrameTestBody[] = R"( constexpr char kTwoiFrameTestBody[] = R"(
<html> <html>
<base href="https://127.0.0.1:54321/"> <base href="https://lifecycle_ot_test.com/">
<head> <head>
<title>iFrame Test</title> <title>iFrame Test</title>
</head> </head>
...@@ -137,17 +135,10 @@ std::string GetPageLifecycleOriginTrialiFramePageContent( ...@@ -137,17 +135,10 @@ std::string GetPageLifecycleOriginTrialiFramePageContent(
return contents; return contents;
} }
// Request handler for these tests, redirect the query to the appropriate // Generate the HTML content that should be served for |url|.
// handler. Return 404 for all paths not ending in ".html". std::string GetContentForURL(const std::string& url) {
std::unique_ptr<net::test_server::HttpResponse> RequestHandler( if (!base::EndsWith(url, ".html", base::CompareCase::SENSITIVE))
const net::test_server::HttpRequest& request) { return std::string();
std::unique_ptr<net::test_server::BasicHttpResponse> response =
std::make_unique<net::test_server::BasicHttpResponse>();
std::string url = request.GetURL().path();
if (!base::EndsWith(url, ".html", base::CompareCase::SENSITIVE)) {
response->set_code(net::HTTP_NOT_FOUND);
return response;
}
auto url_parts = base::SplitString(url, "/", base::KEEP_WHITESPACE, auto url_parts = base::SplitString(url, "/", base::KEEP_WHITESPACE,
base::SPLIT_WANT_NONEMPTY); base::SPLIT_WANT_NONEMPTY);
...@@ -156,15 +147,12 @@ std::unique_ptr<net::test_server::HttpResponse> RequestHandler( ...@@ -156,15 +147,12 @@ std::unique_ptr<net::test_server::HttpResponse> RequestHandler(
// generates the response to serve the appropriate content. // generates the response to serve the appropriate content.
EXPECT_EQ(2U, url_parts.size()); EXPECT_EQ(2U, url_parts.size());
std::string response;
if (url_parts[0].compare(kOriginTrialTestLifecyclePath) == 0) { if (url_parts[0].compare(kOriginTrialTestLifecyclePath) == 0) {
response->set_content(GetPageLifecycleOriginTrialPageContent(url_parts[1])); response = GetPageLifecycleOriginTrialPageContent(url_parts[1]);
} else if (url_parts[0].compare(k2iFramesPath) == 0) { } else if (url_parts[0].compare(k2iFramesPath) == 0) {
response->set_content( response = GetPageLifecycleOriginTrialiFramePageContent(url_parts[1]);
GetPageLifecycleOriginTrialiFramePageContent(url_parts[1]));
} }
response->set_content_type("text/html");
response->set_code(net::HTTP_OK);
return response; return response;
} }
...@@ -192,6 +180,15 @@ void RunOriginTrialTestOnPMSequence( ...@@ -192,6 +180,15 @@ void RunOriginTrialTestOnPMSequence(
run_loop.Run(); run_loop.Run();
} }
bool URLLoaderInterceptorCallback(
content::URLLoaderInterceptor::RequestParams* params) {
content::URLLoaderInterceptor::WriteResponse(
kTestHeaders, GetContentForURL(params->url_request.url.path()),
params->client.get());
return true;
}
} // namespace } // namespace
class PageNodeImplBrowserTest : public InProcessBrowserTest { class PageNodeImplBrowserTest : public InProcessBrowserTest {
...@@ -205,27 +202,33 @@ class PageNodeImplBrowserTest : public InProcessBrowserTest { ...@@ -205,27 +202,33 @@ class PageNodeImplBrowserTest : public InProcessBrowserTest {
kOriginTrialTestPublicKey); kOriginTrialTestPublicKey);
} }
void SetUpInProcessBrowserTestFixture() override { void SetUpOnMainThread() override {
server_ = std::make_unique<net::test_server::EmbeddedTestServer>( InProcessBrowserTest::SetUpOnMainThread();
net::test_server::EmbeddedTestServer::TYPE_HTTPS);
server_->RegisterRequestHandler(base::Bind(&RequestHandler)); // We use a URLLoaderInterceptor, rather than the EmbeddedTestServer, since
EXPECT_TRUE(server_->Start(kServerPort)); // the origin trial token in the response is associated with a fixed
// origin, whereas EmbeddedTestServer serves content on a random port.
url_loader_interceptor_ = std::make_unique<content::URLLoaderInterceptor>(
base::BindRepeating(&URLLoaderInterceptorCallback));
} }
net::test_server::EmbeddedTestServer* server() { return server_.get(); } void TearDownOnMainThread() override {
url_loader_interceptor_.reset();
InProcessBrowserTest::TearDownOnMainThread();
}
private: private:
std::unique_ptr<net::test_server::EmbeddedTestServer> server_; std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor_;
DISALLOW_COPY_AND_ASSIGN(PageNodeImplBrowserTest); DISALLOW_COPY_AND_ASSIGN(PageNodeImplBrowserTest);
}; };
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, PageLifecycleOriginTrialOptIn) { IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, PageLifecycleOriginTrialOptIn) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString(
server()->GetURL("/" + base::JoinString({kOriginTrialTestLifecyclePath, {kOriginTrialTestHostname, kOriginTrialTestLifecyclePath,
kOriginTrialOptInPage}, kOriginTrialOptInPage},
"/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptIn); resource_coordinator::mojom::InterventionPolicy::kOptIn);
} }
...@@ -233,10 +236,10 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, PageLifecycleOriginTrialOptIn) { ...@@ -233,10 +236,10 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, PageLifecycleOriginTrialOptIn) {
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialOptOut) { PageLifecycleOriginTrialOptOut) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString(
server()->GetURL("/" + base::JoinString({kOriginTrialTestLifecyclePath, {kOriginTrialTestHostname, kOriginTrialTestLifecyclePath,
kOriginTrialOptOutPage}, kOriginTrialOptOutPage},
"/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptOut); resource_coordinator::mojom::InterventionPolicy::kOptOut);
} }
...@@ -244,10 +247,10 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -244,10 +247,10 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialDefault) { PageLifecycleOriginTrialDefault) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString(
server()->GetURL("/" + base::JoinString({kOriginTrialTestLifecyclePath, {kOriginTrialTestHostname, kOriginTrialTestLifecyclePath,
kOriginTrialDefaultPage}, kOriginTrialDefaultPage},
"/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kDefault); resource_coordinator::mojom::InterventionPolicy::kDefault);
} }
...@@ -255,9 +258,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -255,9 +258,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialOptInOptOut) { PageLifecycleOriginTrialOptInOptOut) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), server()->GetURL( browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
"/" + base::JoinString( kOriginTrialOptInOptOut},
{k2iFramesPath, kOriginTrialOptInOptOut}, "/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptOut); resource_coordinator::mojom::InterventionPolicy::kOptOut);
} }
...@@ -265,9 +268,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -265,9 +268,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialOptOutOptIn) { PageLifecycleOriginTrialOptOutOptIn) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), server()->GetURL( browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
"/" + base::JoinString( kOriginTrialOptOutOptIn},
{k2iFramesPath, kOriginTrialOptOutOptIn}, "/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptOut); resource_coordinator::mojom::InterventionPolicy::kOptOut);
} }
...@@ -275,10 +278,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -275,10 +278,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialDefaultOptIn) { PageLifecycleOriginTrialDefaultOptIn) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
server()->GetURL( kOriginTrialDefaultOptIn},
"/" + "/")));
base::JoinString({k2iFramesPath, kOriginTrialDefaultOptIn}, "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptIn); resource_coordinator::mojom::InterventionPolicy::kOptIn);
} }
...@@ -286,10 +288,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -286,10 +288,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialDefaultOptOut) { PageLifecycleOriginTrialDefaultOptOut) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
server()->GetURL( kOriginTrialDefaultOptOut},
"/" + "/")));
base::JoinString({k2iFramesPath, kOriginTrialDefaultOptOut}, "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptOut); resource_coordinator::mojom::InterventionPolicy::kOptOut);
} }
...@@ -297,9 +298,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -297,9 +298,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialOptInOptIn) { PageLifecycleOriginTrialOptInOptIn) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), server()->GetURL( browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
"/" + base::JoinString( kOriginTrialOptInOptIn},
{k2iFramesPath, kOriginTrialOptInOptIn}, "/"))); "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptIn); resource_coordinator::mojom::InterventionPolicy::kOptIn);
} }
...@@ -307,10 +308,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -307,10 +308,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialOptOutOptOut) { PageLifecycleOriginTrialOptOutOptOut) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
server()->GetURL( kOriginTrialOptOutOptOut},
"/" + "/")));
base::JoinString({k2iFramesPath, kOriginTrialOptOutOptOut}, "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kOptOut); resource_coordinator::mojom::InterventionPolicy::kOptOut);
} }
...@@ -318,10 +318,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, ...@@ -318,10 +318,9 @@ IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest,
PageLifecycleOriginTrialDefaultDefault) { PageLifecycleOriginTrialDefaultDefault) {
ui_test_utils::NavigateToURL( ui_test_utils::NavigateToURL(
browser(), browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath,
server()->GetURL( kOriginTrialDefaultDefault},
"/" + "/")));
base::JoinString({k2iFramesPath, kOriginTrialDefaultDefault}, "/")));
RunOriginTrialTestOnPMSequence( RunOriginTrialTestOnPMSequence(
resource_coordinator::mojom::InterventionPolicy::kDefault); resource_coordinator::mojom::InterventionPolicy::kDefault);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment