Index: chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc |
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc b/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc |
deleted file mode 100644 |
index 6c0162e125a6861b8e400e1d60896c67ff4883f9..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc |
+++ /dev/null |
@@ -1,384 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/files/file_path.h" |
-#include "chrome/browser/extensions/api/cast_channel/cast_channel_api.h" |
-#include "chrome/browser/extensions/api/cast_channel/cast_socket.h" |
-#include "chrome/browser/extensions/extension_apitest.h" |
-#include "chrome/browser/extensions/extension_function_test_utils.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/common/extensions/api/cast_channel.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "extensions/common/switches.h" |
-#include "net/base/capturing_net_log.h" |
-#include "net/base/completion_callback.h" |
-#include "net/base/net_errors.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gmock_mutant.h" |
- |
-namespace cast_channel = extensions::api::cast_channel; |
-using cast_channel::CastSocket; |
-using cast_channel::ChannelError; |
-using cast_channel::MessageInfo; |
-using cast_channel::ReadyState; |
-using extensions::Extension; |
- |
-namespace utils = extension_function_test_utils; |
- |
-using ::testing::_; |
-using ::testing::A; |
-using ::testing::DoAll; |
-using ::testing::Invoke; |
-using ::testing::InSequence; |
-using ::testing::Return; |
- |
-namespace { |
- |
-const char kTestExtensionId[] = "ddchlicdkolnonkihahngkmmmjnjlkkf"; |
-const int64 kTimeoutMs = 10000; |
- |
-static void FillMessageInfo(MessageInfo* message_info, |
- const std::string& message) { |
- message_info->namespace_ = "foo"; |
- message_info->source_id = "src"; |
- message_info->destination_id = "dest"; |
- message_info->data.reset(new base::StringValue(message)); |
-} |
- |
-ACTION_TEMPLATE(InvokeCompletionCallback, |
- HAS_1_TEMPLATE_PARAMS(int, k), |
- AND_1_VALUE_PARAMS(result)) { |
- ::std::tr1::get<k>(args).Run(result); |
-} |
- |
-ACTION_P2(InvokeDelegateOnError, api_test, api) { |
- api_test->CallOnError(api); |
-} |
- |
-class MockCastSocket : public CastSocket { |
- public: |
- explicit MockCastSocket(CastSocket::Delegate* delegate, |
- net::IPEndPoint ip_endpoint, |
- net::NetLog* net_log) |
- : CastSocket(kTestExtensionId, ip_endpoint, |
- cast_channel::CHANNEL_AUTH_TYPE_SSL, delegate, net_log, |
- base::TimeDelta::FromMilliseconds(kTimeoutMs)) {} |
- virtual ~MockCastSocket() {} |
- |
- virtual bool CalledOnValidThread() const OVERRIDE { |
- // Always return true in testing. |
- return true; |
- } |
- |
- MOCK_METHOD1(Connect, void(const net::CompletionCallback& callback)); |
- MOCK_METHOD2(SendMessage, void(const MessageInfo& message, |
- const net::CompletionCallback& callback)); |
- MOCK_METHOD1(Close, void(const net::CompletionCallback& callback)); |
- MOCK_CONST_METHOD0(ready_state, cast_channel::ReadyState()); |
- MOCK_CONST_METHOD0(error_state, cast_channel::ChannelError()); |
-}; |
- |
-} // namespace |
- |
-class CastChannelAPITest : public ExtensionApiTest { |
- public: |
- CastChannelAPITest() {} |
- |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- ExtensionApiTest::SetUpCommandLine(command_line); |
- command_line->AppendSwitchASCII( |
- extensions::switches::kWhitelistedExtensionID, |
- kTestExtensionId); |
- } |
- |
- void SetUpMockCastSocket() { |
- extensions::CastChannelAPI* api = GetApi(); |
- net::IPAddressNumber ip_number; |
- net::ParseIPLiteralToNumber("192.168.1.1", &ip_number); |
- net::IPEndPoint ip_endpoint(ip_number, 8009); |
- mock_cast_socket_ = new MockCastSocket(api, ip_endpoint, |
- &capturing_net_log_); |
- // Transfers ownership of the socket. |
- api->SetSocketForTest( |
- make_scoped_ptr<CastSocket>(mock_cast_socket_).Pass()); |
- |
- // Set expectations on error_state(). |
- EXPECT_CALL(*mock_cast_socket_, error_state()) |
- .WillRepeatedly(Return(cast_channel::CHANNEL_ERROR_NONE)); |
- } |
- |
- extensions::CastChannelAPI* GetApi() { |
- return extensions::CastChannelAPI::Get(profile()); |
- } |
- |
- void CallOnError(extensions::CastChannelAPI* api) { |
- api->OnError(mock_cast_socket_, |
- cast_channel::CHANNEL_ERROR_CONNECT_ERROR); |
- } |
- |
- protected: |
- void CallOnMessage(const std::string& message) { |
- content::BrowserThread::PostTask( |
- content::BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&CastChannelAPITest::DoCallOnMessage, this, |
- GetApi(), mock_cast_socket_, message)); |
- } |
- |
- void DoCallOnMessage(extensions::CastChannelAPI* api, |
- MockCastSocket* cast_socket, |
- const std::string& message) { |
- MessageInfo message_info; |
- FillMessageInfo(&message_info, message); |
- api->OnMessage(cast_socket, message_info); |
- } |
- |
- extensions::CastChannelOpenFunction* CreateOpenFunction( |
- scoped_refptr<Extension> extension) { |
- extensions::CastChannelOpenFunction* cast_channel_open_function = |
- new extensions::CastChannelOpenFunction; |
- cast_channel_open_function->set_extension(extension.get()); |
- return cast_channel_open_function; |
- } |
- |
- extensions::CastChannelSendFunction* CreateSendFunction( |
- scoped_refptr<Extension> extension) { |
- extensions::CastChannelSendFunction* cast_channel_send_function = |
- new extensions::CastChannelSendFunction; |
- cast_channel_send_function->set_extension(extension.get()); |
- return cast_channel_send_function; |
- } |
- |
- MockCastSocket* mock_cast_socket_; |
- net::CapturingNetLog capturing_net_log_; |
-}; |
- |
-// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest |
-// always return true without actually running the test. Remove when fixed. |
-#if defined(OS_WIN) && !defined(NDEBUG) |
-#define MAYBE_TestOpenSendClose DISABLED_TestOpenSendClose |
-#else |
-#define MAYBE_TestOpenSendClose TestOpenSendClose |
-#endif |
-// Test loading extension, opening a channel with ConnectInfo, adding a |
-// listener, writing, reading, and closing. |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenSendClose) { |
- SetUpMockCastSocket(); |
- |
- { |
- InSequence dummy; |
- EXPECT_CALL(*mock_cast_socket_, Connect(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_OPEN)); |
- EXPECT_CALL(*mock_cast_socket_, SendMessage(A<const MessageInfo&>(), _)) |
- .WillOnce(InvokeCompletionCallback<1>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_OPEN)); |
- EXPECT_CALL(*mock_cast_socket_, Close(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_CLOSED)); |
- } |
- |
- EXPECT_TRUE(RunExtensionSubtest("cast_channel/api", |
- "test_open_send_close.html")); |
-} |
- |
-// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest |
-// always return true without actually running the test. Remove when fixed. |
-#if defined(OS_WIN) && !defined(NDEBUG) |
-#define MAYBE_TestOpenSendCloseWithUrl DISABLED_TestOpenSendCloseWithUrl |
-#else |
-#define MAYBE_TestOpenSendCloseWithUrl TestOpenSendCloseWithUrl |
-#endif |
-// Test loading extension, opening a channel with a URL, adding a listener, |
-// writing, reading, and closing. |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenSendCloseWithUrl) { |
- SetUpMockCastSocket(); |
- |
- { |
- InSequence dummy; |
- EXPECT_CALL(*mock_cast_socket_, Connect(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_OPEN)); |
- EXPECT_CALL(*mock_cast_socket_, SendMessage(A<const MessageInfo&>(), _)) |
- .WillOnce(InvokeCompletionCallback<1>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_OPEN)); |
- EXPECT_CALL(*mock_cast_socket_, Close(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_CLOSED)); |
- } |
- |
- EXPECT_TRUE(RunExtensionSubtest("cast_channel/api", |
- "test_open_send_close_url.html")); |
-} |
- |
-// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest |
-// always return true without actually running the test. Remove when fixed. |
-#if defined(OS_WIN) && !defined(NDEBUG) |
-#define MAYBE_TestOpenReceiveClose DISABLED_TestOpenReceiveClose |
-#else |
-#define MAYBE_TestOpenReceiveClose TestOpenReceiveClose |
-#endif |
-// Test loading extension, opening a channel, adding a listener, |
-// writing, reading, and closing. |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenReceiveClose) { |
- SetUpMockCastSocket(); |
- |
- { |
- InSequence dummy; |
- EXPECT_CALL(*mock_cast_socket_, Connect(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .Times(3) |
- .WillRepeatedly(Return(cast_channel::READY_STATE_OPEN)); |
- EXPECT_CALL(*mock_cast_socket_, Close(_)) |
- .WillOnce(InvokeCompletionCallback<0>(net::OK)); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillOnce(Return(cast_channel::READY_STATE_CLOSED)); |
- } |
- |
- EXPECT_TRUE(RunExtensionSubtest("cast_channel/api", |
- "test_open_receive_close.html")); |
- |
- ResultCatcher catcher; |
- CallOnMessage("some-message"); |
- CallOnMessage("some-message"); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest |
-// always return true without actually running the test. Remove when fixed. |
-// Flaky on mac: crbug.com/393969 |
-#if (defined(OS_WIN) && !defined(NDEBUG)) || defined(OS_MACOSX) |
-#define MAYBE_TestOpenError DISABLED_TestOpenError |
-#else |
-#define MAYBE_TestOpenError TestOpenError |
-#endif |
-// Test the case when socket open results in an error. |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenError) { |
- SetUpMockCastSocket(); |
- |
- EXPECT_CALL(*mock_cast_socket_, Connect(_)) |
- .WillOnce(DoAll( |
- InvokeDelegateOnError(this, GetApi()), |
- InvokeCompletionCallback<0>(net::ERR_FAILED))); |
- EXPECT_CALL(*mock_cast_socket_, ready_state()) |
- .WillRepeatedly(Return(cast_channel::READY_STATE_CLOSED)); |
- EXPECT_CALL(*mock_cast_socket_, Close(_)); |
- |
- EXPECT_TRUE(RunExtensionSubtest("cast_channel/api", |
- "test_open_error.html")); |
- |
- ResultCatcher catcher; |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, TestOpenInvalidConnectInfo) { |
- scoped_refptr<Extension> empty_extension(utils::CreateEmptyExtension()); |
- scoped_refptr<extensions::CastChannelOpenFunction> cast_channel_open_function; |
- |
- // Invalid URL |
- // TODO(mfoltz): Remove this test case when fixing crbug.com/331905 |
- cast_channel_open_function = CreateOpenFunction(empty_extension); |
- std::string error(utils::RunFunctionAndReturnError( |
- cast_channel_open_function.get(), "[\"blargh\"]", browser())); |
- EXPECT_EQ(error, "Invalid connect_info (invalid Cast URL blargh)"); |
- |
- // Wrong type |
- // TODO(mfoltz): Remove this test case when fixing crbug.com/331905 |
- cast_channel_open_function = CreateOpenFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_open_function.get(), |
- "[123]", browser()); |
- EXPECT_EQ(error, "Invalid connect_info (unknown type)"); |
- |
- // Invalid IP address |
- cast_channel_open_function = CreateOpenFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_open_function.get(), |
- "[{\"ipAddress\": \"invalid_ip\", \"port\": 8009, \"auth\": \"ssl\"}]", |
- browser()); |
- EXPECT_EQ(error, "Invalid connect_info (invalid IP address)"); |
- |
- // Invalid port |
- cast_channel_open_function = CreateOpenFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_open_function.get(), |
- "[{\"ipAddress\": \"127.0.0.1\", \"port\": -200, \"auth\": \"ssl\"}]", |
- browser()); |
- EXPECT_EQ(error, "Invalid connect_info (invalid port)"); |
- |
- // Auth not set |
- cast_channel_open_function = CreateOpenFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_open_function.get(), |
- "[{\"ipAddress\": \"127.0.0.1\", \"port\": 8009}]", |
- browser()); |
- EXPECT_EQ(error, "connect_info.auth is required"); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(CastChannelAPITest, TestSendInvalidMessageInfo) { |
- scoped_refptr<Extension> empty_extension(utils::CreateEmptyExtension()); |
- scoped_refptr<extensions::CastChannelSendFunction> cast_channel_send_function; |
- |
- // Numbers are not supported |
- cast_channel_send_function = CreateSendFunction(empty_extension); |
- std::string error(utils::RunFunctionAndReturnError( |
- cast_channel_send_function.get(), |
- "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", " |
- "\"connectInfo\": " |
- "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, " |
- "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, " |
- "{\"namespace_\": \"foo\", \"sourceId\": \"src\", " |
- "\"destinationId\": \"dest\", \"data\": 1235}]", |
- browser())); |
- EXPECT_EQ(error, "Invalid type of message_info.data"); |
- |
- // Missing namespace_ |
- cast_channel_send_function = CreateSendFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_send_function.get(), |
- "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", " |
- "\"connectInfo\": " |
- "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, " |
- "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, " |
- "{\"namespace_\": \"\", \"sourceId\": \"src\", " |
- "\"destinationId\": \"dest\", \"data\": \"data\"}]", |
- browser()); |
- EXPECT_EQ(error, "message_info.namespace_ is required"); |
- |
- // Missing source_id |
- cast_channel_send_function = CreateSendFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_send_function.get(), |
- "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", " |
- "\"connectInfo\": " |
- "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, " |
- "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, " |
- "{\"namespace_\": \"foo\", \"sourceId\": \"\", " |
- "\"destinationId\": \"dest\", \"data\": \"data\"}]", |
- browser()); |
- EXPECT_EQ(error, "message_info.source_id is required"); |
- |
- // Missing destination_id |
- cast_channel_send_function = CreateSendFunction(empty_extension); |
- error = utils::RunFunctionAndReturnError( |
- cast_channel_send_function.get(), |
- "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", " |
- "\"connectInfo\": " |
- "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, " |
- "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, " |
- "{\"namespace_\": \"foo\", \"sourceId\": \"src\", " |
- "\"destinationId\": \"\", \"data\": \"data\"}]", |
- browser()); |
- EXPECT_EQ(error, "message_info.destination_id is required"); |
-} |