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