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