| #include "estoraged_conf.hpp" |
| #include "sanitize.hpp" |
| |
| #include <sys/ioctl.h> |
| |
| #include <stdplus/fd/managed.hpp> |
| #include <xyz/openbmc_project/Common/error.hpp> |
| |
| #include <string> |
| #include <string_view> |
| |
| #include <gmock/gmock-matchers.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| namespace estoraged_test |
| { |
| |
| using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; |
| using ::testing::_; |
| using ::testing::Return; |
| |
| class IOCTLWrapperMock : public estoraged::IOCTLWrapperInterface |
| { |
| public: |
| MOCK_METHOD(int, doIoctl, |
| (std::string_view devPath, unsigned long request, |
| struct mmc_ioc_cmd idata), |
| (override)); |
| |
| MOCK_METHOD(int, doIoctlMulti, |
| (std::string_view devPath, unsigned long request, |
| struct estoraged::mmc_io_multi_cmd_erase), |
| (override)); |
| }; |
| |
| // mock ioctl returns 0, and everything passes |
| TEST(Sanitize, Successful) |
| { |
| std::unique_ptr<IOCTLWrapperMock> mockIOCTL = |
| std::make_unique<IOCTLWrapperMock>(); |
| IOCTLWrapperMock* mockPtr = mockIOCTL.get(); |
| estoraged::Sanitize goodSanitize("/dev/null", std::move(mockIOCTL)); |
| EXPECT_CALL(*mockPtr, doIoctl(_, _, _)).WillRepeatedly(Return(0)); |
| EXPECT_CALL(*mockPtr, doIoctlMulti(_, _, _)).WillRepeatedly(Return(0)); |
| EXPECT_NO_THROW(goodSanitize.doSanitize(52428800)); |
| } |
| |
| // doIoctlMulti returns -1, and Sanitize::emmcErase throws InternalFailure |
| TEST(Sanitize, Sanitize_emmcErase) |
| { |
| std::unique_ptr<IOCTLWrapperMock> mockIOCTL = |
| std::make_unique<IOCTLWrapperMock>(); |
| IOCTLWrapperMock* mockPtr = mockIOCTL.get(); |
| estoraged::Sanitize emptySanitize("", std::move(mockIOCTL)); |
| EXPECT_CALL(*mockPtr, doIoctlMulti(_, _, _)).WillRepeatedly(Return(-1)); |
| EXPECT_THROW(emptySanitize.doSanitize(4000000000), InternalFailure); |
| } |
| |
| // mock ioctl returns 1, and emmcSanitize throws |
| TEST(Sanitize, Sanitize_emmcSanitize) |
| { |
| std::unique_ptr<IOCTLWrapperMock> mockIOCTL = |
| std::make_unique<IOCTLWrapperMock>(); |
| IOCTLWrapperMock* mockPtr = mockIOCTL.get(); |
| estoraged::Sanitize ioctlSanitize("/dev/null", std::move(mockIOCTL)); |
| EXPECT_CALL(*mockPtr, doIoctl(_, _, _)).WillRepeatedly(Return(1)); |
| EXPECT_CALL(*mockPtr, doIoctlMulti(_, _, _)).WillRepeatedly(Return(0)); |
| EXPECT_THROW(ioctlSanitize.doSanitize(4000000000), InternalFailure); |
| } |
| |
| } // namespace estoraged_test |