Index: remoting/host/token_validator_factory_impl_unittest.cc |
diff --git a/remoting/host/token_validator_factory_impl_unittest.cc b/remoting/host/token_validator_factory_impl_unittest.cc |
index a0e4d1d788f8b4ef239bc866490160426ef30338..0a530e3fd82f22be65d9a483e1d09c291ebb6761 100644 |
--- a/remoting/host/token_validator_factory_impl_unittest.cc |
+++ b/remoting/host/token_validator_factory_impl_unittest.cc |
@@ -13,7 +13,9 @@ |
#include "base/memory/ptr_util.h" |
#include "base/run_loop.h" |
#include "base/values.h" |
+#include "net/base/net_errors.h" |
#include "net/http/http_status_code.h" |
+#include "net/test/url_request/url_request_failed_job.h" |
#include "net/url_request/url_request_job_factory.h" |
#include "net/url_request/url_request_job_factory_impl.h" |
#include "net/url_request/url_request_status.h" |
@@ -44,6 +46,9 @@ class FakeProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { |
: headers_(headers), |
response_(response) { |
} |
+ |
+ ~FakeProtocolHandler() override {} |
+ |
net::URLRequestJob* MaybeCreateJob( |
net::URLRequest* request, |
net::NetworkDelegate* network_delegate) const override { |
@@ -56,6 +61,29 @@ class FakeProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { |
std::string response_; |
}; |
+// Creates URLRequestJobs that fail at the specified phase. |
+class FakeFailingProtocolHandler |
+ : public net::URLRequestJobFactory::ProtocolHandler { |
+ public: |
+ FakeFailingProtocolHandler( |
+ net::URLRequestFailedJob::FailurePhase failure_phase, |
+ net::Error net_error) |
+ : failure_phase_(failure_phase), net_error_(net_error) {} |
+ |
+ ~FakeFailingProtocolHandler() override {} |
+ |
+ net::URLRequestJob* MaybeCreateJob( |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate) const override { |
+ return new net::URLRequestFailedJob(request, network_delegate, |
+ failure_phase_, net_error_); |
+ } |
+ |
+ private: |
+ const net::URLRequestFailedJob::FailurePhase failure_phase_; |
+ const net::Error net_error_; |
+}; |
+ |
class SetResponseURLRequestContext: public net::TestURLRequestContext { |
public: |
void SetResponse(const std::string& headers, const std::string& response) { |
@@ -65,6 +93,16 @@ class SetResponseURLRequestContext: public net::TestURLRequestContext { |
"https", base::MakeUnique<FakeProtocolHandler>(headers, response)); |
context_storage_.set_job_factory(std::move(factory)); |
} |
+ |
+ void SetErrorResponse(net::URLRequestFailedJob::FailurePhase failure_phase, |
+ net::Error net_error) { |
+ std::unique_ptr<net::URLRequestJobFactoryImpl> factory = |
+ base::MakeUnique<net::URLRequestJobFactoryImpl>(); |
+ factory->SetProtocolHandler( |
+ "https", |
+ base::MakeUnique<FakeFailingProtocolHandler>(failure_phase, net_error)); |
+ context_storage_.set_job_factory(std::move(factory)); |
+ } |
}; |
} // namespace |
@@ -131,6 +169,14 @@ class TokenValidatorFactoryImplTest : public testing::Test { |
context->SetResponse(headers, response); |
} |
+ void SetErrorResponse(net::URLRequestFailedJob::FailurePhase failure_phase, |
+ net::Error net_error) { |
+ SetResponseURLRequestContext* context = |
+ static_cast<SetResponseURLRequestContext*>( |
+ request_context_getter_->GetURLRequestContext()); |
+ context->SetErrorResponse(failure_phase, net_error); |
+ } |
+ |
base::MessageLoop message_loop_; |
scoped_refptr<RsaKeyPair> key_pair_; |
scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
@@ -189,4 +235,43 @@ TEST_F(TokenValidatorFactoryImplTest, DeleteOnFailure) { |
base::RunLoop().Run(); |
} |
+TEST_F(TokenValidatorFactoryImplTest, DeleteOnStartError) { |
+ token_validator_ = |
+ token_validator_factory_->CreateTokenValidator(kLocalJid, kRemoteJid); |
+ |
+ SetErrorResponse(net::URLRequestFailedJob::START, net::ERR_FAILED); |
+ |
+ token_validator_->ValidateThirdPartyToken( |
+ kToken, |
+ base::Bind(&TokenValidatorFactoryImplTest::DeleteOnFailureCallback, |
+ base::Unretained(this))); |
+ base::RunLoop().Run(); |
+} |
+ |
+TEST_F(TokenValidatorFactoryImplTest, DeleteOnSyncReadError) { |
+ token_validator_ = |
+ token_validator_factory_->CreateTokenValidator(kLocalJid, kRemoteJid); |
+ |
+ SetErrorResponse(net::URLRequestFailedJob::READ_SYNC, net::ERR_FAILED); |
+ |
+ token_validator_->ValidateThirdPartyToken( |
+ kToken, |
+ base::Bind(&TokenValidatorFactoryImplTest::DeleteOnFailureCallback, |
+ base::Unretained(this))); |
+ base::RunLoop().Run(); |
+} |
+ |
+TEST_F(TokenValidatorFactoryImplTest, DeleteOnAsyncReadError) { |
+ token_validator_ = |
+ token_validator_factory_->CreateTokenValidator(kLocalJid, kRemoteJid); |
+ |
+ SetErrorResponse(net::URLRequestFailedJob::READ_ASYNC, net::ERR_FAILED); |
+ |
+ token_validator_->ValidateThirdPartyToken( |
+ kToken, |
+ base::Bind(&TokenValidatorFactoryImplTest::DeleteOnFailureCallback, |
+ base::Unretained(this))); |
+ base::RunLoop().Run(); |
+} |
+ |
} // namespace remoting |