blob: 6988bea5073c186f245868f2488f29771b7cdf4b [file] [log] [blame]
// Copyright 2017 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.
#include <memory>
#include <string>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <base/strings/string_number_conversions.h>
#include <gtest/gtest.h>
#include "thd/source/file_source.h"
namespace thd {
class FileSourceTest : public ::testing::Test {
public:
FileSourceTest() {
CHECK(temp_dir_.CreateUniqueTempDir());
file_ = temp_dir_.path().Append("content");
source_ = std::make_unique<FileSource>(file_);
}
~FileSourceTest() override {}
protected:
// Temporary directory containing a file used for the file source.
base::ScopedTempDir temp_dir_;
// Path to file that source is initialized with, and will read out of.
base::FilePath file_;
// File source object to test.
std::unique_ptr<FileSource> source_;
private:
DISALLOW_COPY_AND_ASSIGN(FileSourceTest);
};
// Test to verify that the value written to the file is read out properly.
// This is indicated by both ReadValue() returninig true, and
// |output_| being set to |input|.
TEST_F(FileSourceTest, Basic) {
const int kInput = 17;
int64_t output = -1;
const std::string kInputStr = std::to_string(kInput);
ASSERT_EQ(kInputStr.length(),
base::WriteFile(file_, kInputStr.c_str(), kInputStr.length()));
ASSERT_TRUE(source_->ReadValue(&output));
EXPECT_EQ(kInput, output);
}
// Test to verify failure on file content being a string that
// cannot be parsed into an integer.
TEST_F(FileSourceTest, FileContentsNotInteger) {
int64_t output = -1;
const std::string kNonsenseInput = "nonsense";
ASSERT_EQ(
kNonsenseInput.length(),
base::WriteFile(file_, kNonsenseInput.c_str(), kNonsenseInput.length()));
EXPECT_FALSE(source_->ReadValue(&output));
}
// Test to verify that an invalid file path will be rejected, and
// that the evaluation of a file path's validity happens on each
// call to ReadValue() again.
TEST_F(FileSourceTest, FilePathInvalid) {
const int kInput = 17;
int64_t output = -1;
const std::string kInputStr = std::to_string(kInput);
base::FilePath old_location = file_;
ASSERT_TRUE(base::DeleteFile(file_, false));
ASSERT_FALSE(source_->ReadValue(&output));
file_ = old_location;
ASSERT_EQ(kInputStr.length(),
base::WriteFile(file_, kInputStr.c_str(), kInputStr.length()));
ASSERT_TRUE(source_->ReadValue(&output));
EXPECT_EQ(kInput, output);
}
} // namespace thd