| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/files/scoped_temp_dir.h" | |
| 11 #include "base/logging.h" | 10 #include "base/logging.h" |
| 12 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/string_split.h" | 12 #include "base/strings/string_split.h" |
| 14 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 15 #include "chrome/browser/media/webrtc_log_uploader.h" | 14 #include "chrome/browser/media/webrtc_log_uploader.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 16 |
| 18 const char kTestTime[] = "time"; | 17 const char kTestTime[] = "time"; |
| 19 const char kTestReportId[] = "report-id"; | 18 const char kTestReportId[] = "report-id"; |
| 20 const char kTestLocalId[] = "local-id"; | 19 const char kTestLocalId[] = "local-id"; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 } | 121 } |
| 123 | 122 |
| 124 std::string GetLastLineFromListFile() { | 123 std::string GetLastLineFromListFile() { |
| 125 std::vector<std::string> lines = GetLinesFromListFile(); | 124 std::vector<std::string> lines = GetLinesFromListFile(); |
| 126 EXPECT_GT(lines.size(), 0u); | 125 EXPECT_GT(lines.size(), 0u); |
| 127 if (lines.empty()) | 126 if (lines.empty()) |
| 128 return std::string(); | 127 return std::string(); |
| 129 return lines[lines.size() - 1]; | 128 return lines[lines.size() - 1]; |
| 130 } | 129 } |
| 131 | 130 |
| 132 void VerifyRtpDumpInMultipart(const std::string& post_data, | |
| 133 const std::string& dump_name, | |
| 134 const std::string& dump_content) { | |
| 135 std::vector<std::string> lines; | |
| 136 base::SplitStringUsingSubstr(post_data, "\r\n", &lines); | |
| 137 | |
| 138 std::string name_line = "Content-Disposition: form-data; name=\""; | |
| 139 name_line.append(dump_name); | |
| 140 name_line.append("\""); | |
| 141 name_line.append("; filename=\""); | |
| 142 name_line.append(dump_name); | |
| 143 name_line.append(".gz\""); | |
| 144 | |
| 145 size_t i = 0; | |
| 146 for (; i < lines.size(); ++i) { | |
| 147 if (lines[i] == name_line) | |
| 148 break; | |
| 149 } | |
| 150 | |
| 151 // The RTP dump takes 4 lines: content-disposition, content-type, empty | |
| 152 // line, dump content. | |
| 153 EXPECT_LT(i, lines.size() - 3); | |
| 154 | |
| 155 EXPECT_EQ("Content-Type: application/gzip", lines[i + 1]); | |
| 156 EXPECT_EQ("", lines[i + 2]); | |
| 157 EXPECT_EQ(dump_content, lines[i + 3]); | |
| 158 } | |
| 159 | |
| 160 base::FilePath test_list_path_; | 131 base::FilePath test_list_path_; |
| 161 }; | 132 }; |
| 162 | 133 |
| 163 TEST_F(WebRtcLogUploaderTest, AddLocallyStoredLogInfoToUploadListFile) { | 134 TEST_F(WebRtcLogUploaderTest, AddLocallyStoredLogInfoToUploadListFile) { |
| 164 // Get a temporary filename. We don't want the file to exist to begin with | 135 // Get a temporary filename. We don't want the file to exist to begin with |
| 165 // since that's the normal use case, hence the delete. | 136 // since that's the normal use case, hence the delete. |
| 166 ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); | 137 ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); |
| 167 EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); | 138 EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); |
| 168 scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); | 139 scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_( |
| 140 new WebRtcLogUploader()); |
| 169 | 141 |
| 170 webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, | 142 webrtc_log_uploader_->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, |
| 171 kTestLocalId); | 143 kTestLocalId); |
| 172 webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, | 144 webrtc_log_uploader_->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, |
| 173 kTestLocalId); | 145 kTestLocalId); |
| 174 ASSERT_TRUE(VerifyNumberOfLines(2)); | 146 ASSERT_TRUE(VerifyNumberOfLines(2)); |
| 175 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); | 147 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); |
| 176 | 148 |
| 177 const int expected_line_limit = 50; | 149 const int expected_line_limit = 50; |
| 178 ASSERT_TRUE(AddLinesToTestFile(expected_line_limit - 2)); | 150 ASSERT_TRUE(AddLinesToTestFile(expected_line_limit - 2)); |
| 179 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); | 151 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); |
| 180 ASSERT_TRUE(VerifyLastLineHasAllInfo()); | 152 ASSERT_TRUE(VerifyLastLineHasAllInfo()); |
| 181 | 153 |
| 182 webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, | 154 webrtc_log_uploader_->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, |
| 183 kTestLocalId); | 155 kTestLocalId); |
| 184 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); | 156 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); |
| 185 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); | 157 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); |
| 186 | 158 |
| 187 ASSERT_TRUE(AddLinesToTestFile(10)); | 159 ASSERT_TRUE(AddLinesToTestFile(10)); |
| 188 ASSERT_TRUE(VerifyNumberOfLines(60)); | 160 ASSERT_TRUE(VerifyNumberOfLines(60)); |
| 189 ASSERT_TRUE(VerifyLastLineHasAllInfo()); | 161 ASSERT_TRUE(VerifyLastLineHasAllInfo()); |
| 190 | 162 |
| 191 webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, | 163 webrtc_log_uploader_->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, |
| 192 kTestLocalId); | 164 kTestLocalId); |
| 193 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); | 165 ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); |
| 194 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); | 166 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); |
| 195 | 167 |
| 196 webrtc_log_uploader->StartShutdown(); | 168 webrtc_log_uploader_->StartShutdown(); |
| 197 } | 169 } |
| 198 | 170 |
| 199 TEST_F(WebRtcLogUploaderTest, AddUploadedLogInfoToUploadListFile) { | 171 TEST_F(WebRtcLogUploaderTest, AddUploadedLogInfoToUploadListFile) { |
| 200 // Get a temporary filename. We don't want the file to exist to begin with | 172 // Get a temporary filename. We don't want the file to exist to begin with |
| 201 // since that's the normal use case, hence the delete. | 173 // since that's the normal use case, hence the delete. |
| 202 ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); | 174 ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); |
| 203 EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); | 175 EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); |
| 204 scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); | 176 scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_(new WebRtcLogUploader()); |
| 205 | 177 |
| 206 webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, | 178 webrtc_log_uploader_->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, |
| 207 kTestLocalId); | 179 kTestLocalId); |
| 208 ASSERT_TRUE(VerifyNumberOfLines(1)); | 180 ASSERT_TRUE(VerifyNumberOfLines(1)); |
| 209 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); | 181 ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); |
| 210 | 182 |
| 211 webrtc_log_uploader->AddUploadedLogInfoToUploadListFile( | 183 webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile( |
| 212 test_list_path_, kTestLocalId, kTestReportId); | 184 test_list_path_, kTestLocalId, kTestReportId); |
| 213 ASSERT_TRUE(VerifyNumberOfLines(1)); | 185 ASSERT_TRUE(VerifyNumberOfLines(1)); |
| 214 ASSERT_TRUE(VerifyLastLineHasAllInfo()); | 186 ASSERT_TRUE(VerifyLastLineHasAllInfo()); |
| 215 | 187 |
| 216 // Use a local ID that should not be found in the list. | 188 // Use a local ID that should not be found in the list. |
| 217 webrtc_log_uploader->AddUploadedLogInfoToUploadListFile( | 189 webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile( |
| 218 test_list_path_, "dummy id", kTestReportId); | 190 test_list_path_, "dummy id", kTestReportId); |
| 219 ASSERT_TRUE(VerifyNumberOfLines(2)); | 191 ASSERT_TRUE(VerifyNumberOfLines(2)); |
| 220 ASSERT_TRUE(VerifyLastLineHasUploadTimeAndIdOnly()); | 192 ASSERT_TRUE(VerifyLastLineHasUploadTimeAndIdOnly()); |
| 221 | 193 |
| 222 webrtc_log_uploader->StartShutdown(); | 194 webrtc_log_uploader_->StartShutdown(); |
| 223 } | 195 } |
| 224 | |
| 225 TEST_F(WebRtcLogUploaderTest, AddRtpDumpsToPostedData) { | |
| 226 base::ScopedTempDir temp_dir; | |
| 227 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| 228 | |
| 229 scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); | |
| 230 | |
| 231 std::string post_data; | |
| 232 webrtc_log_uploader->OverrideUploadWithBufferForTesting(&post_data); | |
| 233 | |
| 234 // Create the fake dump files. | |
| 235 const base::FilePath incoming_dump = temp_dir.path().AppendASCII("recv"); | |
| 236 const base::FilePath outgoing_dump = temp_dir.path().AppendASCII("send"); | |
| 237 const std::string incoming_dump_content = "dummy incoming"; | |
| 238 const std::string outgoing_dump_content = "dummy outgoing"; | |
| 239 | |
| 240 base::WriteFile(incoming_dump, | |
| 241 &incoming_dump_content[0], | |
| 242 incoming_dump_content.size()); | |
| 243 base::WriteFile(outgoing_dump, | |
| 244 &outgoing_dump_content[0], | |
| 245 outgoing_dump_content.size()); | |
| 246 | |
| 247 WebRtcLogUploadDoneData upload_done_data; | |
| 248 upload_done_data.log_path = temp_dir.path().AppendASCII("log"); | |
| 249 | |
| 250 upload_done_data.incoming_rtp_dump = incoming_dump; | |
| 251 upload_done_data.outgoing_rtp_dump = outgoing_dump; | |
| 252 | |
| 253 const size_t log_length = 100; | |
| 254 scoped_ptr<unsigned char[]> log(new unsigned char[log_length]); | |
| 255 memset(log.get(), 0, log_length); | |
| 256 | |
| 257 webrtc_log_uploader->LoggingStoppedDoUpload( | |
| 258 log.Pass(), | |
| 259 log_length, | |
| 260 std::map<std::string, std::string>(), | |
| 261 upload_done_data); | |
| 262 | |
| 263 VerifyRtpDumpInMultipart(post_data, "rtpdump_recv", incoming_dump_content); | |
| 264 VerifyRtpDumpInMultipart(post_data, "rtpdump_send", outgoing_dump_content); | |
| 265 | |
| 266 webrtc_log_uploader->StartShutdown(); | |
| 267 } | |
| OLD | NEW |