aboutsummaryrefslogtreecommitdiff
path: root/brillo/osrelease_reader_unittest.cc
blob: 938136753421900d233d83306a476ebf42e3c2b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// 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_.GetPath().Append("etc").Append("os-release.d");
    osrelease_ = temp_dir_.GetPath().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_.GetPath());
}

TEST_F(OsReleaseReaderTest, MissingOsReleaseDTest) {
  base::DeleteFile(osreleased_, true);
  store_.LoadTestingOnly(temp_dir_.GetPath());
}

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_.GetPath());

  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_.GetPath());

  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