• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include <string>
6 
7 #include "base/file_util.h"
8 #include "base/files/file_path.h"
9 #include "base/logging.h"
10 #include "base/platform_file.h"
11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_split.h"
13 #include "base/time/time.h"
14 #include "chrome/browser/media/webrtc_log_uploader.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 
17 const char kTestReportId[] = "123456789";
18 const char kTestTime[] = "987654321";
19 
20 class WebRtcLogUploaderTest : public testing::Test {
21  public:
WebRtcLogUploaderTest()22   WebRtcLogUploaderTest() {}
23 
VerifyNumberOfLinesAndContentsOfLastLine(int expected_lines)24   bool VerifyNumberOfLinesAndContentsOfLastLine(int expected_lines) {
25     std::string contents;
26     int read = base::ReadFileToString(test_list_path_, &contents);
27     EXPECT_GT(read, 0);
28     if (read <= 0)
29       return false;
30 
31     // Verify expected number of lines. Since every line should end with '\n',
32     // there should be an additional empty line after splitting.
33     std::vector<std::string> lines;
34     base::SplitString(contents, '\n', &lines);
35     EXPECT_EQ(expected_lines + 1, static_cast<int>(lines.size()));
36     if (expected_lines + 1 != static_cast<int>(lines.size()))
37       return false;
38     EXPECT_TRUE(lines[expected_lines].empty());
39 
40     // Verify the contents of the last line. The time (line_parts[0]) is the
41     // time when the info was written to the file which we don't know, so just
42     // verify that it's not empty.
43     std::vector<std::string> line_parts;
44     base::SplitString(lines[expected_lines - 1], ',', &line_parts);
45     EXPECT_EQ(2u, line_parts.size());
46     if (2u != line_parts.size())
47       return false;
48     EXPECT_FALSE(line_parts[0].empty());
49     EXPECT_STREQ(kTestReportId, line_parts[1].c_str());
50 
51     return true;
52   }
53 
AddLinesToTestFile(int number_of_lines)54   bool AddLinesToTestFile(int number_of_lines) {
55     int flags = base::PLATFORM_FILE_OPEN |
56                 base::PLATFORM_FILE_APPEND;
57     base::PlatformFileError error = base::PLATFORM_FILE_OK;
58     base::PlatformFile test_list_file =
59         base::CreatePlatformFile(test_list_path_, flags, NULL, &error);
60     EXPECT_EQ(base::PLATFORM_FILE_OK, error);
61     EXPECT_NE(base::kInvalidPlatformFileValue, test_list_file);
62     if (base::PLATFORM_FILE_OK != error ||
63         base::kInvalidPlatformFileValue == test_list_file) {
64       return false;
65     }
66 
67     for (int i = 0; i < number_of_lines; ++i) {
68       EXPECT_EQ(static_cast<int>(sizeof(kTestTime)) - 1,
69                 base::WritePlatformFileAtCurrentPos(test_list_file,
70                                                     kTestTime,
71                                                     sizeof(kTestTime) - 1));
72       EXPECT_EQ(1, base::WritePlatformFileAtCurrentPos(test_list_file, ",", 1));
73       EXPECT_EQ(static_cast<int>(sizeof(kTestReportId)) - 1,
74                 base::WritePlatformFileAtCurrentPos(test_list_file,
75                                                     kTestReportId,
76                                                     sizeof(kTestReportId) - 1));
77       EXPECT_EQ(1, base::WritePlatformFileAtCurrentPos(test_list_file,
78                                                        "\n", 1));
79     }
80     EXPECT_TRUE(base::ClosePlatformFile(test_list_file));
81 
82     return true;
83   }
84 
85   base::FilePath test_list_path_;
86 };
87 
TEST_F(WebRtcLogUploaderTest,AddUploadedLogInfoToUploadListFile)88 TEST_F(WebRtcLogUploaderTest, AddUploadedLogInfoToUploadListFile) {
89   // Get a temporary filename. We don't want the file to exist to begin with
90   // since that's the normal use case, hence the delete.
91   ASSERT_TRUE(base::CreateTemporaryFile(&test_list_path_));
92   EXPECT_TRUE(base::DeleteFile(test_list_path_, false));
93   scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_(
94       new WebRtcLogUploader());
95 
96   webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_,
97                                                            kTestReportId);
98   webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_,
99                                                            kTestReportId);
100   ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(2));
101 
102   const int expected_line_limit = 50;
103   ASSERT_TRUE(AddLinesToTestFile(expected_line_limit - 2));
104   ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit));
105 
106   webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_,
107                                                            kTestReportId);
108   ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit));
109 
110   ASSERT_TRUE(AddLinesToTestFile(10));
111   ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(60));
112 
113   webrtc_log_uploader_->AddUploadedLogInfoToUploadListFile(test_list_path_,
114                                                            kTestReportId);
115   ASSERT_TRUE(VerifyNumberOfLinesAndContentsOfLastLine(expected_line_limit));
116 }
117