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