Index: chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc |
diff --git a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc |
index baf405e129a0e03ccd1bf36dec6a475e982c8825..fc80b08e34df54ae7abe15ffe378e68a31517191 100644 |
--- a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc |
+++ b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc |
@@ -16,6 +16,15 @@ |
#include "extensions/common/test_util.h" |
using extensions::Extension; |
+using extensions::WebrtcLoggingPrivateDiscardFunction; |
+using extensions::WebrtcLoggingPrivateSetMetaDataFunction; |
+using extensions::WebrtcLoggingPrivateStartFunction; |
+using extensions::WebrtcLoggingPrivateStartRtpDumpFunction; |
+using extensions::WebrtcLoggingPrivateStopFunction; |
+using extensions::WebrtcLoggingPrivateStopRtpDumpFunction; |
+using extensions::WebrtcLoggingPrivateStoreFunction; |
+using extensions::WebrtcLoggingPrivateUploadFunction; |
+using extensions::WebrtcLoggingPrivateUploadStoredFunction; |
namespace utils = extension_function_test_utils; |
@@ -24,70 +33,165 @@ namespace { |
static const char kTestLoggingSessionId[] = "0123456789abcdef"; |
static const char kTestLoggingUrl[] = "dummy url string"; |
-class WebrtcLoggingPrivateApiTest : public ExtensionApiTest { |
-}; |
- |
-} // namespace |
- |
-IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopDiscard) { |
- scoped_refptr<Extension> empty_extension( |
- extensions::test_util::CreateEmptyExtension()); |
- |
- // Tell the uploader to save the multipart to a buffer instead of uploading. |
- std::string multipart; |
- g_browser_process->webrtc_log_uploader()-> |
- OverrideUploadWithBufferForTesting(&multipart); |
- |
- // Start |
- |
- scoped_refptr<extensions::WebrtcLoggingPrivateStartFunction> |
- start_function(new extensions::WebrtcLoggingPrivateStartFunction()); |
- start_function->set_extension(empty_extension.get()); |
- start_function->set_has_callback(true); |
- |
- content::WebContents* contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- base::ListValue parameters; |
- base::DictionaryValue* request_info = new base::DictionaryValue(); |
- request_info->SetInteger("tabId", |
- extensions::ExtensionTabUtil::GetTabId(contents)); |
- parameters.Append(request_info); |
- parameters.AppendString(contents->GetURL().GetOrigin().spec()); |
+std::string ParamsToString(const base::ListValue& parameters) { |
std::string parameter_string; |
- base::JSONWriter::Write(¶meters, ¶meter_string); |
+ EXPECT_TRUE(base::JSONWriter::Write(¶meters, ¶meter_string)); |
+ return parameter_string; |
+} |
+ |
+void InitializeTestMetaData(base::ListValue* parameters) { |
+ base::DictionaryValue* meta_data_entry = new base::DictionaryValue(); |
+ meta_data_entry->SetString("key", "app_session_id"); |
+ meta_data_entry->SetString("value", kTestLoggingSessionId); |
+ base::ListValue* meta_data = new base::ListValue(); |
+ meta_data->Append(meta_data_entry); |
+ meta_data_entry = new base::DictionaryValue(); |
+ meta_data_entry->SetString("key", "url"); |
+ meta_data_entry->SetString("value", kTestLoggingUrl); |
+ meta_data->Append(meta_data_entry); |
+ parameters->Append(meta_data); |
+} |
- // TODO(grunell): MaybeRunFunction is suitable for those calls not returning |
- // anything. |
- scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
- start_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
+class WebrtcLoggingPrivateApiTest : public ExtensionApiTest { |
+ protected: |
+ |
+ void SetUp() override { |
+ ExtensionApiTest::SetUp(); |
+ extension_ = extensions::test_util::CreateEmptyExtension(); |
+ } |
+ |
+ template<typename T> |
+ scoped_refptr<T> CreateFunction() { |
+ scoped_refptr<T> function(new T()); |
+ function->set_extension(extension_.get()); |
+ function->set_has_callback(true); |
+ return function; |
+ } |
+ |
+ content::WebContents* web_contents() { |
+ return browser()->tab_strip_model()->GetActiveWebContents(); |
+ } |
+ |
+ void AppendTabIdAndUrl(base::ListValue* parameters) { |
+ base::DictionaryValue* request_info = new base::DictionaryValue(); |
+ request_info->SetInteger( |
+ "tabId", extensions::ExtensionTabUtil::GetTabId(web_contents())); |
+ parameters->Append(request_info); |
+ parameters->AppendString(web_contents()->GetURL().GetOrigin().spec()); |
+ } |
+ |
+ bool RunFunction(UIThreadExtensionFunction* function, |
+ const base::ListValue& parameters, |
+ bool expect_results) { |
+ scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
+ function, ParamsToString(parameters), browser())); |
+ if (expect_results) { |
+ EXPECT_TRUE(result.get()); |
+ return result.get() != nullptr; |
+ } |
+ |
+ EXPECT_FALSE(result.get()); |
+ return result.get() == nullptr; |
+ } |
+ |
+ template<typename Function> |
+ bool RunFunction(const base::ListValue& parameters, bool expect_results) { |
+ scoped_refptr<Function> function(CreateFunction<Function>()); |
+ return RunFunction(function.get(), parameters, expect_results); |
+ } |
+ |
+ template<typename Function> |
+ bool RunNoArgsFunction(bool expect_results) { |
+ base::ListValue params; |
+ AppendTabIdAndUrl(¶ms); |
+ scoped_refptr<Function> function(CreateFunction<Function>()); |
+ return RunFunction(function.get(), params, expect_results); |
+ } |
+ |
+ bool StartLogging() { |
+ return RunNoArgsFunction<WebrtcLoggingPrivateStartFunction>(false); |
+ } |
+ |
+ bool StopLogging() { |
+ return RunNoArgsFunction<WebrtcLoggingPrivateStopFunction>(false); |
+ } |
+ |
+ bool DiscardLog() { |
+ return RunNoArgsFunction<WebrtcLoggingPrivateDiscardFunction>(false); |
+ } |
+ |
+ bool UploadLog() { |
+ return RunNoArgsFunction<WebrtcLoggingPrivateUploadFunction>(true); |
+ } |
+ |
+ bool SetMetaData(const base::ListValue& data) { |
+ return RunFunction<WebrtcLoggingPrivateSetMetaDataFunction>(data, false); |
+ } |
+ |
+ bool StartRtpDump(bool incoming, bool outgoing) { |
+ base::ListValue params; |
+ AppendTabIdAndUrl(¶ms); |
+ params.AppendBoolean(incoming); |
+ params.AppendBoolean(outgoing); |
+ return RunFunction<WebrtcLoggingPrivateStartRtpDumpFunction>(params, false); |
+ } |
+ |
+ bool StopRtpDump(bool incoming, bool outgoing) { |
+ base::ListValue params; |
+ AppendTabIdAndUrl(¶ms); |
+ params.AppendBoolean(incoming); |
+ params.AppendBoolean(outgoing); |
+ return RunFunction<WebrtcLoggingPrivateStopRtpDumpFunction>(params, false); |
+ } |
+ |
+ bool StoreLog(const std::string& log_id) { |
+ base::ListValue params; |
+ AppendTabIdAndUrl(¶ms); |
+ params.AppendString(log_id); |
+ return RunFunction<WebrtcLoggingPrivateStoreFunction>(params, false); |
+ } |
+ |
+ bool UploadStoredLog(const std::string& log_id) { |
+ base::ListValue params; |
+ AppendTabIdAndUrl(¶ms); |
+ params.AppendString(log_id); |
+ return RunFunction<WebrtcLoggingPrivateUploadStoredFunction>(params, true); |
+ } |
+ |
+ private: |
+ scoped_refptr<Extension> extension_; |
+}; |
- // Stop |
+// Helper class to temporarily tell the uploader to save the multipart buffer to |
+// a test string instead of uploading. |
+class ScopedOverrideUploadBuffer { |
+ public: |
+ ScopedOverrideUploadBuffer() { |
+ g_browser_process->webrtc_log_uploader()-> |
+ OverrideUploadWithBufferForTesting(&multipart_); |
+ } |
- scoped_refptr<extensions::WebrtcLoggingPrivateStopFunction> |
- stop_function(new extensions::WebrtcLoggingPrivateStopFunction()); |
- stop_function->set_extension(empty_extension.get()); |
- stop_function->set_has_callback(true); |
+ ~ScopedOverrideUploadBuffer() { |
+ g_browser_process->webrtc_log_uploader()-> |
+ OverrideUploadWithBufferForTesting(nullptr); |
+ } |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- stop_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
+ const std::string& multipart() const { return multipart_; } |
- // Discard |
+ private: |
+ std::string multipart_; |
+}; |
- scoped_refptr<extensions::WebrtcLoggingPrivateDiscardFunction> |
- discard_function(new extensions::WebrtcLoggingPrivateDiscardFunction()); |
- discard_function->set_extension(empty_extension.get()); |
- discard_function->set_has_callback(true); |
+} // namespace |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- discard_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopDiscard) { |
+ ScopedOverrideUploadBuffer buffer_override; |
- ASSERT_TRUE(multipart.empty()); |
+ EXPECT_TRUE(StartLogging()); |
+ EXPECT_TRUE(StopLogging()); |
+ EXPECT_TRUE(DiscardLog()); |
- g_browser_process->webrtc_log_uploader()->OverrideUploadWithBufferForTesting( |
- NULL); |
+ EXPECT_TRUE(buffer_override.multipart().empty()); |
} |
// Tests WebRTC diagnostic logging. Sets up the browser to save the multipart |
@@ -125,91 +229,19 @@ IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopDiscard) { |
// ------**--yradnuoBgoLtrapitluMklaTelgooG--**------ |
// |
IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopUpload) { |
- scoped_refptr<Extension> empty_extension( |
- extensions::test_util::CreateEmptyExtension()); |
+ ScopedOverrideUploadBuffer buffer_override; |
- // Tell the uploader to save the multipart to a buffer instead of uploading. |
- std::string multipart; |
- g_browser_process->webrtc_log_uploader()-> |
- OverrideUploadWithBufferForTesting(&multipart); |
- |
- // SetMetaData. |
- |
- scoped_refptr<extensions::WebrtcLoggingPrivateSetMetaDataFunction> |
- set_meta_data_function( |
- new extensions::WebrtcLoggingPrivateSetMetaDataFunction()); |
- set_meta_data_function->set_extension(empty_extension.get()); |
- set_meta_data_function->set_has_callback(true); |
- |
- content::WebContents* contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
base::ListValue parameters; |
- base::DictionaryValue* request_info = new base::DictionaryValue(); |
- request_info->SetInteger("tabId", |
- extensions::ExtensionTabUtil::GetTabId(contents)); |
- parameters.Append(request_info); |
- parameters.AppendString(contents->GetURL().GetOrigin().spec()); |
- base::DictionaryValue* meta_data_entry = new base::DictionaryValue(); |
- meta_data_entry->SetString("key", "app_session_id"); |
- meta_data_entry->SetString("value", kTestLoggingSessionId); |
- base::ListValue* meta_data = new base::ListValue(); |
- meta_data->Append(meta_data_entry); |
- meta_data_entry = new base::DictionaryValue(); |
- meta_data_entry->SetString("key", "url"); |
- meta_data_entry->SetString("value", kTestLoggingUrl); |
- meta_data->Append(meta_data_entry); |
- parameters.Append(meta_data); |
- |
- std::string parameter_string; |
- base::JSONWriter::Write(¶meters, ¶meter_string); |
- |
- // TODO(grunell): MaybeRunFunction is suitable for those calls not returning |
- // anything. |
- scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
- set_meta_data_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
- |
- // Start. |
- |
- scoped_refptr<extensions::WebrtcLoggingPrivateStartFunction> |
- start_function(new extensions::WebrtcLoggingPrivateStartFunction()); |
- start_function->set_extension(empty_extension.get()); |
- start_function->set_has_callback(true); |
- |
- parameters.Clear(); |
- request_info = new base::DictionaryValue(); |
- request_info->SetInteger("tabId", |
- extensions::ExtensionTabUtil::GetTabId(contents)); |
- parameters.Append(request_info); |
- parameters.AppendString(contents->GetURL().GetOrigin().spec()); |
- base::JSONWriter::Write(¶meters, ¶meter_string); |
- |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- start_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
- |
- // Stop. |
+ AppendTabIdAndUrl(¶meters); |
+ InitializeTestMetaData(¶meters); |
- scoped_refptr<extensions::WebrtcLoggingPrivateStopFunction> |
- stop_function(new extensions::WebrtcLoggingPrivateStopFunction()); |
- stop_function->set_extension(empty_extension.get()); |
- stop_function->set_has_callback(true); |
+ SetMetaData(parameters); |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- stop_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
- |
- // Upload. |
- |
- scoped_refptr<extensions::WebrtcLoggingPrivateUploadFunction> |
- upload_function(new extensions::WebrtcLoggingPrivateUploadFunction()); |
- upload_function->set_extension(empty_extension.get()); |
- upload_function->set_has_callback(true); |
- |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- upload_function.get(), parameter_string, browser())); |
- ASSERT_TRUE(result.get()); |
+ StartLogging(); |
+ StopLogging(); |
+ UploadLog(); |
+ std::string multipart = buffer_override.multipart(); |
ASSERT_FALSE(multipart.empty()); |
// Check multipart data. |
@@ -284,46 +316,80 @@ IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopUpload) { |
final_delimiter += "--"; |
EXPECT_STREQ(final_delimiter.c_str(), multipart_lines[29].c_str()); |
EXPECT_TRUE(multipart_lines[30].empty()); |
- |
- g_browser_process->webrtc_log_uploader()->OverrideUploadWithBufferForTesting( |
- NULL); |
} |
IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopRtpDump) { |
- scoped_refptr<Extension> empty_extension( |
- extensions::test_util::CreateEmptyExtension()); |
- |
- // Start RTP dump. |
- scoped_refptr<extensions::WebrtcLoggingPrivateStartRtpDumpFunction> |
- start_function( |
- new extensions::WebrtcLoggingPrivateStartRtpDumpFunction()); |
- start_function->set_extension(empty_extension.get()); |
- start_function->set_has_callback(true); |
- |
- content::WebContents* contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
+ // TODO(tommi): As is, these tests are missing verification of the actual |
+ // RTP dump data. We should fix that, e.g. use SetDumpWriterForTesting. |
+ StartRtpDump(true, true); |
+ StopRtpDump(true, true); |
+} |
+ |
+// Tests trying to store a log when a log is not being captured. |
+// We should get a failure callback in this case. |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStoreWithoutLog) { |
base::ListValue parameters; |
- base::DictionaryValue* request_info = new base::DictionaryValue(); |
- request_info->SetInteger("tabId", |
- extensions::ExtensionTabUtil::GetTabId(contents)); |
- parameters.Append(request_info); |
- parameters.AppendString(contents->GetURL().GetOrigin().spec()); |
- parameters.AppendBoolean(true); |
- parameters.AppendBoolean(true); |
- std::string parameter_string; |
- base::JSONWriter::Write(¶meters, ¶meter_string); |
+ AppendTabIdAndUrl(¶meters); |
+ parameters.AppendString("MyLogId"); |
+ scoped_refptr<WebrtcLoggingPrivateStoreFunction> store( |
+ CreateFunction<WebrtcLoggingPrivateStoreFunction>()); |
+ const std::string error = utils::RunFunctionAndReturnError( |
+ store.get(), ParamsToString(parameters), browser()); |
+ ASSERT_FALSE(error.empty()); |
+} |
- scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
- start_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, TestStartStopStore) { |
+ ASSERT_TRUE(StartLogging()); |
+ ASSERT_TRUE(StopLogging()); |
+ EXPECT_TRUE(StoreLog("MyLogID")); |
+} |
- // Stop RTP dump. |
- scoped_refptr<extensions::WebrtcLoggingPrivateStopRtpDumpFunction> |
- stop_function(new extensions::WebrtcLoggingPrivateStopRtpDumpFunction()); |
- stop_function->set_extension(empty_extension.get()); |
- stop_function->set_has_callback(true); |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, |
+ TestStartStopStoreAndUpload) { |
+ static const char kLogId[] = "TestStartStopStoreAndUpload"; |
+ ASSERT_TRUE(StartLogging()); |
+ ASSERT_TRUE(StopLogging()); |
+ ASSERT_TRUE(StoreLog(kLogId)); |
+ |
+ ScopedOverrideUploadBuffer buffer_override; |
+ EXPECT_TRUE(UploadStoredLog(kLogId)); |
+ EXPECT_NE(std::string::npos, |
+ buffer_override.multipart().find("filename=\"webrtc_log.gz\"")); |
+} |
- result.reset(utils::RunFunctionAndReturnSingleResult( |
- stop_function.get(), parameter_string, browser())); |
- ASSERT_FALSE(result.get()); |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, |
+ TestStartStopStoreAndUploadWithRtp) { |
+ static const char kLogId[] = "TestStartStopStoreAndUploadWithRtp"; |
+ ASSERT_TRUE(StartLogging()); |
+ ASSERT_TRUE(StartRtpDump(true, true)); |
+ ASSERT_TRUE(StopLogging()); |
+ ASSERT_TRUE(StopRtpDump(true, true)); |
+ ASSERT_TRUE(StoreLog(kLogId)); |
+ |
+ ScopedOverrideUploadBuffer buffer_override; |
+ EXPECT_TRUE(UploadStoredLog(kLogId)); |
+ EXPECT_NE(std::string::npos, |
+ buffer_override.multipart().find("filename=\"webrtc_log.gz\"")); |
} |
+ |
+IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiTest, |
+ TestStartStopStoreAndUploadWithMetaData) { |
+ static const char kLogId[] = "TestStartStopStoreAndUploadWithRtp"; |
+ ASSERT_TRUE(StartLogging()); |
+ |
+ base::ListValue parameters; |
+ AppendTabIdAndUrl(¶meters); |
+ InitializeTestMetaData(¶meters); |
+ SetMetaData(parameters); |
+ |
+ ASSERT_TRUE(StopLogging()); |
+ ASSERT_TRUE(StoreLog(kLogId)); |
+ |
+ ScopedOverrideUploadBuffer buffer_override; |
+ EXPECT_TRUE(UploadStoredLog(kLogId)); |
+ EXPECT_NE(std::string::npos, |
+ buffer_override.multipart().find("filename=\"webrtc_log.gz\"")); |
+ EXPECT_NE(std::string::npos, |
+ buffer_override.multipart().find(kTestLoggingUrl)); |
+} |
+ |