1 /** 2 * Copyright © 2018 IBM Corporation 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 #include "callout.hpp" 17 #include "dbus.hpp" 18 19 #include <experimental/filesystem> 20 #include <fstream> 21 22 #include <gtest/gtest.h> 23 24 using namespace ibm::logging; 25 26 class CalloutTest : public ::testing::Test 27 { 28 protected: 29 virtual void SetUp() 30 { 31 char dir[] = {"./calloutsXXXXXX"}; 32 33 persistDir = mkdtemp(dir); 34 } 35 36 virtual void TearDown() 37 { 38 fs::remove_all(persistDir); 39 } 40 41 fs::path persistDir; 42 }; 43 44 TEST_F(CalloutTest, TestPersist) 45 { 46 using namespace std::literals::string_literals; 47 48 auto bus = sdbusplus::bus::new_default(); 49 std::string objectPath{"/callout/path/0"}; 50 std::string calloutPath{"/some/inventory/object"}; 51 size_t id = 0; 52 uint64_t ts = 5; 53 54 DbusPropertyMap assetProps{{"BuildDate"s, Value{"Date42"s}}, 55 {"Manufacturer"s, Value{"Mfg42"s}}, 56 {"Model"s, Value{"Model42"s}}, 57 {"PartNumber"s, Value{"PN42"s}}, 58 {"SerialNumber"s, Value{"SN42"s}}}; 59 { 60 auto callout = std::make_unique<Callout>(bus, objectPath, calloutPath, 61 id, ts, assetProps); 62 callout->serialize(persistDir); 63 64 ASSERT_EQ(fs::exists(persistDir / std::to_string(id)), true); 65 } 66 67 // Test object restoration 68 { 69 auto callout = std::make_unique<Callout>(bus, objectPath, id, ts); 70 71 ASSERT_EQ(callout->deserialize(persistDir), true); 72 73 ASSERT_EQ(callout->id(), id); 74 ASSERT_EQ(callout->ts(), ts); 75 ASSERT_EQ(callout->path(), calloutPath); 76 ASSERT_EQ(callout->buildDate(), 77 assetProps["BuildDate"].get<std::string>()); 78 ASSERT_EQ(callout->manufacturer(), 79 assetProps["Manufacturer"].get<std::string>()); 80 ASSERT_EQ(callout->model(), assetProps["Model"].get<std::string>()); 81 ASSERT_EQ(callout->partNumber(), 82 assetProps["PartNumber"].get<std::string>()); 83 ASSERT_EQ(callout->serialNumber(), 84 assetProps["SerialNumber"].get<std::string>()); 85 } 86 87 // Test a serialization failure due to a bad timestamp 88 { 89 auto callout = std::make_unique<Callout>(bus, objectPath, id, ts + 1); 90 91 ASSERT_EQ(callout->deserialize(persistDir), false); 92 ASSERT_EQ(fs::exists(persistDir / std::to_string(id)), false); 93 } 94 } 95