summaryrefslogtreecommitdiff
path: root/chromium/components/feedback/feedback_util_unittest.cc
blob: a5226fc1bca560e9b26afd4965f6e1ee00a88b00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/feedback/feedback_util.h"

#include <string>

#include "base/files/file_util.h"
#include "base/files/scoped_file.h"
#include "base/files/scoped_temp_dir.h"
#include "base/rand_util.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace feedback_util {

// Note: This file is excluded from win build.
// See https://crbug.com/1119560.
class FeedbackUtilTest : public ::testing::Test {
 public:
  void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); }

  base::ScopedTempDir temp_dir_;
};

TEST_F(FeedbackUtilTest, ReadEndOfFileEmpty) {
  std::string read_data("should be erased");

  base::FilePath file_path = temp_dir_.GetPath().Append("test_empty.txt");

  WriteFile(file_path, "", 0);

  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 10, &read_data));
  EXPECT_EQ(0u, read_data.length());
}

TEST_F(FeedbackUtilTest, ReadEndOfFileSmall) {
  const char kTestData[] = "0123456789";  // Length of 10
  std::string read_data;

  base::FilePath file_path = temp_dir_.GetPath().Append("test_small.txt");

  WriteFile(file_path, kTestData, strlen(kTestData));

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 15, &read_data));
  EXPECT_EQ(kTestData, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 10, &read_data));
  EXPECT_EQ(kTestData, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 2, &read_data));
  EXPECT_EQ("89", read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 3, &read_data));
  EXPECT_EQ("789", read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 5, &read_data));
  EXPECT_EQ("56789", read_data);
}

TEST_F(FeedbackUtilTest, ReadEndOfFileWithZeros) {
  const size_t test_size = 10;
  std::string test_data("abcd\0\0\0\0hi", test_size);
  std::string read_data;

  base::FilePath file_path = temp_dir_.GetPath().Append("test_zero.txt");

  WriteFile(file_path, test_data.data(), test_size);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 15, &read_data));
  EXPECT_EQ(test_data, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 10, &read_data));
  EXPECT_EQ(test_data, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 2, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 2, 2), read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 3, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 3, 3), read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 5, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 5, 5), read_data);
}

TEST_F(FeedbackUtilTest, ReadEndOfFileMedium) {
  std::string test_data = base::RandBytesAsString(10000);  // 10KB data
  std::string read_data;

  const size_t test_size = test_data.length();

  base::FilePath file_path = temp_dir_.GetPath().Append("test_med.txt");

  WriteFile(file_path, test_data.data(), test_size);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 15000, &read_data));
  EXPECT_EQ(test_data, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 10000, &read_data));
  EXPECT_EQ(test_data, read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 1000, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 1000, 1000), read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 300, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 300, 300), read_data);

  read_data.clear();
  EXPECT_TRUE(feedback_util::ReadEndOfFile(file_path, 175, &read_data));
  EXPECT_EQ(test_data.substr(test_size - 175, 175), read_data);
}

}  // namespace feedback_util