diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include
index 124970d..fefbbc6 100644
--- a/test/openpower-pels/Makefile.include
+++ b/test/openpower-pels/Makefile.include
@@ -3,6 +3,7 @@
 check_PROGRAMS += \
 	additional_data_test \
 	bcd_time_test \
+	failing_mtms_test \
 	log_id_test \
 	mtms_test \
 	pel_test \
@@ -113,3 +114,12 @@
 	$(test_ldadd) \
 	$(top_builddir)/extensions/openpower-pels/mtms.o
 mtms_test_LDFLAGS = $(test_ldflags)
+
+failing_mtms_test_SOURCES = %reldir%/failing_mtms_test.cpp
+failing_mtms_test_CPPFLAGS = $(test_cppflags)
+failing_mtms_test_CXXFLAGS = $(test_cxxflags)
+failing_mtms_test_LDADD = \
+	$(test_ldadd) \
+	$(top_builddir)/extensions/openpower-pels/failing_mtms.o \
+	$(top_builddir)/extensions/openpower-pels/mtms.o
+failing_mtms_test_LDFLAGS = $(test_ldflags)
diff --git a/test/openpower-pels/failing_mtms_test.cpp b/test/openpower-pels/failing_mtms_test.cpp
new file mode 100644
index 0000000..001f840
--- /dev/null
+++ b/test/openpower-pels/failing_mtms_test.cpp
@@ -0,0 +1,118 @@
+#include "extensions/openpower-pels/failing_mtms.hpp"
+#include "mocks.hpp"
+
+#include <gtest/gtest.h>
+
+using namespace openpower::pels;
+using ::testing::Return;
+
+TEST(FailingMTMSTest, SizeTest)
+{
+    EXPECT_EQ(FailingMTMS::flattenedSize(), 28);
+}
+
+TEST(FailingMTMSTest, ConstructorTest)
+{
+    // Note: the TypeModel field is 8B, and the SN field is 12B
+    {
+        MockDataInterface dataIface;
+
+        EXPECT_CALL(dataIface, getMachineTypeModel())
+            .WillOnce(Return("AAAA-BBB"));
+
+        EXPECT_CALL(dataIface, getMachineSerialNumber())
+            .WillOnce(Return("123456789ABC"));
+
+        FailingMTMS fm{dataIface};
+
+        // Check the section header
+        EXPECT_EQ(fm.header().id, 0x4D54);
+        EXPECT_EQ(fm.header().size, FailingMTMS::flattenedSize());
+        EXPECT_EQ(fm.header().version, 0x01);
+        EXPECT_EQ(fm.header().subType, 0x00);
+        EXPECT_EQ(fm.header().componentID, 0x2000);
+
+        EXPECT_EQ(fm.getMachineTypeModel(), "AAAA-BBB");
+        EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC");
+    }
+
+    // longer than the max - will truncate
+    {
+        MockDataInterface dataIface;
+
+        EXPECT_CALL(dataIface, getMachineTypeModel())
+            .WillOnce(Return("AAAA-BBBTOOLONG"));
+
+        EXPECT_CALL(dataIface, getMachineSerialNumber())
+            .WillOnce(Return("123456789ABCTOOLONG"));
+
+        FailingMTMS fm{dataIface};
+
+        EXPECT_EQ(fm.getMachineTypeModel(), "AAAA-BBB");
+        EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC");
+    }
+
+    // shorter than the max
+    {
+        MockDataInterface dataIface;
+
+        EXPECT_CALL(dataIface, getMachineTypeModel()).WillOnce(Return("A"));
+
+        EXPECT_CALL(dataIface, getMachineSerialNumber()).WillOnce(Return("1"));
+
+        FailingMTMS fm{dataIface};
+
+        EXPECT_EQ(fm.getMachineTypeModel(), "A");
+        EXPECT_EQ(fm.getMachineSerialNumber(), "1");
+    }
+}
+
+TEST(FailingMTMSTest, StreamConstructorTest)
+{
+    std::vector<uint8_t> data{0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20,
+                              0x00, 'T',  'T',  'T',  'T',  '-',  'M',
+                              'M',  'M',  '1',  '2',  '3',  '4',  '5',
+                              '6',  '7',  '8',  '9',  'A',  'B',  'C'};
+    Stream stream{data};
+    FailingMTMS fm{stream};
+
+    EXPECT_EQ(fm.valid(), true);
+
+    EXPECT_EQ(fm.header().id, 0x4D54);
+    EXPECT_EQ(fm.header().size, FailingMTMS::flattenedSize());
+    EXPECT_EQ(fm.header().version, 0x01);
+    EXPECT_EQ(fm.header().subType, 0x00);
+    EXPECT_EQ(fm.header().componentID, 0x2000);
+
+    EXPECT_EQ(fm.getMachineTypeModel(), "TTTT-MMM");
+    EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC");
+}
+
+TEST(FailingMTMSTest, BadStreamConstructorTest)
+{
+    // too short
+    std::vector<uint8_t> data{
+        0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20, 0x00, 'T', 'T',
+    };
+    Stream stream{data};
+    FailingMTMS fm{stream};
+
+    EXPECT_EQ(fm.valid(), false);
+}
+
+TEST(FailingMTMSTest, FlattenTest)
+{
+    std::vector<uint8_t> data{0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20,
+                              0x00, 'T',  'T',  'T',  'T',  '-',  'M',
+                              'M',  'M',  '1',  '2',  '3',  '4',  '5',
+                              '6',  '7',  '8',  '9',  'A',  'B',  'C'};
+    Stream stream{data};
+    FailingMTMS fm{stream};
+
+    // flatten and check results
+    std::vector<uint8_t> newData;
+    Stream newStream{newData};
+
+    fm.flatten(newStream);
+    EXPECT_EQ(data, newData);
+}
diff --git a/test/openpower-pels/mocks.hpp b/test/openpower-pels/mocks.hpp
new file mode 100644
index 0000000..f6bd86a
--- /dev/null
+++ b/test/openpower-pels/mocks.hpp
@@ -0,0 +1,21 @@
+#include "extensions/openpower-pels/data_interface.hpp"
+
+#include <gmock/gmock.h>
+
+namespace openpower
+{
+namespace pels
+{
+
+class MockDataInterface : public DataInterfaceBase
+{
+  public:
+    MockDataInterface()
+    {
+    }
+    MOCK_CONST_METHOD0(getMachineTypeModel, std::string());
+    MOCK_CONST_METHOD0(getMachineSerialNumber, std::string());
+};
+
+} // namespace pels
+} // namespace openpower
