1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2012 The Android Open Source Project
3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License");
5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License.
6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at
7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//      http://www.apache.org/licenses/LICENSE-2.0
9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software
11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS,
12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and
14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License.
15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
16f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
1739910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/hwid_override.h"
18f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
19f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone#include <string>
20f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
2175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/files/file_path.h>
2206c76a49bfd29c8abdb8abd5b646a6583783191aBen Chan#include <base/files/file_util.h>
23f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone#include <base/files/scoped_temp_dir.h>
24f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone#include <gtest/gtest.h>
25f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
26f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masonenamespace chromeos_update_engine {
27f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
28f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masoneclass HwidOverrideTest : public ::testing::Test {
29f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone public:
30f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  HwidOverrideTest() {}
31610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo  ~HwidOverrideTest() override = default;
32f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
33610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo  void SetUp() override {
34f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone    ASSERT_TRUE(tempdir_.CreateUniqueTempDir());
35a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli    ASSERT_TRUE(base::CreateDirectory(tempdir_.GetPath().Append("etc")));
36f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  }
37f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
38f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone protected:
39f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  base::ScopedTempDir tempdir_;
40f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
41f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone private:
42f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  DISALLOW_COPY_AND_ASSIGN(HwidOverrideTest);
43f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone};
44f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
45f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris MasoneTEST_F(HwidOverrideTest, ReadGood) {
46f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  std::string expected_hwid("expected");
47f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  std::string keyval(HwidOverride::kHwidOverrideKey);
48f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  keyval += ("=" + expected_hwid);
49a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli  ASSERT_EQ(base::WriteFile(tempdir_.GetPath().Append("etc/lsb-release"),
50a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli                            keyval.c_str(),
51a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli                            keyval.length()),
5280f70ff45f8ea9a679c0c3ed0dc143dd2fe2b63eAlex Deymo            static_cast<int>(keyval.length()));
53a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli  EXPECT_EQ(expected_hwid, HwidOverride::Read(tempdir_.GetPath()));
54f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone}
55f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
56f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris MasoneTEST_F(HwidOverrideTest, ReadNothing) {
57f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone  std::string keyval("SOMETHING_ELSE=UNINTERESTING");
58a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli  ASSERT_EQ(base::WriteFile(tempdir_.GetPath().Append("etc/lsb-release"),
59a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli                            keyval.c_str(),
60a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli                            keyval.length()),
6180f70ff45f8ea9a679c0c3ed0dc143dd2fe2b63eAlex Deymo            static_cast<int>(keyval.length()));
62a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli  EXPECT_EQ(std::string(), HwidOverride::Read(tempdir_.GetPath()));
63f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone}
64f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
65f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris MasoneTEST_F(HwidOverrideTest, ReadFailure) {
66a78ddf883fe270dfd44ca030dd79eebf4ce22179Jay Civelli  EXPECT_EQ(std::string(), HwidOverride::Read(tempdir_.GetPath()));
67f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone}
68f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone
69f8d037f5c506770adbe874f0eefa1e5e5abf4140Chris Masone}  // namespace chromeos_update_engine
70