sockets_udp_apitest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/memory/ref_counted.h" 6#include "base/path_service.h" 7#include "base/strings/stringprintf.h" 8#include "chrome/browser/extensions/extension_apitest.h" 9#include "chrome/browser/extensions/extension_service.h" 10#include "chrome/browser/extensions/extension_test_message_listener.h" 11#include "chrome/browser/ui/browser.h" 12#include "chrome/browser/ui/extensions/application_launch.h" 13#include "chrome/common/chrome_paths.h" 14#include "chrome/common/chrome_switches.h" 15#include "chrome/test/base/in_process_browser_test.h" 16#include "chrome/test/base/ui_test_utils.h" 17#include "extensions/browser/api/dns/host_resolver_wrapper.h" 18#include "extensions/browser/api/dns/mock_host_resolver_creator.h" 19#include "extensions/browser/api/sockets_udp/sockets_udp_api.h" 20#include "net/dns/mock_host_resolver.h" 21#include "net/test/spawned_test_server/spawned_test_server.h" 22 23using extensions::Extension; 24 25namespace { 26 27// TODO(jschuh): Hanging plugin tests. crbug.com/244653 28#if defined(OS_WIN) && defined(ARCH_CPU_X86_64) 29#define MAYBE(x) DISABLED_##x 30#else 31#define MAYBE(x) x 32#endif 33 34const std::string kHostname = "127.0.0.1"; 35const int kPort = 8888; 36 37class SocketsUdpApiTest : public ExtensionApiTest { 38 public: 39 SocketsUdpApiTest() : resolver_event_(true, false), 40 resolver_creator_( 41 new extensions::MockHostResolverCreator()) { 42 } 43 44 virtual void SetUpOnMainThread() OVERRIDE { 45 extensions::HostResolverWrapper::GetInstance()->SetHostResolverForTesting( 46 resolver_creator_->CreateMockHostResolver()); 47 } 48 49 virtual void TearDownOnMainThread() OVERRIDE { 50 extensions::HostResolverWrapper::GetInstance()-> 51 SetHostResolverForTesting(NULL); 52 resolver_creator_->DeleteMockHostResolver(); 53 } 54 55 private: 56 base::WaitableEvent resolver_event_; 57 58 // The MockHostResolver asserts that it's used on the same thread on which 59 // it's created, which is actually a stronger rule than its real counterpart. 60 // But that's fine; it's good practice. 61 scoped_refptr<extensions::MockHostResolverCreator> resolver_creator_; 62}; 63 64} // namespace 65 66IN_PROC_BROWSER_TEST_F(SocketsUdpApiTest, SocketsUdpExtension) { 67 scoped_ptr<net::SpawnedTestServer> test_server( 68 new net::SpawnedTestServer( 69 net::SpawnedTestServer::TYPE_UDP_ECHO, 70 net::SpawnedTestServer::kLocalhost, 71 base::FilePath(FILE_PATH_LITERAL("net/data")))); 72 EXPECT_TRUE(test_server->Start()); 73 74 net::HostPortPair host_port_pair = test_server->host_port_pair(); 75 int port = host_port_pair.port(); 76 ASSERT_TRUE(port > 0); 77 78 // Test that sendTo() is properly resolving hostnames. 79 host_port_pair.set_host("LOCALhost"); 80 81 ResultCatcher catcher; 82 catcher.RestrictToProfile(browser()->profile()); 83 84 ExtensionTestMessageListener listener("info_please", true); 85 86 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("sockets_udp/api"))); 87 EXPECT_TRUE(listener.WaitUntilSatisfied()); 88 listener.Reply( 89 base::StringPrintf("udp:%s:%d", host_port_pair.host().c_str(), port)); 90 91 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 92} 93 94IN_PROC_BROWSER_TEST_F(SocketsUdpApiTest, DISABLED_SocketsUdpMulticast) { 95 ResultCatcher catcher; 96 catcher.RestrictToProfile(browser()->profile()); 97 ExtensionTestMessageListener listener("info_please", true); 98 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("sockets_udp/api"))); 99 EXPECT_TRUE(listener.WaitUntilSatisfied()); 100 listener.Reply( 101 base::StringPrintf("multicast:%s:%d", kHostname.c_str(), kPort)); 102 103 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 104} 105