flash-ipmi: implement flashStartTransfer

Change-Id: I207f350dad3d73dacf1216e7742637531b50ea1a
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index c02ebb0..245b251 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -19,7 +19,8 @@
 	ipmi_startverify_unittest \
 	ipmi_abort_unittest \
 	ipmi_validate_unittest \
-	ipmi_command_unittest
+	ipmi_command_unittest \
+	flash_start_unittest
 
 TESTS = $(check_PROGRAMS)
 
@@ -52,3 +53,6 @@
 
 ipmi_command_unittest_SOURCES = ipmi_command_unittest.cpp
 ipmi_command_unittest_LDADD = $(top_builddir)/ipmi.o
+
+flash_start_unittest_SOURCES = flash_start_unittest.cpp
+flash_start_unittest_LDADD = $(top_builddir)/flash-ipmi.o $(SDBUSPLUS_LIBS)
diff --git a/test/flash_start_unittest.cpp b/test/flash_start_unittest.cpp
new file mode 100644
index 0000000..b287561
--- /dev/null
+++ b/test/flash_start_unittest.cpp
@@ -0,0 +1,23 @@
+#include "flash-ipmi.hpp"
+
+#include <cstdio>
+#include <gtest/gtest.h>
+#include <string>
+
+#define THIRTYTWO_MIB 33554432
+
+TEST(FlashIpmiStartTest, VerifiesFieldsAndAction)
+{
+    // The interface does not currently support failure injection, so let's
+    // simply verify it does what we think it should.
+
+    std::string name = std::tmpnam(nullptr);
+
+    FlashUpdate updater(name);
+    updater.start(THIRTYTWO_MIB);
+
+    auto file = std::fopen(name.c_str(), "r");
+    EXPECT_TRUE(file);
+    std::fclose(file);
+    (void)std::remove(name.c_str());
+}