diff options
author | Randall Spangler <rspangler@chromium.org> | 2011-08-24 14:16:01 -0700 |
---|---|---|
committer | Randall Spangler <rspangler@chromium.org> | 2011-08-24 14:38:02 -0700 |
commit | f02bbb4635175d6c3ba8f6557802f37e20160533 (patch) | |
tree | 4e79dc4ab7bcf8fa84754a60f16f32e0685077eb | |
parent | 1f5d53f7bd4dc590b47f21f858d021ac53190a17 (diff) | |
download | vboot-f02bbb4635175d6c3ba8f6557802f37e20160533.tar.gz |
Add tests for utility.h and sysincludes.h macros
BUG=chromium-os:17564
TEST=make && make runtests
Change-Id: Id0a834c2b234d5f9cbbb37a69426e2b97c734d0a
Reviewed-on: http://gerrit.chromium.org/gerrit/6608
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Tested-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | firmware/include/utility.h | 2 | ||||
-rw-r--r-- | firmware/include/vboot_struct.h | 3 | ||||
-rw-r--r-- | tests/utility_tests.c | 34 | ||||
-rw-r--r-- | tests/vboot_common_tests.c | 23 |
4 files changed, 58 insertions, 4 deletions
diff --git a/firmware/include/utility.h b/firmware/include/utility.h index 8676345d..ddfd3d18 100644 --- a/firmware/include/utility.h +++ b/firmware/include/utility.h @@ -46,7 +46,7 @@ /* Combine [msw] and [lsw] uint16s to a uint32_t with its [msw] and * [lsw] forming the most and least signficant 16-bit words. */ -#define CombineUint16Pair(msw,lsw) (((msw) << 16) | \ +#define CombineUint16Pair(msw,lsw) (((uint32_t)(msw) << 16) | \ (((lsw)) & 0xFFFF)) /* Return the minimum of (a) or (b). */ #define Min(a, b) (((a) < (b)) ? (a) : (b)) diff --git a/firmware/include/vboot_struct.h b/firmware/include/vboot_struct.h index b9dfb808..795523ed 100644 --- a/firmware/include/vboot_struct.h +++ b/firmware/include/vboot_struct.h @@ -375,11 +375,12 @@ typedef struct VbSharedDataHeader { } __attribute__((packed)) VbSharedDataHeader; -/* Size of VbSharedDataheader for each older version */ +/* Size of VbSharedDataheader for each version */ // TODO: crossystem needs not to // fail if called on a v1 system where sizeof(VbSharedDataHeader) was smaller #define VB_SHARED_DATA_HEADER_SIZE_V1 1072 +#define VB_SHARED_DATA_HEADER_SIZE_V2 1096 #define VB_SHARED_DATA_VERSION 2 /* Version for struct_version */ diff --git a/tests/utility_tests.c b/tests/utility_tests.c index 9fc1dab5..03ba5f9e 100644 --- a/tests/utility_tests.c +++ b/tests/utility_tests.c @@ -2,7 +2,7 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * - * Tests for utility functions. + * Tests for utility functions */ #include <stdio.h> @@ -16,6 +16,37 @@ #include "vboot_common.h" +/* Test utility.h and sysincludes.h macros */ +static void MacrosTest(void) { + int64_t a = -10, b = -20; + uint64_t u = UINT64_C(0xABCD00000000); + uint64_t v = UINT64_C(0xABCD000000); + + TEST_EQ(CombineUint16Pair(1, 2), 0x00010002, "CombineUint16Pair"); + TEST_EQ(CombineUint16Pair(0xFFFE, 0xFFFF), 0xFFFEFFFF, + "CombineUint16Pair 2"); + TEST_EQ(CombineUint16Pair(-4, -16), 0xFFFCFFF0, + "CombineUint16Pair big negative"); + TEST_EQ(CombineUint16Pair(0x10003, 0x10004), 0x00030004, + "CombineUint16Pair overflow"); + + TEST_EQ(Min(1, 2), 1, "Min 1"); + TEST_EQ(Min(4, 3), 3, "Min 2"); + TEST_EQ(Min(5, 5), 5, "Min 5"); + TEST_EQ(Min(a, b), b, "Min uint64 1"); + TEST_EQ(Min(b, a), b, "Min uint64 2"); + TEST_EQ(Min(b, b), b, "Min uint64 same"); + + TEST_EQ(UINT64_RSHIFT(u, 8), v, "UINT64_RSHIFT 8"); + TEST_EQ(UINT64_RSHIFT(u, 0), u, "UINT64_RSHIFT 0"); + TEST_EQ(UINT64_RSHIFT(u, 36), UINT64_C(0xABC), "UINT64_RSHIFT 36"); + + TEST_EQ(UINT64_MULT32(v, 0), 0, "UINT64_MULT32 0"); + TEST_EQ(UINT64_MULT32(v, 1), v, "UINT64_MULT32 1"); + TEST_EQ(UINT64_MULT32(v, 256), u, "UINT64_MULT32 256"); +} + + /* Test Memset */ static void MemsetTest(void) { char dest[128]; @@ -56,6 +87,7 @@ __pragma(warning (disable: 4100)) int main(int argc, char* argv[]) { int error_code = 0; + MacrosTest(); MemsetTest(); SafeMemcmpTest(); diff --git a/tests/vboot_common_tests.c b/tests/vboot_common_tests.c index adb57084..9180958d 100644 --- a/tests/vboot_common_tests.c +++ b/tests/vboot_common_tests.c @@ -21,12 +21,32 @@ static void StructPackingTest(void) { "sizeof(VbKeyBlockHeader)"); TEST_EQ(EXPECTED_VBFIRMWAREPREAMBLEHEADER2_0_SIZE, sizeof(VbFirmwarePreambleHeader2_0), - "sizeof(VbFirmwarePreambleHeader)"); + "sizeof(VbFirmwarePreambleHeader2_0)"); TEST_EQ(EXPECTED_VBFIRMWAREPREAMBLEHEADER2_1_SIZE, sizeof(VbFirmwarePreambleHeader), "sizeof(VbFirmwarePreambleHeader)"); TEST_EQ(EXPECTED_VBKERNELPREAMBLEHEADER_SIZE, sizeof(VbKernelPreambleHeader), "sizeof(VbKernelPreambleHeader)"); + + TEST_EQ(VB_SHARED_DATA_HEADER_SIZE_V1, + (long)&((VbSharedDataHeader*)NULL)->recovery_reason, + "sizeof(VbSharedDataHeader) V1"); + + TEST_EQ(VB_SHARED_DATA_HEADER_SIZE_V2, + sizeof(VbSharedDataHeader), + "sizeof(VbSharedDataHeader) V2"); +} + + +/* Test array sized macro */ +static void ArraySizeTest(void) { + uint8_t arr1[12]; + uint32_t arr2[7]; + uint64_t arr3[9]; + + TEST_EQ(ARRAY_SIZE(arr1), 12, "ARRAYSIZE(uint8_t)"); + TEST_EQ(ARRAY_SIZE(arr2), 7, "ARRAYSIZE(uint32_t)"); + TEST_EQ(ARRAY_SIZE(arr3), 9, "ARRAYSIZE(uint64_t)"); } @@ -112,6 +132,7 @@ int main(int argc, char* argv[]) { int error_code = 0; StructPackingTest(); + ArraySizeTest(); VerifyHelperFunctions(); if (!gTestSuccess) |