1 /** 2 * Copyright © 2019 IBM Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #include "extensions/openpower-pels/failing_mtms.hpp" 17 #include "mocks.hpp" 18 19 #include <gtest/gtest.h> 20 21 using namespace openpower::pels; 22 using ::testing::Return; 23 24 TEST(FailingMTMSTest, SizeTest) 25 { 26 EXPECT_EQ(FailingMTMS::flattenedSize(), 28); 27 } 28 29 TEST(FailingMTMSTest, ConstructorTest) 30 { 31 // Note: the TypeModel field is 8B, and the SN field is 12B 32 { 33 MockDataInterface dataIface; 34 35 EXPECT_CALL(dataIface, getMachineTypeModel()) 36 .WillOnce(Return("AAAA-BBB")); 37 38 EXPECT_CALL(dataIface, getMachineSerialNumber()) 39 .WillOnce(Return("123456789ABC")); 40 41 FailingMTMS fm{dataIface}; 42 43 // Check the section header 44 EXPECT_EQ(fm.header().id, 0x4D54); 45 EXPECT_EQ(fm.header().size, FailingMTMS::flattenedSize()); 46 EXPECT_EQ(fm.header().version, 0x01); 47 EXPECT_EQ(fm.header().subType, 0x00); 48 EXPECT_EQ(fm.header().componentID, 0x2000); 49 50 EXPECT_EQ(fm.getMachineTypeModel(), "AAAA-BBB"); 51 EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC"); 52 } 53 54 // longer than the max - will truncate 55 { 56 MockDataInterface dataIface; 57 58 EXPECT_CALL(dataIface, getMachineTypeModel()) 59 .WillOnce(Return("AAAA-BBBTOOLONG")); 60 61 EXPECT_CALL(dataIface, getMachineSerialNumber()) 62 .WillOnce(Return("123456789ABCTOOLONG")); 63 64 FailingMTMS fm{dataIface}; 65 66 EXPECT_EQ(fm.getMachineTypeModel(), "AAAA-BBB"); 67 EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC"); 68 } 69 70 // shorter than the max 71 { 72 MockDataInterface dataIface; 73 74 EXPECT_CALL(dataIface, getMachineTypeModel()).WillOnce(Return("A")); 75 76 EXPECT_CALL(dataIface, getMachineSerialNumber()).WillOnce(Return("1")); 77 78 FailingMTMS fm{dataIface}; 79 80 EXPECT_EQ(fm.getMachineTypeModel(), "A"); 81 EXPECT_EQ(fm.getMachineSerialNumber(), "1"); 82 } 83 } 84 85 TEST(FailingMTMSTest, StreamConstructorTest) 86 { 87 std::vector<uint8_t> data{0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20, 88 0x00, 'T', 'T', 'T', 'T', '-', 'M', 89 'M', 'M', '1', '2', '3', '4', '5', 90 '6', '7', '8', '9', 'A', 'B', 'C'}; 91 Stream stream{data}; 92 FailingMTMS fm{stream}; 93 94 EXPECT_EQ(fm.valid(), true); 95 96 EXPECT_EQ(fm.header().id, 0x4D54); 97 EXPECT_EQ(fm.header().size, FailingMTMS::flattenedSize()); 98 EXPECT_EQ(fm.header().version, 0x01); 99 EXPECT_EQ(fm.header().subType, 0x00); 100 EXPECT_EQ(fm.header().componentID, 0x2000); 101 102 EXPECT_EQ(fm.getMachineTypeModel(), "TTTT-MMM"); 103 EXPECT_EQ(fm.getMachineSerialNumber(), "123456789ABC"); 104 } 105 106 TEST(FailingMTMSTest, BadStreamConstructorTest) 107 { 108 // too short 109 std::vector<uint8_t> data{ 110 0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20, 0x00, 'T', 'T', 111 }; 112 Stream stream{data}; 113 FailingMTMS fm{stream}; 114 115 EXPECT_EQ(fm.valid(), false); 116 } 117 118 TEST(FailingMTMSTest, FlattenTest) 119 { 120 std::vector<uint8_t> data{0x4D, 0x54, 0x00, 0x1C, 0x01, 0x00, 0x20, 121 0x00, 'T', 'T', 'T', 'T', '-', 'M', 122 'M', 'M', '1', '2', '3', '4', '5', 123 '6', '7', '8', '9', 'A', 'B', 'C'}; 124 Stream stream{data}; 125 FailingMTMS fm{stream}; 126 127 // flatten and check results 128 std::vector<uint8_t> newData; 129 Stream newStream{newData}; 130 131 fm.flatten(newStream); 132 EXPECT_EQ(data, newData); 133 } 134