mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-27 03:33:50 +00:00
137 lines
4.1 KiB
C
137 lines
4.1 KiB
C
/* 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;
|
|
}
|