| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CRASH_REPORTER_TEST_UTIL_H_ |
| #define CRASH_REPORTER_TEST_UTIL_H_ |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include <base/files/file_path.h> |
| #include <base/strings/string_piece.h> |
| #include <base/time/clock.h> |
| #include <base/time/time.h> |
| |
| #include <session_manager/dbus-proxy-mocks.h> |
| |
| namespace test_util { |
| |
| constexpr char kFakeClientId[] = "00112233445566778899aabbccddeeff"; |
| |
| // A Clock that advances 10 seconds (by default) on each call, used in tests and |
| // fuzzers. Unlike a MockClock, it will not fail the test regardless of how many |
| // times it is or isn't called, and it always eventually reaches any desired |
| // time. In particular, having an advancing clock in the crash sender code is |
| // useful because if AcquireLockFileOrDie can't get the lock, the test will |
| // eventually fail instead of going into an infinite loop. |
| class AdvancingClock : public base::Clock { |
| public: |
| // Start clock at GetDefaultTime() |
| AdvancingClock(); |
| // Start clock at GetDefaultTime(). Each call to Now() will advance the |
| // clock by |advance_amount|. |
| explicit AdvancingClock(base::TimeDelta advance_amount); |
| |
| base::Time Now() const override; |
| |
| private: |
| mutable base::Time time_; |
| const base::TimeDelta advance_amount_; |
| }; |
| |
| void FakeSleep(std::vector<base::TimeDelta>* sleep_times, |
| base::TimeDelta duration); |
| |
| bool CreateClientIdFile(); |
| |
| // Get an assumed "now" for things that mocks out the current time. Always |
| // returns 2018-04-20 13:53. |
| base::Time GetDefaultTime(); |
| |
| // Creates a file at |file_path| with |content|, with parent directories. |
| // Returns true on success. If you want the test function to stop when the file |
| // creation failed, wrap this function with ASSERT_TRUE(). |
| bool CreateFile(const base::FilePath& file_path, base::StringPiece content); |
| |
| // Configures |mock| so that RetrieveActiveSessions() returns |sessions|. |
| void SetActiveSessions(org::chromium::SessionManagerInterfaceProxyMock* mock, |
| const std::map<std::string, std::string>& sessions); |
| |
| // Returns true if at least one file in this directory matches the pattern. |
| // found_file_path is not assigned if found_file_path is nullptr. |
| // Only the first found path is stored into found_file_path. |
| bool DirectoryHasFileWithPattern(const base::FilePath& directory, |
| const std::string& pattern, |
| base::FilePath* found_file_path); |
| |
| // Return path to an input files used by unit tests. |
| base::FilePath GetTestDataPath(const std::string& name); |
| |
| // Helper function for calling base::TouchFile() concisely for tests. |
| bool TouchFileHelper(const base::FilePath& file_name, base::Time modified_time); |
| |
| } // namespace test_util |
| |
| #endif // CRASH_REPORTER_TEST_UTIL_H_ |