Home | History | Annotate | Download | only in tests

Lines Matching refs:gpt

14 #include "gpt.h"
72 static void RefreshCrc32(GptData *gpt)
77 header = (GptHeader *)gpt->primary_header;
78 entries = (GptEntry *)gpt->primary_entries;
79 header2 = (GptHeader *)gpt->secondary_header;
80 entries2 = (GptEntry *)gpt->secondary_entries;
94 static void ZeroHeaders(GptData *gpt)
96 Memset(gpt->primary_header, 0, MAX_SECTOR_SIZE);
97 Memset(gpt->secondary_header, 0, MAX_SECTOR_SIZE);
100 static void ZeroEntries(GptData *gpt)
102 Memset(gpt->primary_entries, 0, PARTITION_ENTRIES_SIZE);
103 Memset(gpt->secondary_entries, 0, PARTITION_ENTRIES_SIZE);
106 static void ZeroHeadersEntries(GptData *gpt)
108 ZeroHeaders(gpt);
109 ZeroEntries(gpt);
119 static GptData gpt;
125 Memset(&gpt, 0, sizeof(gpt));
126 gpt.primary_header = primary_header;
127 gpt.primary_entries = primary_entries;
128 gpt.secondary_header = secondary_header;
129 gpt.secondary_entries = secondary_entries;
130 ZeroHeadersEntries(&gpt);
133 gpt.current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND;
135 return &gpt;
141 * have been pointed to the buffer, say, a gpt returned from GetEmptyGptData().
142 * This function returns a good (valid) copy of GPT layout described in top of
145 static void BuildTestGptData(GptData *gpt)
152 gpt->sector_bytes = DEFAULT_SECTOR_SIZE;
153 gpt->streaming_drive_sectors =
154 gpt->gpt_drive_sectors = DEFAULT_DRIVE_SECTORS;
155 gpt->current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND;
156 gpt->valid_headers = MASK_BOTH;
157 gpt->valid_entries = MASK_BOTH;
158 gpt->modified = 0;
161 header = (GptHeader *)gpt->primary_header;
162 entries = (GptEntry *)gpt->primary_entries;
194 header2 = (GptHeader *)gpt->secondary_header;
195 entries2 = (GptEntry *)gpt->secondary_entries;
202 RefreshCrc32(gpt);
222 GptData *gpt;
224 gpt = GetEmptyGptData();
225 BuildTestGptData(gpt);
226 EXPECT(GPT_SUCCESS == GptInit(gpt));
227 gpt->sector_bytes = 0;
228 EXPECT(GPT_ERROR_INVALID_SECTOR_SIZE == GptInit(gpt));
240 GptData *gpt;
256 gpt = GetEmptyGptData();
258 BuildTestGptData(gpt);
259 gpt->sector_bytes = cases[i].sector_bytes;
260 gpt->streaming_drive_sectors =
261 gpt->gpt_drive_sectors = cases[i].drive_sectors;
262 EXPECT(cases[i].expected_retval == CheckParameters(gpt));
271 GptData *gpt = GetEmptyGptData();
272 GptHeader *h1 = (GptHeader *)gpt->primary_header;
274 BuildTestGptData(gpt);
278 BuildTestGptData(gpt);
279 gpt->primary_header[0] ^= 0xa5;
283 BuildTestGptData(gpt);
284 gpt->primary_header[h1->size - 1] ^= 0x5a;
288 BuildTestGptData(gpt);
289 gpt->primary_header[h1->size] ^= 0x5a;
298 GptData *gpt = GetEmptyGptData();
299 GptHeader *h1 = (GptHeader *)gpt->primary_header;
300 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
351 GptData *gpt = GetEmptyGptData();
352 GptHeader *h1 = (GptHeader *)gpt->primary_header;
353 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
356 EXPECT(1 == CheckHeader(NULL, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
359 BuildTestGptData(gpt);
362 RefreshCrc32(gpt);
363 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
364 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
376 GptData *gpt = GetEmptyGptData();
377 GptHeader *h1 = (GptHeader *)gpt->primary_header;
378 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
393 BuildTestGptData(gpt);
396 RefreshCrc32(gpt);
398 EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
400 EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
408 GptData *gpt = GetEmptyGptData();
409 GptHeader *h1 = (GptHeader *)gpt->primary_header;
410 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
426 BuildTestGptData(gpt);
429 RefreshCrc32(gpt);
431 EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
433 EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
442 GptData *gpt = GetEmptyGptData();
443 GptHeader *h1 = (GptHeader *)gpt->primary_header;
444 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
446 BuildTestGptData(gpt);
450 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
451 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
453 RefreshCrc32(gpt);
454 EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
455 EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
463 GptData *gpt = GetEmptyGptData();
464 GptHeader *h1 = (GptHeader *)gpt->primary_header;
465 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
467 BuildTestGptData(gpt);
470 RefreshCrc32(gpt);
471 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
472 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
476 BuildTestGptData(gpt);
479 RefreshCrc32(gpt);
480 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
481 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
492 GptData *gpt = GetEmptyGptData();
493 GptHeader *h1 = (GptHeader *)gpt->primary_header;
494 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
510 BuildTestGptData(gpt);
517 RefreshCrc32(gpt);
519 EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
521 EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
534 GptData *gpt = GetEmptyGptData();
535 GptHeader *h1 = (GptHeader *)gpt->primary_header;
536 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
538 BuildTestGptData(gpt);
543 RefreshCrc32(gpt);
544 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
545 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
546 /* But it's okay to have less if the GPT structs are stored elsewhere. */
547 EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt
548 EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
557 GptData *gpt = GetEmptyGptData();
558 GptHeader *h1 = (GptHeader *)gpt->primary_header;
559 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
562 BuildTestGptData(gpt);
563 EXPECT(1 == CheckHeader(h1, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
564 EXPECT(1 == CheckHeader(h2, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
566 BuildTestGptData(gpt);
569 RefreshCrc32(gpt);
570 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
571 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
573 BuildTestGptData(gpt);
576 RefreshCrc32(gpt);
577 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
578 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
581 BuildTestGptData(gpt);
584 RefreshCrc32(gpt);
585 EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
586 EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
588 BuildTestGptData(gpt);
591 RefreshCrc32(gpt);
592 EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
593 EXPECT(0 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
595 BuildTestGptData(gpt);
598 RefreshCrc32(gpt);
600 * We support a padding between primary GPT header and its entries. So
603 EXPECT(0 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
608 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
610 BuildTestGptData(gpt);
613 RefreshCrc32(gpt);
614 EXPECT(1 == CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
615 EXPECT(1 == CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0));
621 * FirstUsableLBA must be after the end of the primary GPT table array.
622 * LastUsableLBA must be before the start of the secondary GPT table array.
627 GptData *gpt = GetEmptyGptData();
628 GptHeader *h1 = (GptHeader *)gpt->primary_header;
629 GptHeader *h2 = (GptHeader *)gpt->secondary_header;
655 BuildTestGptData(gpt);
662 RefreshCrc32(gpt);
664 EXPECT(CheckHeader(h1, 0, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
666 EXPECT(CheckHeader(h2, 1, gpt->streaming_drive_sectors, gpt->gpt_drive_sectors, 0) ==
679 GptData *gpt = GetEmptyGptData();
680 GptHeader *h1 = (GptHeader *)gpt->primary_header;
681 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
682 GptEntry *e2 = (GptEntry *)(gpt->secondary_entries);
685 BuildTestGptData(gpt);
688 gpt->primary_entries[0] ^= 0xa5; /* just XOR a non-zero value */
689 gpt->secondary_entries[TOTAL_ENTRIES_SIZE-1] ^= 0x5a;
705 GptData *gpt = GetEmptyGptData();
706 GptHeader *h1 = (GptHeader *)gpt->primary_header;
707 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
710 BuildTestGptData(gpt);
712 RefreshCrc32(gpt);
716 BuildTestGptData(gpt);
718 RefreshCrc32(gpt);
722 BuildTestGptData(gpt);
724 RefreshCrc32(gpt);
728 BuildTestGptData(gpt);
731 RefreshCrc32(gpt);
739 GptData *gpt = GetEmptyGptData();
740 GptHeader *h = (GptHeader *)gpt->primary_header;
741 GptEntry *e = (GptEntry *)gpt->primary_entries;
793 BuildTestGptData(gpt);
794 ZeroEntries(gpt);
806 RefreshCrc32(gpt);
816 GptData *gpt = GetEmptyGptData();
817 GptHeader *h1 = (GptHeader *)gpt->primary_header;
818 GptEntry *e1 = (GptEntry *)gpt->primary_entries;
822 BuildTestGptData(gpt);
823 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
824 EXPECT(MASK_BOTH == gpt->valid_headers);
825 EXPECT(MASK_BOTH == gpt->valid_entries);
827 GptRepair(gpt);
828 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
829 EXPECT(MASK_BOTH == gpt->valid_headers);
830 EXPECT(MASK_BOTH == gpt->valid_entries);
831 EXPECT(0 == gpt->modified);
834 BuildTestGptData(gpt);
835 gpt->sector_bytes = 1024;
836 EXPECT(GPT_ERROR_INVALID_SECTOR_SIZE == GptSanityCheck(gpt));
839 BuildTestGptData(gpt);
840 gpt->primary_header[0]++;
841 gpt->secondary_header[0]++;
842 EXPECT(GPT_ERROR_INVALID_HEADERS == GptSanityCheck(gpt));
843 EXPECT(0 == gpt->valid_headers);
844 EXPECT(0 == gpt->valid_entries);
846 GptRepair(gpt);
847 EXPECT(GPT_ERROR_INVALID_HEADERS == GptSanityCheck(gpt));
848 EXPECT(0 == gpt->valid_headers);
849 EXPECT(0 == gpt->valid_entries);
850 EXPECT(0 == gpt->modified);
852 BuildTestGptData(gpt);
853 gpt->primary_header[0]++;
854 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
855 EXPECT(MASK_SECONDARY == gpt->valid_headers);
856 EXPECT(MASK_BOTH == gpt->valid_entries);
857 GptRepair(gpt);
858 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
859 EXPECT(MASK_BOTH == gpt->valid_headers);
860 EXPECT(MASK_BOTH == gpt->valid_entries);
861 EXPECT(GPT_MODIFIED_HEADER1 == gpt->modified);
863 BuildTestGptData(gpt);
864 gpt->secondary_header[0]++;
865 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
866 EXPECT(MASK_PRIMARY == gpt->valid_headers);
867 EXPECT(MASK_BOTH == gpt->valid_entries);
868 GptRepair(gpt);
869 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
870 EXPECT(MASK_BOTH == gpt->valid_headers);
871 EXPECT(MASK_BOTH == gpt->valid_entries);
872 EXPECT(GPT_MODIFIED_HEADER2 == gpt->modified);
878 BuildTestGptData(gpt);
880 RefreshCrc32(gpt);
881 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
882 EXPECT(MASK_PRIMARY == gpt->valid_headers);
883 EXPECT(MASK_BOTH == gpt->valid_entries);
884 GptRepair(gpt);
885 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
886 EXPECT(MASK_BOTH == gpt->valid_headers);
887 EXPECT(MASK_BOTH == gpt->valid_entries);
888 EXPECT(GPT_MODIFIED_HEADER2 == gpt->modified);
891 BuildTestGptData(gpt);
892 gpt->primary_entries[0]++;
893 gpt->secondary_entries[0]++;
894 EXPECT(GPT_ERROR_INVALID_ENTRIES == GptSanityCheck(gpt));
895 EXPECT(MASK_BOTH == gpt->valid_headers);
896 EXPECT(MASK_NONE == gpt->valid_entries);
898 GptRepair(gpt);
899 EXPECT(GPT_ERROR_INVALID_ENTRIES == GptSanityCheck(gpt));
900 EXPECT(MASK_BOTH == gpt->valid_headers);
901 EXPECT(MASK_NONE == gpt->valid_entries);
902 EXPECT(0 == gpt->modified);
904 BuildTestGptData(gpt);
905 gpt->primary_entries[0]++;
906 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
907 EXPECT(MASK_BOTH == gpt->valid_headers);
908 EXPECT(MASK_SECONDARY == gpt->valid_entries);
909 GptRepair(gpt);
910 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
911 EXPECT(MASK_BOTH == gpt->valid_headers);
912 EXPECT(MASK_BOTH == gpt->valid_entries);
913 EXPECT(GPT_MODIFIED_ENTRIES1 == gpt->modified);
915 BuildTestGptData(gpt);
916 gpt->secondary_entries[0]++;
917 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
918 EXPECT(MASK_BOTH == gpt->valid_headers);
919 EXPECT(MASK_PRIMARY == gpt->valid_entries);
920 GptRepair(gpt);
921 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
922 EXPECT(MASK_BOTH == gpt->valid_headers);
923 EXPECT(MASK_BOTH == gpt->valid_entries);
924 EXPECT(GPT_MODIFIED_ENTRIES2 == gpt->modified);
932 BuildTestGptData(gpt);
934 RefreshCrc32(gpt);
935 tempptr = gpt->primary_entries;
936 gpt->primary_entries = gpt->secondary_entries;
937 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
938 EXPECT(MASK_SECONDARY == gpt->valid_headers);
939 EXPECT(MASK_BOTH == gpt->valid_entries);
940 gpt->primary_entries = tempptr;
943 BuildTestGptData(gpt);
944 gpt->primary_header[0]++;
945 gpt->primary_entries[0]++;
946 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
947 EXPECT(MASK_SECONDARY == gpt->valid_headers);
948 EXPECT(MASK_SECONDARY == gpt->valid_entries);
949 GptRepair(gpt);
950 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
951 EXPECT(MASK_BOTH == gpt->valid_headers);
952 EXPECT(MASK_BOTH == gpt->valid_entries);
953 EXPECT((GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1) == gpt->modified);
955 BuildTestGptData(gpt);
956 gpt->secondary_header[0]++;
957 gpt->secondary_entries[0]++;
958 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
959 EXPECT(MASK_PRIMARY == gpt->valid_headers);
960 EXPECT(MASK_PRIMARY == gpt->valid_entries);
961 GptRepair(gpt);
962 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
963 EXPECT(MASK_BOTH == gpt->valid_headers);
964 EXPECT(MASK_BOTH == gpt->valid_entries);
965 EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified);
968 BuildTestGptData(gpt);
969 gpt->primary_header[0]++;
970 gpt->secondary_entries[0]++;
971 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
972 EXPECT(MASK_SECONDARY == gpt->valid_headers);
973 EXPECT(MASK_PRIMARY == gpt->valid_entries);
974 GptRepair(gpt);
975 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
976 EXPECT(MASK_BOTH == gpt->valid_headers);
977 EXPECT(MASK_BOTH == gpt->valid_entries);
978 EXPECT((GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES2) == gpt->modified);
980 BuildTestGptData(gpt);
981 gpt->secondary_header[0]++;
982 gpt->primary_entries[0]++;
983 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
984 EXPECT(MASK_PRIMARY == gpt->valid_headers);
985 EXPECT(MASK_SECONDARY == gpt->valid_entries);
986 GptRepair(gpt);
987 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
988 EXPECT(MASK_BOTH == gpt->valid_headers);
989 EXPECT(MASK_BOTH == gpt->valid_entries);
990 EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES1) == gpt->modified);
996 BuildTestGptData(gpt);
997 gpt->secondary_entries[0]++;
998 RefreshCrc32(gpt);
999 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1000 EXPECT(MASK_PRIMARY == gpt->valid_headers);
1001 EXPECT(MASK_PRIMARY == gpt->valid_entries);
1002 GptRepair(gpt);
1003 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1004 EXPECT(MASK_BOTH == gpt->valid_headers);
1005 EXPECT(MASK_BOTH == gpt->valid_entries);
1006 EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified);
1009 gpt = GetEmptyGptData();
1010 BuildTestGptData(gpt);
1011 gpt->primary_entries = NULL;
1012 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1013 EXPECT(MASK_SECONDARY == gpt->valid_entries);
1014 gpt = GetEmptyGptData();
1015 BuildTestGptData(gpt);
1016 gpt->secondary_entries = NULL;
1017 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1018 EXPECT(MASK_PRIMARY == gpt->valid_entries);
1021 gpt = GetEmptyGptData();
1022 BuildTestGptData(gpt);
1023 gpt->primary_header = NULL;
1024 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1025 EXPECT(MASK_SECONDARY == gpt->valid_headers);
1026 gpt = GetEmptyGptData();
1027 BuildTestGptData(gpt);
1028 gpt->secondary_header = NULL;
1029 EXPECT(GPT_SUCCESS == GptSanityCheck(gpt));
1030 EXPECT(MASK_PRIMARY == gpt->valid_headers);
1037 GptData *gpt = GetEmptyGptData();
1038 GptEntry *e = (GptEntry *)(gpt->primary_entries);
1082 GptData *gpt = GetEmptyGptData();
1083 GptEntry *e = (GptEntry *)(gpt->primary_entries);
1122 GptData *gpt = GetEmptyGptData();
1123 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
1125 BuildTestGptData(gpt);
1128 RefreshCrc32(gpt);
1130 GptNextKernelEntry(gpt, NULL, NULL));
1137 GptData *gpt = GetEmptyGptData();
1138 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
1142 BuildTestGptData(gpt);
1145 RefreshCrc32(gpt);
1146 GptInit(gpt);
1148 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1149 EXPECT(KERNEL_A == gpt->current_kernel);
1153 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1154 EXPECT(KERNEL_B == gpt->current_kernel);
1159 GptNextKernelEntry(gpt, &start, &size));
1160 EXPECT(-1 == gpt->current_kernel);
1164 GptNextKernelEntry(gpt, &start, &size));
1165 EXPECT(-1 == gpt->current_kernel);
1172 GptData *gpt = GetEmptyGptData();
1173 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
1177 BuildTestGptData(gpt);
1182 RefreshCrc32(gpt);
1183 GptInit(gpt);
1185 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1186 EXPECT(KERNEL_B == gpt->current_kernel);
1187 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1188 EXPECT(KERNEL_Y == gpt->current_kernel);
1189 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1190 EXPECT(KERNEL_A == gpt->current_kernel);
1192 GptNextKernelEntry(gpt, &start, &size));
1199 GptData *gpt = GetEmptyGptData();
1200 GptEntry *e1 = (GptEntry *)(gpt->primary_entries);
1204 BuildTestGptData(gpt);
1209 RefreshCrc32(gpt);
1210 GptInit(gpt);
1212 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1213 EXPECT(KERNEL_X == gpt->current_kernel);
1214 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1215 EXPECT(KERNEL_A == gpt->current_kernel);
1217 GptNextKernelEntry(gpt, &start, &size));
1224 GptData *gpt = GetEmptyGptData();
1225 GptEntry *e = (GptEntry *)(gpt->primary_entries);
1226 GptEntry *e2 = (GptEntry *)(gpt->secondary_entries);
1230 BuildTestGptData(gpt);
1234 RefreshCrc32(gpt);
1235 GptInit(gpt);
1236 gpt->modified = 0; /* Nothing modified yet */
1239 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1240 EXPECT(KERNEL_A == gpt->current_kernel);
1248 EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY));
1252 EXPECT(0 == gpt->modified);
1254 EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD));
1258 EXPECT(0 == gpt->modified);
1261 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1262 EXPECT(KERNEL_B == gpt->current_kernel);
1267 EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD));
1275 /* And that's caused the GPT to need updating */
1276 EXPECT(0x0F == gpt->modified);
1279 EXPECT(GPT_SUCCESS == GptNextKernelEntry(gpt, &start, &size));
1280 EXPECT(KERNEL_X == gpt->current_kernel);
1285 EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY));
1293 EXPECT(GPT_SUCCESS == GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_TRY));
1301 GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD));
1302 gpt->current_kernel = CGPT_KERNEL_ENTRY_NOT_FOUND;
1304 GptUpdateKernelEntry(gpt, GPT_UPDATE_ENTRY_BAD));
1316 GptData *gpt = GetEmptyGptData();
1318 BuildTestGptData(gpt);
1320 gpt->current_kernel = 0;
1323 GptUpdateKernelEntry(gpt, 99));
1331 GptData *gpt = GetEmptyGptData();
1332 GptHeader *h = (GptHeader *)gpt->primary_header;
1333 GptEntry *e = (GptEntry *)gpt->primary_entries;
1368 BuildTestGptData(gpt);
1369 ZeroEntries(gpt);
1379 RefreshCrc32(gpt);
1390 GptData *gpt = GetEmptyGptData();
1391 GptEntry *e = (GptEntry *)gpt->primary_entries;
1394 BuildTestGptData(gpt);
1395 gpt->current_kernel = 0;
1396 GetCurrentKernelUniqueGuid(gpt, &g);
1398 gpt->current_kernel = 1;
1399 GetCurrentKernelUniqueGuid(gpt, &g);
1405 /* Test getting GPT error text strings */
1424 GptData* gpt = GetEmptyGptData();
1425 BuildTestGptData(gpt);
1427 GptHeader* primary_header = (GptHeader*)gpt->primary_header;
1429 RefreshCrc32(gpt);
1430 // GPT is stored on the same device so first usable lba should not
1432 EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors,
1433 gpt->gpt_drive_sectors, 0));
1434 // But off device, it is okay to accept this GPT header.
1435 EXPECT(0 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors,
1436 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
1438 BuildTestGptData(gpt);
1440 RefreshCrc32(gpt);
1442 EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors,
1443 gpt->gpt_drive_sectors, 0));
1445 EXPECT(0 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors,
1446 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
1449 RefreshCrc32(gpt);
1451 EXPECT(1 == CheckHeader(primary_header, 0, gpt->streaming_drive_sectors,
1452 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
1455 BuildTestGptData(gpt);
1456 GptHeader* secondary_header = (GptHeader*)gpt->secondary_header;
1458 RefreshCrc32(gpt);
1459 EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors,
1460 gpt->gpt_drive_sectors, 0));
1461 EXPECT(0 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors,
1462 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
1464 BuildTestGptData(gpt);
1469 RefreshCrc32(gpt);
1470 EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors,
1471 gpt->gpt_drive_sectors, 0));
1472 EXPECT(0 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors,
1473 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));
1476 RefreshCrc32(gpt);
1477 EXPECT(1 == CheckHeader(secondary_header, 1, gpt->streaming_drive_sectors,
1478 gpt->gpt_drive_sectors, GPT_FLAG_EXTERNAL));