diff --git a/src/test/erase/sanitize_test.cpp b/src/test/erase/sanitize_test.cpp
new file mode 100644
index 0000000..4e18148
--- /dev/null
+++ b/src/test/erase/sanitize_test.cpp
@@ -0,0 +1,72 @@
+#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
diff --git a/src/test/meson.build b/src/test/meson.build
index b684d24..29cdda4 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -6,6 +6,7 @@
   'erase/pattern_test',
   'erase/zero_test',
   'erase/crypto_test',
+  'erase/sanitize_test',
   'estoraged_test',
 ]
 
