1 //
2 // Copyright (C) 2020 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #include "update_engine/cros/requisition_util.h"
18 
19 #include <string>
20 
21 #include <base/files/file_path.h>
22 #include <base/files/file_util.h>
23 #include <base/files/scoped_temp_dir.h>
24 #include <gtest/gtest.h>
25 
26 #include "update_engine/common/test_utils.h"
27 
28 using chromeos_update_engine::test_utils::WriteFileString;
29 using std::string;
30 
31 namespace {
32 
33 const char kRemoraJSON[] =
34     "{\n"
35     "   \"the_list\": [ \"val1\", \"val2\" ],\n"
36     "   \"enrollment\": {\n"
37     "      \"autostart\": true,\n"
38     "      \"can_exit\": false,\n"
39     "      \"device_requisition\": \"remora\"\n"
40     "   },\n"
41     "   \"some_String\": \"1337\",\n"
42     "   \"some_int\": 42\n"
43     "}\n";
44 
45 const char kNoEnrollmentJSON[] =
46     "{\n"
47     "   \"the_list\": [ \"val1\", \"val2\" ],\n"
48     "   \"enrollment\": {\n"
49     "      \"autostart\": true,\n"
50     "      \"can_exit\": false,\n"
51     "      \"device_requisition\": \"\"\n"
52     "   },\n"
53     "   \"some_String\": \"1337\",\n"
54     "   \"some_int\": 42\n"
55     "}\n";
56 }  // namespace
57 
58 namespace chromeos_update_engine {
59 
60 class RequisitionUtilTest : public ::testing::Test {
61  protected:
SetUp()62   void SetUp() override { ASSERT_TRUE(root_dir_.CreateUniqueTempDir()); }
63 
WriteJsonToFile(const string & json)64   void WriteJsonToFile(const string& json) {
65     path_ =
66         base::FilePath(root_dir_.GetPath().value() + "/chronos/Local State");
67     ASSERT_TRUE(base::CreateDirectory(path_.DirName()));
68     ASSERT_TRUE(WriteFileString(path_.value(), json));
69   }
70 
71   base::ScopedTempDir root_dir_;
72   base::FilePath path_;
73 };
74 
TEST_F(RequisitionUtilTest,BadJsonReturnsEmpty)75 TEST_F(RequisitionUtilTest, BadJsonReturnsEmpty) {
76   WriteJsonToFile("this isn't JSON");
77   EXPECT_EQ("", ReadDeviceRequisition(path_));
78 }
79 
TEST_F(RequisitionUtilTest,NoFileReturnsEmpty)80 TEST_F(RequisitionUtilTest, NoFileReturnsEmpty) {
81   EXPECT_EQ("", ReadDeviceRequisition(path_));
82 }
83 
TEST_F(RequisitionUtilTest,EnrollmentRequisition)84 TEST_F(RequisitionUtilTest, EnrollmentRequisition) {
85   WriteJsonToFile(kRemoraJSON);
86   EXPECT_EQ("remora", ReadDeviceRequisition(path_));
87 }
88 
TEST_F(RequisitionUtilTest,BlankEnrollment)89 TEST_F(RequisitionUtilTest, BlankEnrollment) {
90   WriteJsonToFile(kNoEnrollmentJSON);
91   EXPECT_EQ("", ReadDeviceRequisition(path_));
92 }
93 
94 }  // namespace chromeos_update_engine
95