diff --git a/flash-ipmi.cpp b/flash-ipmi.cpp
index 00fa027..e4fafc7 100644
--- a/flash-ipmi.cpp
+++ b/flash-ipmi.cpp
@@ -17,6 +17,7 @@
 #include "flash-ipmi.hpp"
 
 #include <cstdio>
+#include <fstream>
 #include <phosphor-logging/log.hpp>
 
 using namespace phosphor::logging;
@@ -199,6 +200,30 @@
 
 VerifyCheckResponse FlashUpdate::checkVerify()
 {
-    /* TODO: implement. */
-    return VerifyCheckResponse::other;
+    auto result = VerifyCheckResponse::other;
+    std::ifstream ifs;
+    ifs.open(verifyPath);
+    if (ifs.good())
+    {
+        std::string status;
+        /*
+         * Check for the contents of the file, excepting:
+         * running, success, or failed.
+         */
+        ifs >> status;
+        if (status == "running")
+        {
+            result = VerifyCheckResponse::running;
+        }
+        else if (status == "success")
+        {
+            result = VerifyCheckResponse::success;
+        }
+        else if (status == "failed")
+        {
+            result = VerifyCheckResponse::failed;
+        }
+    }
+
+    return result;
 }
diff --git a/test/Makefile.am b/test/Makefile.am
index 26f3439..6666d68 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -26,7 +26,8 @@
 	flash_flashfinish_unittest \
 	flash_hashstart_unittest \
 	flash_hashdata_unittest \
-	flash_hashfinish_unittest
+	flash_hashfinish_unittest \
+	flash_checkverify_unittest
 
 TESTS = $(check_PROGRAMS)
 
@@ -80,3 +81,6 @@
 
 flash_hashfinish_unittest_SOURCES = flash_hashfinish_unittest.cpp
 flash_hashfinish_unittest_LDADD = $(top_builddir)/flash-ipmi.o $(SDBUSPLUS_LIBS)
+
+flash_checkverify_unittest_SOURCES = flash_checkverify_unittest.cpp
+flash_checkverify_unittest_LDADD = $(top_builddir)/flash-ipmi.o $(SDBUSPLUS_LIBS)
diff --git a/test/flash_checkverify_unittest.cpp b/test/flash_checkverify_unittest.cpp
new file mode 100644
index 0000000..c64de82
--- /dev/null
+++ b/test/flash_checkverify_unittest.cpp
@@ -0,0 +1,59 @@
+#include "flash-ipmi.hpp"
+
+#include <cstdio>
+#include <fstream>
+#include <gtest/gtest.h>
+#include <string>
+#include <vector>
+
+class FlashIpmiCheckVerifyTest : public ::testing::Test
+{
+  protected:
+    FlashIpmiCheckVerifyTest() = default;
+
+    void SetUp() override
+    {
+        name = std::tmpnam(nullptr);
+    }
+    void TearDown() override
+    {
+        (void)std::remove(name.c_str());
+    }
+
+    std::string name;
+};
+
+TEST_F(FlashIpmiCheckVerifyTest, VerifyItReturnsFileContents)
+{
+    // If the file is present, the value can be a string and we convert it to
+    // an enum.
+
+    struct Expect
+    {
+        std::string value;
+        VerifyCheckResponse response;
+    };
+
+    std::vector<Expect> tests = {
+        {"running", VerifyCheckResponse::running},
+        {"success", VerifyCheckResponse::success},
+        {"failed", VerifyCheckResponse::failed},
+        {"asdf", VerifyCheckResponse::other},
+    };
+
+    std::string vname = std::tmpnam(nullptr);
+
+    FlashUpdate updater(name, vname);
+
+    for (const auto& test : tests)
+    {
+        std::ofstream out;
+        out.open(vname);
+        out << test.value << std::endl;
+        out.close();
+
+        EXPECT_EQ(test.response, updater.checkVerify());
+
+        (void)std::remove(vname.c_str());
+    }
+}
