blob: 3169e720c17e07441bc876a478ee635cad8b9af2 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 "mbr.h"
#include <zxtest/zxtest.h>
#include "mbr-test-data.h"
namespace mbr {
TEST(MbrTest, ParseShortBuffer) {
Mbr mbr;
uint8_t buffer[511] = {0};
EXPECT_EQ(mbr::Parse(buffer, sizeof(buffer), &mbr), ZX_ERR_BUFFER_TOO_SMALL);
}
TEST(MbrTest, InvalidBootSignature) {
Mbr mbr;
uint8_t buffer[512];
memcpy(buffer, kFuchsiaMbr, sizeof(buffer));
buffer[510] = 0x12;
buffer[511] = 0x34;
EXPECT_EQ(mbr::Parse(buffer, sizeof(buffer), &mbr), ZX_ERR_NOT_SUPPORTED);
}
TEST(MbrTest, Parse) {
Mbr mbr;
EXPECT_OK(mbr::Parse(kFuchsiaMbr, sizeof(kFuchsiaMbr), &mbr));
MbrPartitionEntry partition;
memcpy(&partition, &mbr.partitions[0], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeFuchsiaSys);
EXPECT_EQ(partition.start_sector_lba, 2048);
EXPECT_EQ(partition.num_sectors, 20480);
memcpy(&partition, &mbr.partitions[1], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeFuchsiaData);
EXPECT_EQ(partition.start_sector_lba, 22528);
EXPECT_EQ(partition.num_sectors, 60532736);
memcpy(&partition, &mbr.partitions[2], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeNone);
memcpy(&partition, &mbr.partitions[3], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeNone);
EXPECT_EQ(mbr.boot_signature, kMbrBootSignature);
}
TEST(MbrTest, ParseFat) {
Mbr mbr;
EXPECT_OK(mbr::Parse(kFatMbr, sizeof(kFatMbr), &mbr));
MbrPartitionEntry partition;
memcpy(&partition, &mbr.partitions[0], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeFat12);
EXPECT_EQ(partition.start_sector_lba, 2048);
EXPECT_EQ(partition.num_sectors, 20480);
memcpy(&partition, &mbr.partitions[1], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeFat32);
EXPECT_EQ(partition.start_sector_lba, 22528);
EXPECT_EQ(partition.num_sectors, 20480);
memcpy(&partition, &mbr.partitions[2], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeFat16B);
EXPECT_EQ(partition.start_sector_lba, 43008);
EXPECT_EQ(partition.num_sectors, 20480);
memcpy(&partition, &mbr.partitions[3], kMbrPartitionEntrySize);
EXPECT_EQ(partition.type, kPartitionTypeNone);
EXPECT_EQ(mbr.boot_signature, kMbrBootSignature);
}
} // namespace mbr