// Copyright 2014 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 <brillo/osrelease_reader.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <gtest/gtest.h>
using std::string;
namespace brillo {
class OsReleaseReaderTest : public ::testing::Test {
public:
void SetUp() override {
CHECK(temp_dir_.CreateUniqueTempDir());
osreleased_ = temp_dir_.path().Append("etc").Append("os-release.d");
osrelease_ = temp_dir_.path().Append("etc").Append("os-release");
base::CreateDirectory(osreleased_);
}
protected:
base::FilePath temp_file_, osrelease_, osreleased_;
base::ScopedTempDir temp_dir_;
OsReleaseReader store_; // reader under test.
};
TEST_F(OsReleaseReaderTest, MissingOsReleaseTest) {
store_.LoadTestingOnly(temp_dir_.path());
}
TEST_F(OsReleaseReaderTest, MissingOsReleaseDTest) {
base::DeleteFile(osreleased_, true);
store_.LoadTestingOnly(temp_dir_.path());
}
TEST_F(OsReleaseReaderTest, CompleteTest) {
string hello = "hello";
string ola = "ola";
string bob = "bob";
string osreleasecontent = "TEST_KEY=bonjour\nNAME=bob\n";
base::WriteFile(osreleased_.Append("TEST_KEY"), hello.data(), hello.size());
base::WriteFile(osreleased_.Append("GREETINGS"), ola.data(), ola.size());
base::WriteFile(osrelease_, osreleasecontent.data(), osreleasecontent.size());
store_.LoadTestingOnly(temp_dir_.path());
string test_key_value;
ASSERT_TRUE(store_.GetString("TEST_KEY", &test_key_value));
string greetings_value;
ASSERT_TRUE(store_.GetString("GREETINGS", &greetings_value));
string name_value;
ASSERT_TRUE(store_.GetString("NAME", &name_value));
string nonexistent_value;
// Getting the string should fail if the key does not exist.
ASSERT_FALSE(store_.GetString("DOES_NOT_EXIST", &nonexistent_value));
// hello in chosen (from os-release.d) instead of bonjour from os-release.
ASSERT_EQ(hello, test_key_value);
// greetings is set to ola.
ASSERT_EQ(ola, greetings_value);
// Name from os-release is set.
ASSERT_EQ(bob, name_value);
}
TEST_F(OsReleaseReaderTest, NoNewLine) {
// New lines should be stripped from os-release.d files.
string hello = "hello\n";
string bonjour = "bonjour\ngarbage";
base::WriteFile(osreleased_.Append("HELLO"), hello.data(), hello.size());
base::WriteFile(
osreleased_.Append("BONJOUR"), bonjour.data(), bonjour.size());
store_.LoadTestingOnly(temp_dir_.path());
string hello_value;
string bonjour_value;
ASSERT_TRUE(store_.GetString("HELLO", &hello_value));
ASSERT_TRUE(store_.GetString("BONJOUR", &bonjour_value));
ASSERT_EQ("hello", hello_value);
ASSERT_EQ("bonjour", bonjour_value);
}
} // namespace brillo