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 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/file_util.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/logging.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/platform_file.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/string_number_conversions.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/string_split.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/time/time.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/media/webrtc_log_uploader.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kTestReportId[] = "123456789"; 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kTestTime[] = "987654321"; 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass WebRtcLogUploaderTest : public testing::Test { 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebRtcLogUploaderTest() {} 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool VerifyNumberOfLinesAndContentsOfLastLine(int expected_lines) { 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string contents; 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int read = base::ReadFileToString(test_list_path_, &contents); 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_GT(read, 0); 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (read <= 0) 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Verify expected number of lines. Since every line should end with '\n', 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // there should be an additional empty line after splitting. 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string> lines; 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SplitString(contents, '\n', &lines); 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_lines + 1, static_cast<int>(lines.size())); 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (expected_lines + 1 != static_cast<int>(lines.size())) 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(lines[expected_lines].empty()); 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Verify the contents of the last line. The time (line_parts[0]) is the 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // time when the info was written to the file which we don't know, so just 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // verify that it's not empty. 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string> line_parts; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SplitString(lines[expected_lines - 1], ',', &line_parts); 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(2u, line_parts.size()); 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (2u != line_parts.size()) 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(line_parts[0].empty()); 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_STREQ(kTestReportId, line_parts[1].c_str()); 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool AddLinesToTestFile(int number_of_lines) { 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int flags = base::PLATFORM_FILE_OPEN | 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::PLATFORM_FILE_APPEND; 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::PlatformFileError error = base::PLATFORM_FILE_OK; 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::PlatformFile test_list_file = 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::CreatePlatformFile(test_list_path_, flags, NULL, &error); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(base::PLATFORM_FILE_OK, error); 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_NE(base::kInvalidPlatformFileValue, test_list_file); 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (base::PLATFORM_FILE_OK != error || 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::kInvalidPlatformFileValue == test_list_file) { 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (int i = 0; i < number_of_lines; ++i) { 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(static_cast<int>(sizeof(kTestTime)) - 1, 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::WritePlatformFileAtCurrentPos(test_list_file, 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kTestTime, 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sizeof(kTestTime) - 1)); 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(1, base::WritePlatformFileAtCurrentPos(test_list_file, ",", 1)); 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(static_cast<int>(sizeof(kTestReportId)) - 1, 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::WritePlatformFileAtCurrentPos(test_list_file, 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kTestReportId, 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sizeof(kTestReportId) - 1)); 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(1, base::WritePlatformFileAtCurrentPos(test_list_file, 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "\n", 1)); 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::ClosePlatformFile(test_list_file)); 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return true; 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath test_list_path_; 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(WebRtcLogUploaderTest, AddUploadedLogInfoToUploadListFile) { 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Get a temporary filename. We don't want the file to exist to begin with 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // since that's the normal use case, hence the delete. 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_)); 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::DeleteFile(test_list_path_, false)); 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_( 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new WebRtcLogUploader()); 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_, 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kTestReportId); 988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_, 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kTestReportId); 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(2)); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int expected_line_limit = 50; 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(AddLinesToTestFile(expected_line_limit - 2)); 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit)); 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_, 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kTestReportId); 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit)); 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(AddLinesToTestFile(10)); 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(60)); 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_, 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kTestReportId); 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit)); 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 117