summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Fair <benjaminfair@google.com>2019-11-15 14:47:42 -0800
committerBenjamin Fair <benjaminfair@google.com>2019-11-18 11:35:27 -0800
commita67e9e9e3ea6dc5a5f5ea2d5bdefe701ebea693c (patch)
treed65f9290e1f602bdd20cb3bf3f87fa5c6e1c93d1
parent060be01fee2b63104921ea6a5b2901b75fb63f2e (diff)
downloadphosphor-ipmi-flash-a67e9e9e3ea6dc5a5f5ea2d5bdefe701ebea693c.tar.gz
phosphor-ipmi-flash-a67e9e9e3ea6dc5a5f5ea2d5bdefe701ebea693c.zip
bmc: add test for reserved flags
Test that no one adds transport backends which use the lower 3 bits of the transport flag bitfield. These bits are reserved for exclusive use with the IPMI, LPC, and P2A backends to ensure backwards compatibility with older host tools. Signed-off-by: Benjamin Fair <benjaminfair@google.com> Change-Id: I6284f2c864aeb5e20a812c0b13e9ecc61349b127
-rw-r--r--bmc/test/Makefile.am4
-rw-r--r--bmc/test/firmware_open_unittest.cpp63
2 files changed, 67 insertions, 0 deletions
diff --git a/bmc/test/Makefile.am b/bmc/test/Makefile.am
index ce8ac08..9f1aa37 100644
--- a/bmc/test/Makefile.am
+++ b/bmc/test/Makefile.am
@@ -27,6 +27,7 @@ check_PROGRAMS = \
firmware_canhandle_unittest \
firmware_write_unittest \
firmware_writemeta_unittest \
+ firmware_open_unittest \
firmware_close_unittest \
firmware_sessionstat_unittest \
firmware_commit_unittest \
@@ -60,6 +61,9 @@ firmware_write_unittest_LDADD = $(top_builddir)/bmc/libfirmwareblob_common.la
firmware_writemeta_unittest_SOURCES = firmware_writemeta_unittest.cpp
firmware_writemeta_unittest_LDADD = $(top_builddir)/bmc/libfirmwareblob_common.la
+firmware_open_unittest_SOURCES = firmware_open_unittest.cpp
+firmware_open_unittest_LDADD = $(top_builddir)/bmc/libfirmwareblob_common.la
+
firmware_close_unittest_SOURCES = firmware_close_unittest.cpp
firmware_close_unittest_LDADD = $(top_builddir)/bmc/libfirmwareblob_common.la
diff --git a/bmc/test/firmware_open_unittest.cpp b/bmc/test/firmware_open_unittest.cpp
new file mode 100644
index 0000000..21ab97b
--- /dev/null
+++ b/bmc/test/firmware_open_unittest.cpp
@@ -0,0 +1,63 @@
+#include "firmware_handler.hpp"
+#include "flags.hpp"
+#include "image_mock.hpp"
+#include "triggerable_mock.hpp"
+#include "util.hpp"
+
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+namespace ipmi_flash
+{
+namespace
+{
+
+class FirmwareOpenFailTest : public ::testing::TestWithParam<std::uint16_t>
+{
+};
+
+TEST_P(FirmwareOpenFailTest, WithFlags)
+{
+ std::vector<DataHandlerPack> data = {
+ {FirmwareFlags::UpdateFlags::ipmi, nullptr},
+ {FirmwareFlags::UpdateFlags::p2a, nullptr},
+ {FirmwareFlags::UpdateFlags::lpc, nullptr},
+ };
+
+ std::vector<HandlerPack> blobs;
+ blobs.push_back(std::move(
+ HandlerPack(hashBlobId, std::make_unique<ImageHandlerMock>())));
+ blobs.push_back(
+ std::move(HandlerPack("asdf", std::make_unique<ImageHandlerMock>())));
+
+ auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
+ std::move(blobs), data, std::move(CreateActionMap("asdf")));
+
+ EXPECT_FALSE(handler->open(0, GetParam(), "asdf"));
+}
+
+const std::vector<std::uint16_t> OpenFailParams{
+ /* These first 4 fail because they don't have the "write" flag */
+ 0b000 << 8,
+ 0b110 << 8,
+ 0b101 << 8,
+ 0b011 << 8,
+ /* Next 1 doesn't specify any transport */
+ blobs::OpenFlags::write | 0b000 << 8,
+ /* Next 3 specify 2 reserved transport bits at the same time. This isn't
+ * allowed because older code expects these first 3 bits to be mutually
+ * exclusive.
+ */
+ blobs::OpenFlags::write | 0b110 << 8,
+ blobs::OpenFlags::write | 0b101 << 8,
+ blobs::OpenFlags::write | 0b011 << 8,
+};
+
+INSTANTIATE_TEST_CASE_P(WithFlags, FirmwareOpenFailTest,
+ ::testing::ValuesIn(OpenFailParams));
+
+} // namespace
+} // namespace ipmi_flash
OpenPOWER on IntegriCloud