17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <string> 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/files/file.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/logging.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/string_number_conversions.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/string_split.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/time/time.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/media/webrtc_log_uploader.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestTime[] = "time"; 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestReportId[] = "report-id"; 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestLocalId[] = "local-id"; 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass WebRtcLogUploaderTest : public testing::Test { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebRtcLogUploaderTest() {} 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool VerifyNumberOfLines(int expected_lines) { 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> lines = GetLinesFromListFile(); 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(expected_lines, static_cast<int>(lines.size())); 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return expected_lines == static_cast<int>(lines.size()); 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool VerifyLastLineHasAllInfo() { 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string last_line = GetLastLineFromListFile(); 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (last_line.empty()) 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> line_parts; 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::SplitString(last_line, ',', &line_parts); 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(3u, line_parts.size()); 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (3u != line_parts.size()) 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The time (line_parts[0]) is the time when the info was written to the 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // file which we don't know, so just verify that it's not empty. 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(line_parts[0].empty()); 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_STREQ(kTestReportId, line_parts[1].c_str()); 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_STREQ(kTestLocalId, line_parts[2].c_str()); 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return true; 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool VerifyLastLineHasLocalIdOnly() { 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string last_line = GetLastLineFromListFile(); 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (last_line.empty()) 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> line_parts; 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::SplitString(last_line, ',', &line_parts); 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(3u, line_parts.size()); 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (3u != line_parts.size()) 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(line_parts[0].empty()); 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(line_parts[1].empty()); 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_STREQ(kTestLocalId, line_parts[2].c_str()); 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return true; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool VerifyLastLineHasUploadTimeAndIdOnly() { 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string last_line = GetLastLineFromListFile(); 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (last_line.empty()) 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string> line_parts; 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::SplitString(last_line, ',', &line_parts); 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(3u, line_parts.size()); 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (3u != line_parts.size()) 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(line_parts[0].empty()); 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_STREQ(kTestReportId, line_parts[1].c_str()); 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(line_parts[2].empty()); 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool AddLinesToTestFile(int number_of_lines) { 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::File test_list_file(test_list_path_, 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::File::FLAG_OPEN | base::File::FLAG_APPEND); 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(test_list_file.IsValid()); 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!test_list_file.IsValid()) 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (int i = 0; i < number_of_lines; ++i) { 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(static_cast<int>(sizeof(kTestTime)) - 1, 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_list_file.WriteAtCurrentPos(kTestTime, 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sizeof(kTestTime) - 1)); 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(1, test_list_file.WriteAtCurrentPos(",", 1)); 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(static_cast<int>(sizeof(kTestReportId)) - 1, 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_list_file.WriteAtCurrentPos(kTestReportId, 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sizeof(kTestReportId) - 1)); 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(1, test_list_file.WriteAtCurrentPos(",", 1)); 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(static_cast<int>(sizeof(kTestLocalId)) - 1, 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_list_file.WriteAtCurrentPos(kTestLocalId, 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sizeof(kTestLocalId) - 1)); 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(1, test_list_file.WriteAtCurrentPos("\n", 1)); 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> GetLinesFromListFile() { 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string contents; 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int read = base::ReadFileToString(test_list_path_, &contents); 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_GT(read, 0); 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (read == 0) 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return std::vector<std::string>(); 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Since every line should end with '\n', the last line should be empty. So 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // we expect at least two lines including the final empty. Remove the empty 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // line before returning. 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> lines; 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::SplitString(contents, '\n', &lines); 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_GT(lines.size(), 1u); 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (lines.size() < 2) 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return std::vector<std::string>(); 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(lines[lines.size() - 1].empty()); 118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!lines[lines.size() - 1].empty()) 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return std::vector<std::string>(); 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch lines.pop_back(); 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return lines; 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string GetLastLineFromListFile() { 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> lines = GetLinesFromListFile(); 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_GT(lines.size(), 0u); 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (lines.empty()) 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return std::string(); 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return lines[lines.size() - 1]; 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void VerifyRtpDumpInMultipart(const std::string& post_data, 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& dump_name, 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& dump_content) { 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<std::string> lines; 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::SplitStringUsingSubstr(post_data, "\r\n", &lines); 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string name_line = "Content-Disposition: form-data; name=\""; 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) name_line.append(dump_name); 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) name_line.append("\""); 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) name_line.append("; filename=\""); 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) name_line.append(dump_name); 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) name_line.append(".gz\""); 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t i = 0; 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (; i < lines.size(); ++i) { 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (lines[i] == name_line) 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) break; 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The RTP dump takes 4 lines: content-disposition, content-type, empty 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // line, dump content. 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_LT(i, lines.size() - 3); 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("Content-Type: application/gzip", lines[i + 1]); 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("", lines[i + 2]); 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(dump_content, lines[i + 3]); 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath test_list_path_; 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 163effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(WebRtcLogUploaderTest, AddLocallyStoredLogInfoToUploadListFile) { 1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Get a temporary filename. We don't want the file to exist to begin with 1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // since that's the normal use case, hence the delete. 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kTestLocalId); 17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kTestLocalId); 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(2)); 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int expected_line_limit = 50; 1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(AddLinesToTestFile(expected_line_limit - 2)); 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasAllInfo()); 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kTestLocalId); 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(AddLinesToTestFile(10)); 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(60)); 189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasAllInfo()); 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kTestLocalId); 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(expected_line_limit)); 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->StartShutdown(); 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 199effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(WebRtcLogUploaderTest, AddUploadedLogInfoToUploadListFile) { 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Get a temporary filename. We don't want the file to exist to begin with 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // since that's the normal use case, hence the delete. 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); 203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddLocallyStoredLogInfoToUploadListFile(test_list_path_, 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kTestLocalId); 208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(1)); 209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasLocalIdOnly()); 210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddUploadedLogInfoToUploadListFile( 212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_list_path_, kTestLocalId, kTestReportId); 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(1)); 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasAllInfo()); 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Use a local ID that should not be found in the list. 21746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->AddUploadedLogInfoToUploadListFile( 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_list_path_, "dummy id", kTestReportId); 219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyNumberOfLines(2)); 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(VerifyLastLineHasUploadTimeAndIdOnly()); 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 22246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->StartShutdown(); 22346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(WebRtcLogUploaderTest, AddRtpDumpsToPostedData) { 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ScopedTempDir temp_dir; 22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 22846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<WebRtcLogUploader> webrtc_log_uploader(new WebRtcLogUploader()); 23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string post_data; 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->OverrideUploadWithBufferForTesting(&post_data); 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Create the fake dump files. 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::FilePath incoming_dump = temp_dir.path().AppendASCII("recv"); 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::FilePath outgoing_dump = temp_dir.path().AppendASCII("send"); 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string incoming_dump_content = "dummy incoming"; 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string outgoing_dump_content = "dummy outgoing"; 23946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WriteFile(incoming_dump, 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &incoming_dump_content[0], 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) incoming_dump_content.size()); 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WriteFile(outgoing_dump, 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &outgoing_dump_content[0], 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) outgoing_dump_content.size()); 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebRtcLogUploadDoneData upload_done_data; 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) upload_done_data.log_path = temp_dir.path().AppendASCII("log"); 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) upload_done_data.incoming_rtp_dump = incoming_dump; 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) upload_done_data.outgoing_rtp_dump = outgoing_dump; 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const size_t log_length = 100; 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<unsigned char[]> log(new unsigned char[log_length]); 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) memset(log.get(), 0, log_length); 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->LoggingStoppedDoUpload( 25846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) log.Pass(), 25946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) log_length, 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::map<std::string, std::string>(), 26146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) upload_done_data); 26246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) VerifyRtpDumpInMultipart(post_data, "rtpdump_recv", incoming_dump_content); 26446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) VerifyRtpDumpInMultipart(post_data, "rtpdump_send", outgoing_dump_content); 26546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webrtc_log_uploader->StartShutdown(); 2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 268