xref: /openbmc/ibm-logging/test/test_callout.cpp (revision a3c33e77)
1*a3c33e77SMatt Spinler /**
2*a3c33e77SMatt Spinler  * Copyright © 2018 IBM Corporation
3*a3c33e77SMatt Spinler  *
4*a3c33e77SMatt Spinler  * Licensed under the Apache License, Version 2.0 (the "License");
5*a3c33e77SMatt Spinler  * you may not use this file except in compliance with the License.
6*a3c33e77SMatt Spinler  * You may obtain a copy of the License at
7*a3c33e77SMatt Spinler  *
8*a3c33e77SMatt Spinler  *     http://www.apache.org/licenses/LICENSE-2.0
9*a3c33e77SMatt Spinler  *
10*a3c33e77SMatt Spinler  * Unless required by applicable law or agreed to in writing, software
11*a3c33e77SMatt Spinler  * distributed under the License is distributed on an "AS IS" BASIS,
12*a3c33e77SMatt Spinler  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*a3c33e77SMatt Spinler  * See the License for the specific language governing permissions and
14*a3c33e77SMatt Spinler  * limitations under the License.
15*a3c33e77SMatt Spinler  */
16*a3c33e77SMatt Spinler #include <fstream>
17*a3c33e77SMatt Spinler #include <gtest/gtest.h>
18*a3c33e77SMatt Spinler #include <experimental/filesystem>
19*a3c33e77SMatt Spinler #include "callout.hpp"
20*a3c33e77SMatt Spinler #include "dbus.hpp"
21*a3c33e77SMatt Spinler 
22*a3c33e77SMatt Spinler using namespace ibm::logging;
23*a3c33e77SMatt Spinler 
24*a3c33e77SMatt Spinler class CalloutTest : public ::testing::Test
25*a3c33e77SMatt Spinler {
26*a3c33e77SMatt Spinler   protected:
27*a3c33e77SMatt Spinler     virtual void SetUp()
28*a3c33e77SMatt Spinler     {
29*a3c33e77SMatt Spinler         char dir[] = {"./calloutsXXXXXX"};
30*a3c33e77SMatt Spinler 
31*a3c33e77SMatt Spinler         persistDir = mkdtemp(dir);
32*a3c33e77SMatt Spinler     }
33*a3c33e77SMatt Spinler 
34*a3c33e77SMatt Spinler     virtual void TearDown()
35*a3c33e77SMatt Spinler     {
36*a3c33e77SMatt Spinler         fs::remove_all(persistDir);
37*a3c33e77SMatt Spinler     }
38*a3c33e77SMatt Spinler 
39*a3c33e77SMatt Spinler     fs::path persistDir;
40*a3c33e77SMatt Spinler };
41*a3c33e77SMatt Spinler 
42*a3c33e77SMatt Spinler TEST_F(CalloutTest, TestPersist)
43*a3c33e77SMatt Spinler {
44*a3c33e77SMatt Spinler     using namespace std::literals::string_literals;
45*a3c33e77SMatt Spinler 
46*a3c33e77SMatt Spinler     auto bus = sdbusplus::bus::new_default();
47*a3c33e77SMatt Spinler     std::string objectPath{"/callout/path/0"};
48*a3c33e77SMatt Spinler     std::string calloutPath{"/some/inventory/object"};
49*a3c33e77SMatt Spinler     size_t id = 0;
50*a3c33e77SMatt Spinler     uint64_t ts = 5;
51*a3c33e77SMatt Spinler 
52*a3c33e77SMatt Spinler     DbusPropertyMap assetProps{{"BuildDate"s, Value{"Date42"s}},
53*a3c33e77SMatt Spinler                                {"Manufacturer"s, Value{"Mfg42"s}},
54*a3c33e77SMatt Spinler                                {"Model"s, Value{"Model42"s}},
55*a3c33e77SMatt Spinler                                {"PartNumber"s, Value{"PN42"s}},
56*a3c33e77SMatt Spinler                                {"SerialNumber"s, Value{"SN42"s}}};
57*a3c33e77SMatt Spinler     {
58*a3c33e77SMatt Spinler         auto callout = std::make_unique<Callout>(bus, objectPath, calloutPath,
59*a3c33e77SMatt Spinler                                                  id, ts, assetProps);
60*a3c33e77SMatt Spinler         callout->serialize(persistDir);
61*a3c33e77SMatt Spinler 
62*a3c33e77SMatt Spinler         ASSERT_EQ(fs::exists(persistDir / std::to_string(id)), true);
63*a3c33e77SMatt Spinler     }
64*a3c33e77SMatt Spinler 
65*a3c33e77SMatt Spinler     // Test object restoration
66*a3c33e77SMatt Spinler     {
67*a3c33e77SMatt Spinler         auto callout = std::make_unique<Callout>(bus, objectPath, id, ts);
68*a3c33e77SMatt Spinler 
69*a3c33e77SMatt Spinler         ASSERT_EQ(callout->deserialize(persistDir), true);
70*a3c33e77SMatt Spinler 
71*a3c33e77SMatt Spinler         ASSERT_EQ(callout->id(), id);
72*a3c33e77SMatt Spinler         ASSERT_EQ(callout->ts(), ts);
73*a3c33e77SMatt Spinler         ASSERT_EQ(callout->path(), calloutPath);
74*a3c33e77SMatt Spinler         ASSERT_EQ(callout->buildDate(),
75*a3c33e77SMatt Spinler                   assetProps["BuildDate"].get<std::string>());
76*a3c33e77SMatt Spinler         ASSERT_EQ(callout->manufacturer(),
77*a3c33e77SMatt Spinler                   assetProps["Manufacturer"].get<std::string>());
78*a3c33e77SMatt Spinler         ASSERT_EQ(callout->model(), assetProps["Model"].get<std::string>());
79*a3c33e77SMatt Spinler         ASSERT_EQ(callout->partNumber(),
80*a3c33e77SMatt Spinler                   assetProps["PartNumber"].get<std::string>());
81*a3c33e77SMatt Spinler         ASSERT_EQ(callout->serialNumber(),
82*a3c33e77SMatt Spinler                   assetProps["SerialNumber"].get<std::string>());
83*a3c33e77SMatt Spinler     }
84*a3c33e77SMatt Spinler 
85*a3c33e77SMatt Spinler     // Test a serialization failure due to a bad timestamp
86*a3c33e77SMatt Spinler     {
87*a3c33e77SMatt Spinler         auto callout = std::make_unique<Callout>(bus, objectPath, id, ts + 1);
88*a3c33e77SMatt Spinler 
89*a3c33e77SMatt Spinler         ASSERT_EQ(callout->deserialize(persistDir), false);
90*a3c33e77SMatt Spinler         ASSERT_EQ(fs::exists(persistDir / std::to_string(id)), false);
91*a3c33e77SMatt Spinler     }
92*a3c33e77SMatt Spinler }
93