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