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

Side by Side Diff: chrome/browser/extensions/api/dns/dns_apitest.cc

Issue 10537017: Allow hostnames in socket.connect(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch Set 1 Created 8 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/ref_counted.h"
5 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
6 #include "base/synchronization/waitable_event.h"
7 #include "chrome/browser/extensions/api/dns/dns_api.h" 7 #include "chrome/browser/extensions/api/dns/dns_api.h"
8 #include "chrome/browser/extensions/api/dns/host_resolver_wrapper.h"
9 #include "chrome/browser/extensions/api/dns/mock_host_resolver_creator.h"
8 #include "chrome/browser/extensions/extension_apitest.h" 10 #include "chrome/browser/extensions/extension_apitest.h"
9 #include "chrome/browser/extensions/extension_function_test_utils.h" 11 #include "chrome/browser/extensions/extension_function_test_utils.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "net/base/host_resolver.h"
12 #include "net/base/mock_host_resolver.h" 12 #include "net/base/mock_host_resolver.h"
13 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
14 #include "net/base/net_util.h" 14 #include "net/base/net_util.h"
15 15
16 using content::BrowserThread;
17 using extension_function_test_utils::CreateEmptyExtension; 16 using extension_function_test_utils::CreateEmptyExtension;
18 using extension_function_test_utils::RunFunctionAndReturnResult; 17 using extension_function_test_utils::RunFunctionAndReturnResult;
19 18
20 namespace { 19 namespace {
21 20
22 class DnsApiTest : public PlatformAppApiTest { 21 class DnsApiTest : public PlatformAppApiTest {
23 public: 22 public:
24 static const std::string kHostname;
25 static const std::string kAddress;
26
27 DnsApiTest() : resolver_event_(true, false), 23 DnsApiTest() : resolver_event_(true, false),
28 mock_host_resolver_(NULL) { 24 resolver_creator_(new extensions::MockHostResolverCreator()) {
29 } 25 }
30 26
31 virtual void SetUpOnMainThread() OVERRIDE { 27 void SetUpOnMainThread() OVERRIDE {
32 CreateMockHostResolverOnIOThread(); 28 extensions::HostResolverWrapper::GetInstance()->SetHostResolverForTesting(
33 extensions::DnsResolveFunction::set_host_resolver_for_testing( 29 resolver_creator_->CreateMockHostResolver());
34 get_mock_host_resolver());
35 } 30 }
36 31
37 virtual void CleanUpOnMainThread() OVERRIDE { 32 void CleanUpOnMainThread() OVERRIDE {
38 if (mock_host_resolver_) { 33 extensions::HostResolverWrapper::GetInstance()->
39 extensions::DnsResolveFunction::set_host_resolver_for_testing(NULL); 34 SetHostResolverForTesting(NULL);
40 DeleteMockHostResolverOnIOThread(); 35 resolver_creator_->DeleteMockHostResolver();
41 }
42 }
43
44 void CreateMockHostResolverOnIOThread() {
45 bool result = BrowserThread::PostTask(
46 BrowserThread::IO, FROM_HERE,
47 base::Bind(&DnsApiTest::FinishMockHostResolverCreation, this));
48 DCHECK(result);
49
50 base::TimeDelta max_time = base::TimeDelta::FromSeconds(5);
51 ASSERT_TRUE(resolver_event_.TimedWait(max_time));
52
53 }
54
55 void FinishMockHostResolverCreation() {
56 mock_host_resolver_ = new net::MockHostResolver();
57 get_mock_host_resolver()->rules()->AddRule(kHostname, kAddress);
58 get_mock_host_resolver()->rules()->AddSimulatedFailure(
59 "this.hostname.is.bogus");
60 resolver_event_.Signal();
61 }
62
63 void DeleteMockHostResolverOnIOThread() {
64 if (!mock_host_resolver_)
65 return;
66 resolver_event_.Reset();
67 bool result = BrowserThread::PostTask(
68 BrowserThread::IO, FROM_HERE,
69 base::Bind(&DnsApiTest::FinishMockHostResolverDeletion, this));
70 DCHECK(result);
71
72 base::TimeDelta max_time = base::TimeDelta::FromSeconds(5);
73 ASSERT_TRUE(resolver_event_.TimedWait(max_time));
74 }
75
76 void FinishMockHostResolverDeletion() {
77 delete(mock_host_resolver_);
78 resolver_event_.Signal();
79 }
80
81 net::MockHostResolver* get_mock_host_resolver() {
82 return mock_host_resolver_;
83 } 36 }
84 37
85 private: 38 private:
86 base::WaitableEvent resolver_event_; 39 base::WaitableEvent resolver_event_;
87 40
88 // The MockHostResolver asserts that it's used on the same thread on which 41 // The MockHostResolver asserts that it's used on the same thread on which
89 // it's created, which is actually a stronger rule than its real counterpart. 42 // it's created, which is actually a stronger rule than its real counterpart.
90 // But that's fine; it's good practice. 43 // But that's fine; it's good practice.
91 // 44 scoped_refptr<extensions::MockHostResolverCreator> resolver_creator_;
92 // Plain pointer because we have to manage lifetime manually.
93 net::MockHostResolver* mock_host_resolver_;
94 }; 45 };
95 const std::string DnsApiTest::kHostname = "www.sowbug.org";
96 const std::string DnsApiTest::kAddress = "9.8.7.6";
97 46
98 } // namespace 47 } // namespace
99 48
100 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveIPLiteral) { 49 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveIPLiteral) {
101 scoped_refptr<extensions::DnsResolveFunction> resolve_function( 50 scoped_refptr<extensions::DnsResolveFunction> resolve_function(
102 new extensions::DnsResolveFunction()); 51 new extensions::DnsResolveFunction());
103 scoped_refptr<extensions::Extension> empty_extension(CreateEmptyExtension()); 52 scoped_refptr<extensions::Extension> empty_extension(CreateEmptyExtension());
104 53
105 resolve_function->set_extension(empty_extension.get()); 54 resolve_function->set_extension(empty_extension.get());
106 resolve_function->set_has_callback(true); 55 resolve_function->set_has_callback(true);
(...skipping 14 matching lines...) Expand all
121 70
122 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) { 71 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) {
123 scoped_refptr<extensions::DnsResolveFunction> resolve_function( 72 scoped_refptr<extensions::DnsResolveFunction> resolve_function(
124 new extensions::DnsResolveFunction()); 73 new extensions::DnsResolveFunction());
125 scoped_refptr<extensions::Extension> empty_extension(CreateEmptyExtension()); 74 scoped_refptr<extensions::Extension> empty_extension(CreateEmptyExtension());
126 75
127 resolve_function->set_extension(empty_extension.get()); 76 resolve_function->set_extension(empty_extension.get());
128 resolve_function->set_has_callback(true); 77 resolve_function->set_has_callback(true);
129 78
130 std::string function_arguments("[\""); 79 std::string function_arguments("[\"");
131 function_arguments += DnsApiTest::kHostname; 80 function_arguments += extensions::MockHostResolverCreator::kHostname;
132 function_arguments += "\"]"; 81 function_arguments += "\"]";
133 scoped_ptr<base::Value> result( 82 scoped_ptr<base::Value> result(
134 RunFunctionAndReturnResult(resolve_function.get(), 83 RunFunctionAndReturnResult(resolve_function.get(),
135 function_arguments, browser())); 84 function_arguments, browser()));
136 ASSERT_EQ(base::Value::TYPE_DICTIONARY, result->GetType()); 85 ASSERT_EQ(base::Value::TYPE_DICTIONARY, result->GetType());
137 DictionaryValue *value = static_cast<DictionaryValue*>(result.get()); 86 DictionaryValue *value = static_cast<DictionaryValue*>(result.get());
138 87
139 int resultCode; 88 int resultCode;
140 EXPECT_TRUE(value->GetInteger("resultCode", &resultCode)); 89 EXPECT_TRUE(value->GetInteger("resultCode", &resultCode));
141 EXPECT_EQ(net::OK, resultCode); 90 EXPECT_EQ(net::OK, resultCode);
142 91
143 std::string address; 92 std::string address;
144 EXPECT_TRUE(value->GetString("address", &address)); 93 EXPECT_TRUE(value->GetString("address", &address));
145 EXPECT_EQ(DnsApiTest::kAddress, address); 94 EXPECT_EQ(extensions::MockHostResolverCreator::kAddress, address);
146 } 95 }
147 96
148 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsExtension) { 97 IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsExtension) {
149 ASSERT_TRUE(RunExtensionTest("dns/api")) << message_; 98 ASSERT_TRUE(RunExtensionTest("dns/api")) << message_;
150 } 99 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698