Index: src/platform/vboot_reference/cgptlib/tests/cgpt_test.c |
diff --git a/src/platform/vboot_reference/cgptlib/tests/cgpt_test.c b/src/platform/vboot_reference/cgptlib/tests/cgpt_test.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b5b26e70f9ed4d91ad2b028bd542c989646a3ef4 |
--- /dev/null |
+++ b/src/platform/vboot_reference/cgptlib/tests/cgpt_test.c |
@@ -0,0 +1,136 @@ |
+/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "cgpt.h" |
+#include "cgpt_test.h" |
+ |
+#define TEST_CASE(func) #func, func |
+typedef int (*test_func)(void); |
+ |
+/* Tests if header CRC in two copies are calculated. */ |
+int HeaderCrcTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if myLBA field is checked (1 for primary, last for secondary). */ |
+int MyLbaTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if SizeOfPartitionEntry is checked. SizeOfPartitionEntry must be |
+ * between 128 and 512, and a multiple of 8. */ |
+int SizeOfPartitionEntryTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if NumberOfPartitionEntries is checes. NumberOfPartitionEntries must |
+ * be between 32 and 512, and SizeOfPartitionEntry * NumberOfPartitionEntries |
+ * must be 16384. */ |
+int NumberOfPartitionEntriesTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if PartitionEntryLBA in primary/secondary headers is checked. */ |
+int PartitionEntryLbaTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if FirstUsableLBA and LastUsableLBA are checked. |
+ * FirstUsableLBA must be after the end of the primary GPT table array. |
+ * LastUsableLBA must be before the start of the secondary GPT table array. |
+ * FirstUsableLBA <= LastUsableLBA. */ |
+int FirstUsableLbaAndLastUsableLbaTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if GPTInit() handles non-identical partition entries well. |
+ * Two copies of partition table entries must be identical. If not, we trust the |
+ * primary table entries, and mark secondary as modified (see Caller's write- |
+ * back order below). */ |
+int IdenticalEntriesTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if GPTInit() handles non-identical headers well. |
+ * Two partition headers must be identical. If not, we trust the primary |
+ * partition header, and mark secondary as modified (see Caller's write-back |
+ * order below). */ |
+int IdenticalHeaderTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if PartitionEntryArrayCRC32 is checked. |
+ * PartitionEntryArrayCRC32 must be calculated over SizeOfPartitionEntry * |
+ * NumberOfPartitionEntries bytes. |
+ */ |
+int EntriesCrcTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if partition geometry is checked. |
+ * All active (non-zero PartitionTypeGUID) partition entries should have: |
+ * entry.StartingLBA >= header.FirstUsableLBA |
+ * entry.EndingLBA <= header.LastUsableLBA |
+ * entry.StartingLBA <= entry.EndingLBA |
+ */ |
+int ValidEntryTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if overlapped partition tables can be detected. */ |
+int NoOverlappedPartitionTest() { |
+ return TEST_FAIL; |
+} |
+ |
+/* Tests if GPTNextKernelEntry() can survive in different corrupt header/entries |
+ * combinations, like: |
+ * primary GPT header - valid |
+ * primary partition table - invalid |
+ * secondary partition table - valid |
+ * secondary GPT header - invalid |
+ */ |
+int CorruptCombinationTest() { |
+ return TEST_FAIL; |
+} |
+ |
+int main(int argc, char *argv[]) { |
+ int i; |
+ struct { |
+ char *name; |
+ test_func fp; |
+ int retval; |
+ } test_cases[] = { |
+ { TEST_CASE(HeaderCrcTest), }, |
+ { TEST_CASE(MyLbaTest), }, |
+ { TEST_CASE(SizeOfPartitionEntryTest), }, |
+ { TEST_CASE(NumberOfPartitionEntriesTest), }, |
+ { TEST_CASE(PartitionEntryLbaTest), }, |
+ { TEST_CASE(FirstUsableLbaAndLastUsableLbaTest), }, |
+ { TEST_CASE(IdenticalEntriesTest), }, |
+ { TEST_CASE(IdenticalHeaderTest), }, |
+ { TEST_CASE(EntriesCrcTest), }, |
+ { TEST_CASE(ValidEntryTest), }, |
+ { TEST_CASE(NoOverlappedPartitionTest), }, |
+ { TEST_CASE(CorruptCombinationTest), }, |
+ }; |
+ |
+ for (i = 0; i < sizeof(test_cases)/sizeof(test_cases[0]); ++i) { |
+ printf("Running %s() ...\n", test_cases[i].name); |
+ test_cases[i].retval = test_cases[i].fp(); |
+ if (test_cases[i].retval) |
+ printf(COL_RED "[ERROR]" COL_STOP " %s()\n\n", test_cases[i].name); |
+ else |
+ printf(COL_GREEN "[PASS]" COL_STOP " %s()\n\n", test_cases[i].name); |
+ } |
+ |
+ printf("\n--------------------------------------------------\n"); |
+ printf("The following test cases are failed:\n"); |
+ for (i = 0; i < sizeof(test_cases)/sizeof(test_cases[0]); ++i) { |
+ if (test_cases[i].retval) |
+ printf(" %s()\n", test_cases[i].name); |
+ } |
+ |
+ return 0; |
+} |