main: handle error checking with handler creation

Actually verify the library was configured to handle at least one
firmware type.

Change-Id: Ie80c8a1fb5ac11d9d31d67258246c0a064fd42b8
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index 1980760..9bcdd39 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -15,6 +15,12 @@
     FirmwareBlobHandler::CreateFirmwareBlobHandler(
         const std::vector<std::string>& firmwares, std::uint32_t transports)
 {
+    /* There must be at least one. */
+    if (!firmwares.size())
+    {
+        return nullptr;
+    }
+
     std::vector<std::string> blobs = firmwares;
     blobs.push_back(hashBlobID);
 
diff --git a/main.cpp b/main.cpp
index ba2389a..ec0f53b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -31,10 +31,18 @@
     supportedTransports |= static_cast<std::uint32_t>(FirmwareUpdateFlags::lpc);
 #endif
 
+    auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
+        supportedFirmware, supportedTransports);
+
+    if (!handler)
+    {
+        log<level::ERR>("Firmware Handler has invalid configuration");
+        return;
+    }
+
     auto* manager = getBlobManager();
-    if (!manager->registerHandler(
-            FirmwareBlobHandler::CreateFirmwareBlobHandler(
-                supportedFirmware, supportedTransports)))
+
+    if (!manager->registerHandler(std::move(handler)))
     {
         log<level::ERR>("Failed to register Firmware Handler");
     }
diff --git a/test/firmware_handler_unittest.cpp b/test/firmware_handler_unittest.cpp
index 97c28f8..8ef74c1 100644
--- a/test/firmware_handler_unittest.cpp
+++ b/test/firmware_handler_unittest.cpp
@@ -1,16 +1,25 @@
 #include "firmware_handler.hpp"
 
+#include <algorithm>
 #include <memory>
 
 #include <gtest/gtest.h>
 
 namespace blobs
 {
-TEST(FirmwareHandlerTest, CreateEmptyListVerifyHasHash)
+
+TEST(FirmwareHandlerTest, CreateEmptyListVerifyFails)
 {
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler({}, 0);
+    EXPECT_EQ(handler, nullptr);
+}
+TEST(FirmwareHandlerTest, CreateEmptyListVerifyHasHash)
+{
+    auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler({"asdf"}, 0);
     auto result = handler->getBlobIds();
-    EXPECT_EQ(1, result.size());
-    EXPECT_STREQ(result.at(0).c_str(), FirmwareBlobHandler::hashBlobID.c_str());
+    EXPECT_EQ(2, result.size());
+    EXPECT_EQ(2, std::count(result.begin(), result.end(), "asdf") +
+                     std::count(result.begin(), result.end(),
+                                FirmwareBlobHandler::hashBlobID));
 }
 } // namespace blobs