Chromium Code Reviews| Index: net/url_request/url_request_unittest.cc |
| diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc |
| index 68e999743c71f0d836f335f787e235ea462492f6..e00592418d21ef1a352bebc128066a37b9a840d5 100644 |
| --- a/net/url_request/url_request_unittest.cc |
| +++ b/net/url_request/url_request_unittest.cc |
| @@ -3464,14 +3464,110 @@ TEST_F(TokenBindingURLRequestTest, TokenBindingTest) { |
| EXPECT_TRUE(base::Base64UrlDecode( |
| token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, |
| &token_binding_message)); |
| - base::StringPiece ec_point, signature; |
| - EXPECT_TRUE( |
| - ParseTokenBindingMessage(token_binding_message, &ec_point, &signature)); |
| + std::vector<TokenBinding> token_bindings; |
| + ASSERT_TRUE( |
| + ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| + ASSERT_EQ(1ull, token_bindings.size()); |
| EXPECT_GT(d.bytes_received(), 0); |
| std::string ekm = d.data_received(); |
| - EXPECT_TRUE(VerifyEKMSignature(ec_point, signature, ekm)); |
| + EXPECT_EQ(TB_TYPE_PROVIDED, token_bindings[0].type); |
| + EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, |
| + token_bindings[0].signature, ekm)); |
| + } |
| +} |
| + |
| +TEST_F(TokenBindingURLRequestTest, ForwardTokenBinding) { |
| + SpawnedTestServer::SSLOptions ssl_options; |
| + ssl_options.supported_token_binding_params.push_back(TB_PARAM_ECDSAP256); |
| + SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, |
| + ssl_options, |
| + base::FilePath(kTestFilePath)); |
| + ASSERT_TRUE(https_test_server.Start()); |
| + |
| + TestDelegate d; |
| + { |
| + GURL redirect_url = |
| + https_test_server.GetURL("forward-tokbind?/tokbind-ekm"); |
| + scoped_ptr<URLRequest> r( |
| + default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d)); |
| + r->Start(); |
| + EXPECT_TRUE(r->is_pending()); |
| + |
| + base::RunLoop().Run(); |
| + |
| + EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| + |
| + HttpRequestHeaders headers; |
| + std::string token_binding_header, token_binding_message; |
| + EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); |
| + EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, |
| + &token_binding_header)); |
| + EXPECT_TRUE(base::Base64UrlDecode( |
| + token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, |
| + &token_binding_message)); |
| + std::vector<TokenBinding> token_bindings; |
| + ASSERT_TRUE( |
| + ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| + ASSERT_EQ(2ull, token_bindings.size()); |
| + |
| + EXPECT_GT(d.bytes_received(), 0); |
| + std::string ekm = d.data_received(); |
| + |
| + EXPECT_EQ(TB_TYPE_PROVIDED, token_bindings[0].type); |
| + EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, |
| + token_bindings[0].signature, ekm)); |
| + EXPECT_EQ(TB_TYPE_REFERRED, token_bindings[1].type); |
| + EXPECT_TRUE(VerifyEKMSignature(token_bindings[1].ec_point, |
| + token_bindings[1].signature, ekm)); |
| + } |
| +} |
| + |
| +TEST_F(TokenBindingURLRequestTest, DontForwardHeaderFromHttp) { |
|
davidben
2016/03/15 22:49:56
Do we also need a DontForwardHeaderToHttp test?
nharper
2016/03/16 17:49:22
It would be covered by a DontSendTokenBindingHeade
|
| + SpawnedTestServer http_server(SpawnedTestServer::TYPE_HTTP, |
| + SpawnedTestServer::kLocalhost, |
| + base::FilePath()); |
| + ASSERT_TRUE(http_server.Start()); |
| + SpawnedTestServer::SSLOptions ssl_options; |
| + ssl_options.supported_token_binding_params.push_back(TB_PARAM_ECDSAP256); |
| + SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, |
| + ssl_options, |
| + base::FilePath(kTestFilePath)); |
| + ASSERT_TRUE(https_test_server.Start()); |
| + |
| + TestDelegate d; |
| + { |
| + GURL redirect_url = http_server.GetURL( |
| + "forward-tokbind?" + https_test_server.GetURL("tokbind-ekm").spec()); |
| + scoped_ptr<URLRequest> r( |
| + default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d)); |
| + r->Start(); |
| + EXPECT_TRUE(r->is_pending()); |
| + |
| + base::RunLoop().Run(); |
| + |
| + EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| + |
| + HttpRequestHeaders headers; |
| + std::string token_binding_header, token_binding_message; |
| + EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); |
| + EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, |
| + &token_binding_header)); |
| + EXPECT_TRUE(base::Base64UrlDecode( |
| + token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, |
| + &token_binding_message)); |
| + std::vector<TokenBinding> token_bindings; |
| + ASSERT_TRUE( |
| + ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| + ASSERT_EQ(1ull, token_bindings.size()); |
| + |
| + EXPECT_GT(d.bytes_received(), 0); |
| + std::string ekm = d.data_received(); |
| + |
| + EXPECT_EQ(TB_TYPE_PROVIDED, token_bindings[0].type); |
| + EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, |
| + token_bindings[0].signature, ekm)); |
| } |
| } |
| #endif // !defined(OS_IOS) |