1*1a96fba6SXin Li // Copyright 2014 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li // Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li // found in the LICENSE file.
4*1a96fba6SXin Li
5*1a96fba6SXin Li #include <brillo/osrelease_reader.h>
6*1a96fba6SXin Li
7*1a96fba6SXin Li #include <base/files/file_util.h>
8*1a96fba6SXin Li #include <base/files/scoped_temp_dir.h>
9*1a96fba6SXin Li #include <gtest/gtest.h>
10*1a96fba6SXin Li
11*1a96fba6SXin Li using std::string;
12*1a96fba6SXin Li
13*1a96fba6SXin Li namespace brillo {
14*1a96fba6SXin Li
15*1a96fba6SXin Li class OsReleaseReaderTest : public ::testing::Test {
16*1a96fba6SXin Li public:
SetUp()17*1a96fba6SXin Li void SetUp() override {
18*1a96fba6SXin Li CHECK(temp_dir_.CreateUniqueTempDir());
19*1a96fba6SXin Li osreleased_ = temp_dir_.GetPath().Append("etc").Append("os-release.d");
20*1a96fba6SXin Li osrelease_ = temp_dir_.GetPath().Append("etc").Append("os-release");
21*1a96fba6SXin Li base::CreateDirectory(osreleased_);
22*1a96fba6SXin Li }
23*1a96fba6SXin Li
24*1a96fba6SXin Li protected:
25*1a96fba6SXin Li base::FilePath temp_file_, osrelease_, osreleased_;
26*1a96fba6SXin Li base::ScopedTempDir temp_dir_;
27*1a96fba6SXin Li OsReleaseReader store_; // reader under test.
28*1a96fba6SXin Li };
29*1a96fba6SXin Li
TEST_F(OsReleaseReaderTest,MissingOsReleaseTest)30*1a96fba6SXin Li TEST_F(OsReleaseReaderTest, MissingOsReleaseTest) {
31*1a96fba6SXin Li store_.LoadTestingOnly(temp_dir_.GetPath());
32*1a96fba6SXin Li }
33*1a96fba6SXin Li
TEST_F(OsReleaseReaderTest,MissingOsReleaseDTest)34*1a96fba6SXin Li TEST_F(OsReleaseReaderTest, MissingOsReleaseDTest) {
35*1a96fba6SXin Li base::DeleteFile(osreleased_, true);
36*1a96fba6SXin Li store_.LoadTestingOnly(temp_dir_.GetPath());
37*1a96fba6SXin Li }
38*1a96fba6SXin Li
TEST_F(OsReleaseReaderTest,CompleteTest)39*1a96fba6SXin Li TEST_F(OsReleaseReaderTest, CompleteTest) {
40*1a96fba6SXin Li string hello = "hello";
41*1a96fba6SXin Li string ola = "ola";
42*1a96fba6SXin Li string bob = "bob";
43*1a96fba6SXin Li string osreleasecontent = "TEST_KEY=bonjour\nNAME=bob\n";
44*1a96fba6SXin Li
45*1a96fba6SXin Li base::WriteFile(osreleased_.Append("TEST_KEY"), hello.data(), hello.size());
46*1a96fba6SXin Li base::WriteFile(osreleased_.Append("GREETINGS"), ola.data(), ola.size());
47*1a96fba6SXin Li base::WriteFile(osrelease_, osreleasecontent.data(), osreleasecontent.size());
48*1a96fba6SXin Li
49*1a96fba6SXin Li store_.LoadTestingOnly(temp_dir_.GetPath());
50*1a96fba6SXin Li
51*1a96fba6SXin Li string test_key_value;
52*1a96fba6SXin Li ASSERT_TRUE(store_.GetString("TEST_KEY", &test_key_value));
53*1a96fba6SXin Li
54*1a96fba6SXin Li string greetings_value;
55*1a96fba6SXin Li ASSERT_TRUE(store_.GetString("GREETINGS", &greetings_value));
56*1a96fba6SXin Li
57*1a96fba6SXin Li string name_value;
58*1a96fba6SXin Li ASSERT_TRUE(store_.GetString("NAME", &name_value));
59*1a96fba6SXin Li
60*1a96fba6SXin Li string nonexistent_value;
61*1a96fba6SXin Li // Getting the string should fail if the key does not exist.
62*1a96fba6SXin Li ASSERT_FALSE(store_.GetString("DOES_NOT_EXIST", &nonexistent_value));
63*1a96fba6SXin Li
64*1a96fba6SXin Li // hello in chosen (from os-release.d) instead of bonjour from os-release.
65*1a96fba6SXin Li ASSERT_EQ(hello, test_key_value);
66*1a96fba6SXin Li
67*1a96fba6SXin Li // greetings is set to ola.
68*1a96fba6SXin Li ASSERT_EQ(ola, greetings_value);
69*1a96fba6SXin Li
70*1a96fba6SXin Li // Name from os-release is set.
71*1a96fba6SXin Li ASSERT_EQ(bob, name_value);
72*1a96fba6SXin Li }
73*1a96fba6SXin Li
TEST_F(OsReleaseReaderTest,NoNewLine)74*1a96fba6SXin Li TEST_F(OsReleaseReaderTest, NoNewLine) {
75*1a96fba6SXin Li // New lines should be stripped from os-release.d files.
76*1a96fba6SXin Li string hello = "hello\n";
77*1a96fba6SXin Li string bonjour = "bonjour\ngarbage";
78*1a96fba6SXin Li
79*1a96fba6SXin Li base::WriteFile(osreleased_.Append("HELLO"), hello.data(), hello.size());
80*1a96fba6SXin Li base::WriteFile(
81*1a96fba6SXin Li osreleased_.Append("BONJOUR"), bonjour.data(), bonjour.size());
82*1a96fba6SXin Li
83*1a96fba6SXin Li store_.LoadTestingOnly(temp_dir_.GetPath());
84*1a96fba6SXin Li
85*1a96fba6SXin Li string hello_value;
86*1a96fba6SXin Li string bonjour_value;
87*1a96fba6SXin Li
88*1a96fba6SXin Li ASSERT_TRUE(store_.GetString("HELLO", &hello_value));
89*1a96fba6SXin Li ASSERT_TRUE(store_.GetString("BONJOUR", &bonjour_value));
90*1a96fba6SXin Li
91*1a96fba6SXin Li ASSERT_EQ("hello", hello_value);
92*1a96fba6SXin Li ASSERT_EQ("bonjour", bonjour_value);
93*1a96fba6SXin Li }
94*1a96fba6SXin Li
95*1a96fba6SXin Li } // namespace brillo
96