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

Unified Diff: net/proxy/proxy_script_decider_unittest.cc

Issue 23181010: Fast-fail WPAD detection. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Add unit tests Created 7 years, 3 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
« net/proxy/proxy_script_decider.cc ('K') | « net/proxy/proxy_script_decider.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/proxy_script_decider_unittest.cc
diff --git a/net/proxy/proxy_script_decider_unittest.cc b/net/proxy/proxy_script_decider_unittest.cc
index 977bd4df642b49788221d509273671cb2b4638e2..efd87d0de04430bcb17db05c9ed281f688fb8f86 100644
--- a/net/proxy/proxy_script_decider_unittest.cc
+++ b/net/proxy/proxy_script_decider_unittest.cc
@@ -14,11 +14,13 @@
#include "net/base/net_log.h"
#include "net/base/net_log_unittest.h"
#include "net/base/test_completion_callback.h"
+#include "net/dns/mock_host_resolver.h"
#include "net/proxy/dhcp_proxy_script_fetcher.h"
#include "net/proxy/proxy_config.h"
#include "net/proxy/proxy_resolver.h"
#include "net/proxy/proxy_script_decider.h"
#include "net/proxy/proxy_script_fetcher.h"
+#include "net/url_request/url_request_context.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
@@ -93,7 +95,8 @@ class Rules {
class RuleBasedProxyScriptFetcher : public ProxyScriptFetcher {
public:
- explicit RuleBasedProxyScriptFetcher(const Rules* rules) : rules_(rules) {}
+ explicit RuleBasedProxyScriptFetcher(const Rules* rules)
+ : rules_(rules), request_context_(NULL) {}
// ProxyScriptFetcher implementation.
virtual int Fetch(const GURL& url,
@@ -109,10 +112,17 @@ class RuleBasedProxyScriptFetcher : public ProxyScriptFetcher {
virtual void Cancel() OVERRIDE {}
- virtual URLRequestContext* GetRequestContext() const OVERRIDE { return NULL; }
+ virtual void SetRequestContext(URLRequestContext* context) {
szym 2013/09/11 14:06:22 nit: move this out of here, so that the "ProxyScri
Elly Fong-Jones 2013/09/11 20:20:37 Done.
+ request_context_ = context;
+ }
+
+ virtual URLRequestContext* GetRequestContext() const OVERRIDE {
+ return request_context_;
+ }
private:
const Rules* rules_;
+ URLRequestContext* request_context_;
};
// Succeed using custom PAC script.
@@ -243,6 +253,81 @@ TEST(ProxyScriptDeciderTest, AutodetectSuccess) {
EXPECT_EQ(rule.url, decider.effective_config().pac_url());
}
+class ProxyScriptDeciderQuickCheckTest : public ::testing::Test {
+ public:
+ ProxyScriptDeciderQuickCheckTest()
+ : rule_(rules_.AddSuccessRule("http://wpad/wpad.dat")),
+ fetcher_(&rules_) { }
+
+ virtual void SetUp() {
szym 2013/09/11 14:06:22 OVERRIDE
Elly Fong-Jones 2013/09/11 20:20:37 Done.
+ request_context_.set_host_resolver(&resolver_);
+ fetcher_.SetRequestContext(&request_context_);
+ config_.set_auto_detect(true);
+ decider_.reset(new ProxyScriptDecider(&fetcher_, &dhcp_fetcher_, NULL));
+ }
+
+ virtual int StartDecider() {
szym 2013/09/11 14:06:22 why virtual?
Elly Fong-Jones 2013/09/11 20:20:37 Habit. Removed.
+ return decider()->Start(config_, base::TimeDelta(), true,
+ callback_.callback());
+ }
+
+ Rules::Rule* rule() { return &rule_; }
+ ProxyScriptDecider* decider() { return decider_.get(); }
+ MockHostResolver* resolver() { return &resolver_; }
+
+ private:
szym 2013/09/11 14:06:22 I'd suggest making this protected and using direct
Elly Fong-Jones 2013/09/11 20:20:37 Done.
+ URLRequestContext request_context_;
+ MockHostResolver resolver_;
+
+ Rules rules_;
+ Rules::Rule rule_;
+ RuleBasedProxyScriptFetcher fetcher_;
+ DoNothingDhcpProxyScriptFetcher dhcp_fetcher_;
+
+ TestCompletionCallback callback_;
+
+ ProxyConfig config_;
+
+ scoped_ptr<ProxyScriptDecider> decider_;
+};
+
+TEST_F(ProxyScriptDeciderQuickCheckTest, SyncSuccess) {
+ resolver()->set_synchronous_mode(true);
+ resolver()->rules()->AddRule("wpad", "1.2.3.4");
+
+ EXPECT_EQ(OK, StartDecider());
+ EXPECT_EQ(rule()->text(), decider()->script_data()->utf16());
+
+ EXPECT_TRUE(decider()->effective_config().has_pac_url());
+ EXPECT_EQ(rule()->url, decider()->effective_config().pac_url());
+}
+
+TEST_F(ProxyScriptDeciderQuickCheckTest, AsyncSuccess) {
+ resolver()->set_ondemand_mode(true);
+ resolver()->rules()->AddRule("wpad", "1.2.3.4");
+
+ EXPECT_EQ(ERR_IO_PENDING, StartDecider());
+ ASSERT_TRUE(resolver()->has_pending_requests());
+ resolver()->ResolveAllPending();
+ // Let the resolutions complete.
+ base::MessageLoop::current()->RunUntilIdle();
szym 2013/09/11 14:06:22 You should callback_.WaitForResult rather than Run
Elly Fong-Jones 2013/09/11 20:20:37 Oh man, I never knew about WaitForResult! This als
+ EXPECT_FALSE(resolver()->has_pending_requests());
+ EXPECT_EQ(rule()->text(), decider()->script_data()->utf16());
+ EXPECT_TRUE(decider()->effective_config().has_pac_url());
+ EXPECT_EQ(rule()->url, decider()->effective_config().pac_url());
+}
+
+TEST_F(ProxyScriptDeciderQuickCheckTest, QuickCheckAsyncFail) {
+ resolver()->set_ondemand_mode(true);
+ resolver()->rules()->AddSimulatedFailure("wpad");
+ EXPECT_EQ(ERR_IO_PENDING, StartDecider());
+ // let the timer run
szym 2013/09/11 14:06:22 I don't understand the comment. There's barely any
Elly Fong-Jones 2013/09/11 20:20:37 Done.
+ ASSERT_TRUE(resolver()->has_pending_requests());
+ resolver()->ResolveAllPending();
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_FALSE(decider()->effective_config().has_pac_url());
+}
+
szym 2013/09/11 14:06:22 You need a test which exercises the quick check ti
Elly Fong-Jones 2013/09/11 20:20:37 Done.
// Fails at WPAD (downloading), but succeeds in choosing the custom PAC.
TEST(ProxyScriptDeciderTest, AutodetectFailCustomSuccess1) {
Rules rules;
« net/proxy/proxy_script_decider.cc ('K') | « net/proxy/proxy_script_decider.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698