Home | History | Annotate | Download | only in brillo
      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 
     11 using std::string;
     12 
     13 namespace brillo {
     14 
     15 class 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 
     30 TEST_F(OsReleaseReaderTest, MissingOsReleaseTest) {
     31   store_.LoadTestingOnly(temp_dir_.path());
     32 }
     33 
     34 TEST_F(OsReleaseReaderTest, MissingOsReleaseDTest) {
     35   base::DeleteFile(osreleased_, true);
     36   store_.LoadTestingOnly(temp_dir_.path());
     37 }
     38 
     39 TEST_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 
     74 TEST_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