/* Copyright (c) 2018, MIPI Alliance, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Contributors: * Norbert Schulz (Intel Corporation) - Initial API and implementation */ #include #include #include "mipi_syst_gtest.h" #if defined(MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA) &&\ defined(MIPI_SYST_PCFG_ENABLE_DEFAULT_SCATTER_WRITE) &&\ defined(MIPI_SYST_PCFG_ENABLE_PRINTF_API) #define mipi_syst_write_printf_string(a,b,c, ...) \ (sstr.str(""),\ ::mipi_syst_write_printf_string(a,b,c, __VA_ARGS__ ),\ result = sstr.str(),\ result.c_str()) #define mipi_syst_write_printf_catalog64(a,b,c, ...) \ (sstr.str(""),\ ::mipi_syst_write_printf_catalog64(a,b,c, __VA_ARGS__ ),\ result = sstr.str(),\ result.c_str()) #define mipi_syst_write_printf_catalog32(a,b,c, ...) \ (sstr.str(""),\ ::mipi_syst_write_printf_catalog32(a,b,c, __VA_ARGS__ ),\ result = sstr.str(),\ result.c_str()) class MipiSysTFixturePrintf : public MipiSysTFixtureOutput { public: void SetUp() { MipiSysTFixtureOutput::SetUp(); } void TearDown() { MipiSysTFixtureOutput::TearDown(); } static std::string result; }; std::string MipiSysTFixturePrintf::result; TEST_F(MipiSysTFixturePrintf, syst_printf_null) { EXPECT_STREQ( xform(""), MIPI_SYST_PRINTF(0, MIPI_SYST_SEVERITY_INFO, (char*) 0) ); EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]00076c756e28296c00"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, (char*) 0) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_basic) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000100"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "") ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0003252500"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%%") ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000e6f77206f6c6c656820646c720021"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "hello world !") ); } TEST_F(MipiSysTFixturePrintf, syst_printf_invalid) { EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]00076c756e28296c00"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, 0) ); EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]0003622500"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%b", 1) ); std::string tooLong(MIPI_SYST_PCFG_PRINTF_ARGBUF_SIZE, 'X'); EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]00205858585858585858585858585858585858585858585858585858585858585858"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, tooLong.c_str(), 1) ); tooLong.resize(MIPI_SYST_PCFG_PRINTF_ARGBUF_SIZE /2); EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]0006252073250073"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%s %s", tooLong.c_str(), tooLong.c_str()) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_flags) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400642b25"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%+d", 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400642d25"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%-d", 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400642025"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "% d", 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400642325"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%#d", 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400643025"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%0d", 0x11223344) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_width) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00081122334400643325"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%3d", 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000c000000ab00642a2511223344"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%*d", 0xab, 0x11223344) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0012ccdd00642a2e2a25334412345678aabb1122"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%*.*d", 0xaabbccdd, 0x12345678, 0x11223344) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_floatingpoint) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea006625092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%f", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea004625092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%F", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea006525092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%e", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea004525092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%E", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea006725092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%g", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea006125092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%a", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea004125092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%A", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea004725092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%G", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000c54442eea00664c25400921fb"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%Lf", (long double)3.14159265359) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_floatingpoint_precison) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bfb54442eea006625092140"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%f", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000c54442eea00663325400921fb"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%3f", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0010006630312e313125400921fb54442eea"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%11.10f", 3.14159265359) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0016000a00662a2e2a252eea0000000b000021fb54444009"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%*.*f", 10, 11, 3.14159265359) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_modifier) { unsigned int hh = 0x12; unsigned short int h = 0x1234; long int l = (long int)-1; unsigned long long int ll = 0x1122334455667788ull; uintmax_t j = 0x1122334455667788ull; size_t z = (size_t)-1; ptrdiff_t t = (ptrdiff_t)-1; EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0009000012006468682500"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%hhd", hh) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00080000123400646825"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%hd", h) ); #if defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000cffffffff00646c25ffffffff"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%ld", l) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000cffffffff00647a25ffffffff"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%zd", z) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000cffffffff00647425ffffffff"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%td", t) ); #else EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0008ffffffff00646c25"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%ld", l) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0008ffffffff00647a25"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%zd", z) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0008ffffffff00647425"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%td", t) ); #endif EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000d66778800646c6c252233445511"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%lld", ll) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000c5566778800646a2511223344"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%jd", j) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_pointer) { void * p = (void*)-1; if (sizeof(p) == 8) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000bffffffffff007025ffffff"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%p", p) ); } else { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]0007ff007025ffffff"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%p", p) ); } } TEST_F(MipiSysTFixturePrintf, syst_printf_char) { char c = 'C'; wint_t w = 'W'; EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]000743006325000000"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%c", c) ); EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00080000005700636c25"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "%lc", w) ); } TEST_F(MipiSysTFixturePrintf, syst_printf_combinations) { EXPECT_STREQ( xform("0b012242[typ=2:b mu=1:2 sev=4 len]00316a20732520656854766f206465706d7525206568742072656d6974206425207300776f63002e7365000005006e6f6f6d00"), MIPI_SYST_PRINTF(ph, MIPI_SYST_SEVERITY_INFO, "The %s jumped over the %s %d times.", "cow", "moon", 5) ); } #if defined(MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD) TEST_F(MipiSysTFixturePrintf, syst_printf_loc) { EXPECT_STREQ( xform("0b012342[typ=2:b mu=1:2 sev=4 loc len]005678abcd00316a20732520656854766f206465706d7525206568742072656d6974206425207300776f63002e7365000005006e6f6f6d00"), MIPI_SYST_PRINTF_LOC16(ph, MIPI_SYST_SEVERITY_INFO, 0xabcd, "The %s jumped over the %s %d times.", "cow", "moon", 5) ); EXPECT_STREQ( xform("0b012342[typ=2:b mu=1:2 sev=4 loc len]0112345678aabbccdd00316a20732520656854766f206465706d7525206568742072656d6974206425207300776f63002e7365000005006e6f6f6d00"), MIPI_SYST_PRINTF_LOC32(ph, MIPI_SYST_SEVERITY_INFO, 0xaabbccdd, "The %s jumped over the %s %d times.", "cow", "moon", 5) ); #if defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("0b012342[typ=2:b mu=1:2 sev=4 loc len]0312345678aabbccdd00316a20732520656854766f206465706d7525206568742072656d6974206425207300776f63002e7365000005006e6f6f6d00"), MIPI_SYST_PRINTF_LOCADDR(ph, MIPI_SYST_SEVERITY_INFO, "The %s jumped over the %s %d times.", "cow", "moon", 5) ); #else EXPECT_STREQ( xform("0b012342[typ=2:b mu=1:2 sev=4 loc len]021234567800316a20732520656854766f206465706d7525206568742072656d6974206425207300776f63002e7365000005006e6f6f6d00"), MIPI_SYST_PRINTF_LOCADDR(ph, MIPI_SYST_SEVERITY_INFO, "The %s jumped over the %s %d times.", "cow", "moon", 5) ); #endif } #endif // MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD #if defined(MIPI_SYST_PCFG_ENABLE_CATID64_API) TEST_F(MipiSysTFixturePrintf, syst_catalog64_printf_null) { EXPECT_STREQ( xform(""), MIPI_SYST_CATPRINTF64(NULL, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "") ); } TEST_F(MipiSysTFixturePrintf, syst_catalog64_printf_invalid) { EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]000761746163677200"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, -1, -1) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog64_printf_basic) { EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]00081122334455667788"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "") ); // check that formt string is not added into payload EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]00081122334455667788"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "Hello world") ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778800000058"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%c", MIPI_SYST_PARAM_CHAR('X')) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778800000058"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%c", MIPI_SYST_PARAM_WCHAR(L'X')) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c1122334455667788abcd1234"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%c", MIPI_SYST_PARAM_INT(0xabcd1234)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677881234567887654321"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%lld", MIPI_SYST_PARAM_LONGLONG(0x1234567887654321ull)) ); #if defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677880000000012345678"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%ld", MIPI_SYST_PARAM_LONG(0x12345678)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677881234567887654321"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%z", MIPI_SYST_PARAM_SIZE_T(0x1234567887654321ull)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677881234567887654321"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%t", MIPI_SYST_PARAM_PTRDIFF_T(0x1234567887654321ull)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677881234567887654321"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%p", MIPI_SYST_PARAM_PTR(0x1234567887654321ull)) ); #else EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778812345678"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%ld", MIPI_SYST_PARAM_LONG(0x12345678)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778812345678"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%z", MIPI_SYST_PARAM_SIZE_T(0x12345678)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778812345678"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%t", MIPI_SYST_PARAM_PTRDIFF_T(0x12345678)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]000c112233445566778812345678"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%p", MIPI_SYST_PARAM_PTR(0x12345678)) ); #endif //defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677884000000000000000"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%f", MIPI_SYST_PARAM_FLOAT((float)2.0)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677884000000000000000"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%f", MIPI_SYST_PARAM_DOUBLE((double)2.0)) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001011223344556677884000000000000000"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788ull, "%lf", MIPI_SYST_PARAM_LONGDOUBLE((long double)2.0)) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog64_printf_string) { EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]0009112233445566778800"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "%s", MIPI_SYST_PARAM_CSTR("")) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001611223344556677886f77206f6c6c656820646c720021"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "%s", MIPI_SYST_PARAM_CSTR("hello world !")) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]00351122334455667788333300323200310035003434343400333636360035353535373737370036363638383838003737373838383800"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "%s", MIPI_SYST_PARAM_CSTR(""), MIPI_SYST_PARAM_CSTR("1"), MIPI_SYST_PARAM_CSTR("22"), MIPI_SYST_PARAM_CSTR("333"), MIPI_SYST_PARAM_CSTR("4444"), MIPI_SYST_PARAM_CSTR("55555"), MIPI_SYST_PARAM_CSTR("666666"), MIPI_SYST_PARAM_CSTR("7777777"), MIPI_SYST_PARAM_CSTR("88888888") ) ); EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001e11223344556677886f77206f6c6c65683231002120646c7212340033abcd"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "%s %s %d", MIPI_SYST_PARAM_CSTR("hello world !"), MIPI_SYST_PARAM_CSTR("123"), MIPI_SYST_PARAM_INT(0xabcd1234) ) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog64_printf_mixed) { EXPECT_STREQ( xform("02012243[typ=3:2 mu=1:2 sev=4 len]001e11223344556677886f77206f6c6c65683231002120646c7212340033abcd"), MIPI_SYST_CATPRINTF64(ph, MIPI_SYST_SEVERITY_INFO, 0x1122334455667788, "%s %s %d", MIPI_SYST_PARAM_CSTR("hello world !"), MIPI_SYST_PARAM_CSTR("123"), MIPI_SYST_PARAM_INT(0xabcd1234) ) ); } #endif // #if defined(MIPI_SYST_PCFG_ENABLE_CATID64_API) #if defined(MIPI_SYST_PCFG_ENABLE_CATID32_API) TEST_F(MipiSysTFixturePrintf, syst_catalog32_printf_null) { EXPECT_STREQ( xform(""), MIPI_SYST_CATPRINTF32(NULL, MIPI_SYST_SEVERITY_INFO, 0x11223344, "") ); } TEST_F(MipiSysTFixturePrintf, syst_catalog32_printf_invalid) { EXPECT_STREQ( xform("05012242[typ=2:5 mu=1:2 sev=4 len]000761746163677200"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, -1, -1) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog32_printf_basic) { EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000411223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "") ); // check that format string is not added into payload EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000411223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "Hello world") ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00080000005811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%c", MIPI_SYST_PARAM_CHAR('X')) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00080000123411223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%hhd", MIPI_SYST_PARAM_SHORT(0x1234)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00080000005811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%lc", MIPI_SYST_PARAM_WCHAR(L'X')) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]0008abcd123411223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%d", MIPI_SYST_PARAM_INT(0xabcd1234)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c876543211122334412345678"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%lld", MIPI_SYST_PARAM_LONGLONG(0x1234567887654321ull)) ); #if defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c123456781122334400000000"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%ld", MIPI_SYST_PARAM_LONG(0x12345678)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c876543211122334412345678"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%z", MIPI_SYST_PARAM_SIZE_T(0x1234567887654321ull)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c876543211122334412345678"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%t", MIPI_SYST_PARAM_PTRDIFF_T(0x1234567887654321ull)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c876543211122334412345678"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%p", MIPI_SYST_PARAM_PTR(0x1234567887654321ull)) ); #else EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00081234567811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%ld", MIPI_SYST_PARAM_LONG(0x12345678)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00081234567811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%z", MIPI_SYST_PARAM_SIZE_T(0x12345678)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00081234567811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%t", MIPI_SYST_PARAM_PTRDIFF_T(0x12345678)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00081234567811223344"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%p", MIPI_SYST_PARAM_PTR(0x12345678)) ); #endif //defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR) EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c000000001122334440000000"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%f", MIPI_SYST_PARAM_FLOAT((float)2.0)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c000000001122334440000000"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%f", MIPI_SYST_PARAM_DOUBLE((double)2.0)) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]000c000000001122334440000000"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344ull, "%lf", MIPI_SYST_PARAM_LONGDOUBLE((long double)2.0)) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog32_printf_string) { EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00051122334400"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "%s", MIPI_SYST_PARAM_CSTR("")) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]00126c6c65681122334420646c726f77206f0021"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "%s", MIPI_SYST_PARAM_CSTR("hello world !")) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]003132003100112233443434003333330032353535353500343400363636363636000037373737373737383838383838383800"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "%s", MIPI_SYST_PARAM_CSTR(""), MIPI_SYST_PARAM_CSTR("1"), MIPI_SYST_PARAM_CSTR("22"), MIPI_SYST_PARAM_CSTR("333"), MIPI_SYST_PARAM_CSTR("4444"), MIPI_SYST_PARAM_CSTR("55555"), MIPI_SYST_PARAM_CSTR("666666"), MIPI_SYST_PARAM_CSTR("7777777"), MIPI_SYST_PARAM_CSTR("88888888") ) ); EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]001a6c6c65681122334420646c726f77206f1234003332310021abcd"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "%s %s %d", MIPI_SYST_PARAM_CSTR("hello world !"), MIPI_SYST_PARAM_CSTR("123"), MIPI_SYST_PARAM_INT(0xabcd1234) ) ); } TEST_F(MipiSysTFixturePrintf, syst_catalog32_printf_mixed) { EXPECT_STREQ( xform("01012243[typ=3:1 mu=1:2 sev=4 len]001a6c6c65681122334420646c726f77206f1234003332310021abcd"), MIPI_SYST_CATPRINTF32(ph, MIPI_SYST_SEVERITY_INFO, 0x11223344, "%s %s %d", MIPI_SYST_PARAM_CSTR("hello world !"), MIPI_SYST_PARAM_CSTR("123"), MIPI_SYST_PARAM_INT(0xabcd1234) ) ); } #endif // #if defined(MIPI_SYST_PCFG_ENABLE_CATID32_API) #endif //MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA && MIPI_SYST_PCFG_ENABLE_DEFAULT_SCATTER_WRITE && MIPI_SYST_PCFG_ENABLE_PRINTF_API