flash-ipmi: implement flashVerifyCheck
Change-Id: I21cf68524efc9a4b28662aac086d3b0a6b881599
Signed-off-by: Patrick Venture <venture@google.com>
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());
+ }
+}