flash-ipmi: implement flashStartHash

Change-Id: Ia134b1faef99510bbed5eb4e36dada164c010305
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index d0b8b2a..9540688 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -22,7 +22,8 @@
 	ipmi_command_unittest \
 	flash_start_unittest \
 	flash_flashdata_unittest \
-	flash_flashfinish_unittest
+	flash_flashfinish_unittest \
+	flash_hashstart_unittest
 
 TESTS = $(check_PROGRAMS)
 
@@ -64,3 +65,6 @@
 
 flash_flashfinish_unittest_SOURCES = flash_flashfinish_unittest.cpp
 flash_flashfinish_unittest_LDADD = $(top_builddir)/flash-ipmi.o $(SDBUSPLUS_LIBS)
+
+flash_hashstart_unittest_SOURCES = flash_hashstart_unittest.cpp
+flash_hashstart_unittest_LDADD = $(top_builddir)/flash-ipmi.o $(SDBUSPLUS_LIBS)
diff --git a/test/flash_hashstart_unittest.cpp b/test/flash_hashstart_unittest.cpp
new file mode 100644
index 0000000..a3a1d9f
--- /dev/null
+++ b/test/flash_hashstart_unittest.cpp
@@ -0,0 +1,36 @@
+#include "flash-ipmi.hpp"
+
+#include <cstdio>
+#include <gtest/gtest.h>
+#include <string>
+
+#define THIRTYTWO_MIB 33554432
+
+TEST(FlashIpmiHashStartTest, OutofSequenceFails)
+{
+    // Verify that the image must be started first. (can change).
+
+    std::string name = std::tmpnam(nullptr);
+    std::string name2 = std::tmpnam(nullptr);
+
+    FlashUpdate updater(name, name2);
+    EXPECT_FALSE(updater.startHash(THIRTYTWO_MIB));
+
+    (void)std::remove(name.c_str());
+    (void)std::remove(name2.c_str());
+}
+
+TEST(FlashIpmiHashStartTest, VerifyHashFileCreated)
+{
+    // Verify that it's happy.
+
+    std::string name = std::tmpnam(nullptr);
+    std::string name2 = std::tmpnam(nullptr);
+
+    FlashUpdate updater(name, name2);
+    EXPECT_TRUE(updater.start(THIRTYTWO_MIB));
+    EXPECT_TRUE(updater.startHash(THIRTYTWO_MIB));
+
+    (void)std::remove(name.c_str());
+    (void)std::remove(name2.c_str());
+}