blob: 45373f4d0e310e44f21f426e09770adfe65f0b74 [file] [log] [blame]
Brandon Kim93a4c0a2024-08-17 00:36:55 +00001// Copyright 2024 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "bios_setting.hpp"
16#include "commands.hpp"
17#include "helper.hpp"
18
19#include <stdplus/gtest/tmp.hpp>
20
21#include <fstream>
22#include <ios>
23#include <iostream>
24#include <string>
25#include <vector>
26
27#include <gtest/gtest.h>
28
29namespace google
30{
31namespace ipmi
32{
33
34using testing::_;
35using ::testing::ElementsAre;
36
37class BiosSettingTest : public stdplus::gtest::TestWithTmp
38{
39 public:
40 std::string filename = std::format("{}/oem_bios_setting", CaseTmpDir());
41
42 void writeTmpFile(std::vector<uint8_t> payload)
43 {
44 std::ofstream ofs;
45 ofs.open(filename, std::ios::trunc | std::ios::binary);
46 ofs.write(reinterpret_cast<char*>(payload.data()), payload.size());
47 ofs.close();
48 }
49};
50
51TEST_F(BiosSettingTest, NoOrEmptyFileRead)
52{
53 std::vector<uint8_t> request = {};
54
55 HandlerMock hMock;
56 EXPECT_EQ(::ipmi::responseRetBytesUnavailable(),
57 readBiosSetting(request, &hMock));
58
59 // Create an empty file
60 writeTmpFile({});
61 EXPECT_EQ(::ipmi::responseRetBytesUnavailable(),
62 readBiosSetting(request, &hMock, filename));
63 std::remove(filename.c_str());
64}
65
66TEST_F(BiosSettingTest, SuccessfulRead)
67{
68 std::vector<uint8_t> request = {};
69 // Ensure 0x0A which is a new line character '\n', is read properly
70 std::vector<uint8_t> payload = {0x0A, 0xDE, 0xAD, 0xBE, 0xEF, 0x0A};
71 std::vector<uint8_t> expectedReply = {6, 0x0A, 0xDE, 0xAD,
72 0xBE, 0xEF, 0x0A};
73
74 writeTmpFile(payload);
75
76 HandlerMock hMock;
77 auto reply = readBiosSetting(request, &hMock, filename);
78 auto result = ValidateReply(reply);
79 auto& data = result.second;
80
81 EXPECT_EQ(SysOEMCommands::SysReadBiosSetting, result.first);
82 EXPECT_EQ(expectedReply.size() - 1, data.front());
83 EXPECT_EQ(expectedReply, data);
84 std::remove(filename.c_str());
85}
86
87} // namespace ipmi
88} // namespace google