summaryrefslogtreecommitdiff
path: root/tests/CgptManagerTests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/CgptManagerTests.cc')
-rw-r--r--tests/CgptManagerTests.cc403
1 files changed, 0 insertions, 403 deletions
diff --git a/tests/CgptManagerTests.cc b/tests/CgptManagerTests.cc
deleted file mode 100644
index 35da0d09..00000000
--- a/tests/CgptManagerTests.cc
+++ /dev/null
@@ -1,403 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Unit tests for CgptManager class.
-#include <string>
-
-#include "../cgpt/CgptManager.h"
-
-// We use some specific GUID constants for some of the tests,
-// so pulling in cgpt.h. Make sure this is included after
-// CgptManager.h so that we can test the actual usage of
-// CgptManager.h as the post-install package would use.
-// Example: this would catch an incorrect usage of a GUID
-// that's defined only in cgpt.h and being accidentally
-// used in CgptManager.h (which should not have any cgpt.h
-// dependencies).
-extern "C" {
-#include "../cgpt/cgpt.h"
-}
-
-#include <base/logging.h>
-#include <gflags/gflags.h>
-#include <gtest/gtest.h>
-#include <uuid/uuid.h>
-
-using std::string;
-
-static const Guid p2guid = {{{0, 1, 2, 3, 4, {2, 2, 2, 2, 2, 2}}}};
-static const Guid p3guid = {{{0, 6, 5, 4, 2, {3, 3, 3, 3, 3, 3}}}};
-
-#define EXPECT_SUCCESS(c) EXPECT_EQ(kCgptSuccess, c)
-
-// The --v flag controls the log verbosity level.
-DEFINE_int32(v, 0, 0);
-
-// This class unit tests the CgptManager class.
-class CgptManagerUnitTest : public ::testing::Test {
-public:
- CgptManagerUnitTest() {
- // Even though the post-installer doesn't use any methods that require
- // uuid_generate, for the unit test we use those methods, so we need to
- // set the uuid_generator.
- uuid_generator = uuid_generate;
- }
-
- void SetUp() {
- const string device_name = "/tmp/DummyFileForCgptManagerTests.bin";
-
- CreateDummyDevice(device_name);
-
- LOG(INFO) << "Initializing cgpt with " << device_name;
- EXPECT_SUCCESS(cgpt_manager.Initialize(device_name));
- EXPECT_SUCCESS(cgpt_manager.ClearAll());
-
- CheckPartitionCount(0);
- }
-
- virtual ~CgptManagerUnitTest() { }
-
-protected:
- CgptManager cgpt_manager;
-
- void CreateDummyDevice(const string& dummy_device) {
- FILE* fp = fopen(dummy_device.c_str(), "w");
-
- ASSERT_TRUE(fp != NULL);
-
- const int kNumSectors = 1000;
- const int kSectorSize = 512;
- const char kFillChar = '7'; // Some character, value doesn't matter.
-
- for(int i = 0; i < kNumSectors * kSectorSize; i++) {
- EXPECT_EQ(kFillChar, fputc(kFillChar, fp));
- }
-
- fclose(fp);
- }
-
- void CheckEquality(string field,
- uint64_t expected,
- uint64_t actual) {
-
-
- VLOG(1) << field << ":"
- << "Expected = " << expected
- << ";Actual = " << actual;
-
- EXPECT_EQ(expected, actual);
- }
-
-
- void CheckGuidEquality(string field,
- const Guid& expected_id,
- const Guid& actual_id) {
- char expected_id_str[GUID_STRLEN];
- GuidToStr(&expected_id, expected_id_str, sizeof(expected_id_str));
-
- char actual_id_str[GUID_STRLEN];
- GuidToStr(&actual_id, actual_id_str, sizeof(actual_id_str));
-
- VLOG(1) << field << ":"
- << "Expected = " << expected_id_str
- << ";Actual = " << actual_id_str;
-
- EXPECT_TRUE(GuidEqual(&expected_id, &actual_id));
- }
-
- // Checks if the current number of partitions in the device matches
- // the value of expected_num_partitions.
- void CheckPartitionCount(uint8 expected_num_partitions) {
- uint8_t actual_num_partitions;
- EXPECT_SUCCESS(cgpt_manager.GetNumNonEmptyPartitions(
- &actual_num_partitions));
-
- CheckEquality("NumPartitions",
- expected_num_partitions,
- actual_num_partitions);
- }
-
- void SetAndCheckSuccessfulBit(uint32_t partition_number,
- bool expected_is_successful) {
- EXPECT_SUCCESS(cgpt_manager.SetSuccessful(partition_number,
- expected_is_successful));
-
- bool actual_is_successful;
- EXPECT_SUCCESS(cgpt_manager.GetSuccessful(partition_number,
- &actual_is_successful));
- EXPECT_EQ(expected_is_successful, actual_is_successful);
- }
-
-
- void SetAndCheckNumTriesLeft(uint32_t partition_number,
- int expected_num_tries) {
- EXPECT_SUCCESS(cgpt_manager.SetNumTriesLeft(partition_number,
- expected_num_tries));
-
- int actual_num_tries;
- EXPECT_SUCCESS(cgpt_manager.GetNumTriesLeft(partition_number,
- &actual_num_tries));
- CheckEquality("NumTries", expected_num_tries, actual_num_tries);
- }
-
- void SetAndCheckPriority(uint32_t partition_number,
- uint8_t expected_priority) {
- EXPECT_SUCCESS(cgpt_manager.SetPriority(partition_number,
- expected_priority));
-
- uint8_t actual_priority;
- EXPECT_SUCCESS(cgpt_manager.GetPriority(partition_number,
- &actual_priority));
- CheckEquality("Priority", expected_priority, actual_priority);
- }
-
- void CheckPriority(uint32_t partition_number,
- uint8_t expected_priority) {
- uint8_t actual_priority;
- EXPECT_SUCCESS(cgpt_manager.GetPriority(partition_number,
- &actual_priority));
- CheckEquality("Priority", expected_priority, actual_priority);
- }
-
-
- void CheckBeginningOffset(uint32_t partition_number,
- uint64_t expected_offset) {
- uint64_t actual_offset;
- EXPECT_SUCCESS(cgpt_manager.GetBeginningOffset(partition_number,
- &actual_offset));
- CheckEquality("Beginning Offset", expected_offset, actual_offset);
- }
-
-
- void CheckNumSectors(uint32_t partition_number,
- uint64_t expected_num_sectors) {
- uint64_t actual_num_sectors;
- EXPECT_SUCCESS(cgpt_manager.GetNumSectors(partition_number,
- &actual_num_sectors));
- CheckEquality("Num Sectors", expected_num_sectors, actual_num_sectors);
- }
-
-
- void CheckPartitionTypeId(int partition_number,
- const Guid& expected_partition_type_id) {
- // Get the partition type id and check if it matches the expected value.
- Guid actual_partition_type_id;
- EXPECT_SUCCESS(cgpt_manager.GetPartitionTypeId(partition_number,
- &actual_partition_type_id));
-
- CheckGuidEquality("PartitionTypeId",
- expected_partition_type_id,
- actual_partition_type_id);
- }
-
- void CheckPartitionUniqueId(int partition_number,
- const Guid& expected_partition_unique_id) {
- // Get the partition unique id and check if it matches the expected value.
- Guid actual_partition_unique_id;
- EXPECT_SUCCESS(cgpt_manager.GetPartitionUniqueId(
- partition_number,
- &actual_partition_unique_id));
-
- CheckGuidEquality("PartitionUniqueId",
- expected_partition_unique_id,
- actual_partition_unique_id);
- }
-
- void CheckPartitionNumberByUniqueId(const Guid& unique_id,
- uint32_t expected_partition_number) {
- // Get the partition number for the unique id and check
- // if it matches the expected value.
- uint32_t actual_partition_number;
- EXPECT_SUCCESS(cgpt_manager.GetPartitionNumberByUniqueId(
- unique_id,
- &actual_partition_number));
-
- CheckEquality("PartitionNumberForUniqueId",
- expected_partition_number,
- actual_partition_number);
- }
-
-
- void CreateBootFile(const string& boot_file_name) {
- FILE* fp = fopen(boot_file_name.c_str(), "w");
-
- ASSERT_TRUE(fp != NULL);
-
- const int kNumSectors = 1;
- const int kSectorSize = 512;
- const char kFillChar = '8'; // Some character, value doesn't matter.
-
- for(int i = 0; i < kNumSectors * kSectorSize; i++) {
- EXPECT_EQ(kFillChar, fputc(kFillChar, fp));
- }
-
- fclose(fp);
- }
-
-private:
- DISALLOW_COPY_AND_ASSIGN(CgptManagerUnitTest);
-};
-
-TEST_F(CgptManagerUnitTest, AutoPrioritizationTest) {
- EXPECT_SUCCESS(cgpt_manager.AddPartition("k1",
- guid_chromeos_kernel,
- guid_unused,
- 100,
- 10));
- CheckPartitionCount(1);
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("k2",
- guid_chromeos_kernel,
- p2guid,
- 200,
- 20));
- CheckPartitionCount(2);
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("k3",
- guid_chromeos_kernel,
- p3guid,
- 300,
- 30));
- CheckPartitionCount(3);
-
- uint8_t expectedk1Priority = 1;
- uint8_t expectedk2Priority = 2;
- uint8_t expectedk3Priority = 0;
-
- // Calling SetAndCheckPriority will do a set and get of the above priorities.
- SetAndCheckPriority(1, expectedk1Priority);
- SetAndCheckPriority(2, expectedk2Priority);
- SetAndCheckPriority(3, expectedk3Priority);
-
- EXPECT_SUCCESS(cgpt_manager.SetHighestPriority(1));
-
- expectedk1Priority = 2;
- expectedk2Priority = 1;
-
- CheckPriority(1, expectedk1Priority);
- CheckPriority(2, expectedk2Priority);
- CheckPriority(3, expectedk3Priority);
-}
-
-
-TEST_F(CgptManagerUnitTest, AddPartitionTest) {
- int p2_offset = 200;
- int p2_size = 20;
- int p3_offset = 300;
- int p3_size = 30;
-
- VLOG(1) << "Adding various types of partitions ... ";
- EXPECT_SUCCESS(cgpt_manager.AddPartition("data stuff",
- guid_linux_data,
- guid_unused,
- 100,
- 10));
- CheckPartitionCount(1);
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("kernel stuff",
- guid_chromeos_kernel,
- p2guid,
- p2_offset,
- p2_size));
- CheckPartitionCount(2);
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("rootfs stuff",
- guid_chromeos_rootfs,
- p3guid,
- p3_offset,
- p3_size));
- CheckPartitionCount(3);
-
- uint32_t pmbr_boot_partition_number = 4;
- EXPECT_SUCCESS(cgpt_manager.AddPartition("ESP stuff",
- guid_efi,
- guid_unused,
- 400,
- 40));
- CheckPartitionCount(4);
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("fture stuff",
- guid_chromeos_reserved,
- guid_unused,
- 500,
- 50));
- CheckPartitionCount(5);
-
- Guid guid_random = {{{0x2364a860, 0xbf63, 0x42fb, 0xa8, 0x3d,
- {0x9a, 0xd3, 0xe0, 0x57, 0xfc, 0xf5}}}};
-
- EXPECT_SUCCESS(cgpt_manager.AddPartition("random stuff",
- guid_random,
- guid_unused,
- 600,
- 60));
-
- CheckPartitionCount(6);
-
- string boot_file_name = "/tmp/BootFileForCgptManagerTests.bin";
- LOG(INFO) << "Adding EFI partition to PMBR with bootfile: "
- << boot_file_name;
-
- CreateBootFile(boot_file_name);
- EXPECT_SUCCESS(cgpt_manager.SetPmbr(pmbr_boot_partition_number,
- boot_file_name,
- true));
-
- VLOG(1) << "Checking if contents of GPT match values set in AddPartition.";
-
- uint32_t actual_boot_partition_number;
- EXPECT_SUCCESS(cgpt_manager.GetPmbrBootPartitionNumber(
- &actual_boot_partition_number));
- EXPECT_EQ(pmbr_boot_partition_number, actual_boot_partition_number);
-
- // Set the successful attribute for some partition to various Values
- // and check if the settings are preserved.
- SetAndCheckSuccessfulBit(2, true);
- SetAndCheckSuccessfulBit(2, false);
-
- // Set the number of tries for some partition to various Values
- // and check if the settings are preserved.
- SetAndCheckNumTriesLeft(2, 6);
- SetAndCheckNumTriesLeft(2, 5);
-
- // Set the priority for some partition to various Values
- // and check if the settings are preserved.
- SetAndCheckPriority(2, 2);
- SetAndCheckPriority(2, 0);
-
- // Check if the beginning offset for some of the partitions
- // are the same as what was set in AddPartition.
- CheckBeginningOffset(2, p2_offset);
- CheckBeginningOffset(3, p3_offset);
-
- // Check if the number of sectors for some of the partitions
- // are same as what was set in AddPartition.
- CheckNumSectors(2, p2_size);
- CheckNumSectors(3, p3_size);
-
- // Check if the partition type IDs for some of the partitions
- // are same as what was set in AddPartition.
- CheckPartitionTypeId(2, guid_chromeos_kernel);
- CheckPartitionTypeId(4, guid_efi);
-
- // Check if the partition unique IDs for some of the partitions
- // same as what was set in AddPartition.
- CheckPartitionUniqueId(2, p2guid);
- CheckPartitionUniqueId(3, p3guid);
-
- // Check if the partition numbers for some of the partitions are
- // retrievable by their unique IDs set in AddPartition.
- CheckPartitionNumberByUniqueId(p2guid, 2);
- CheckPartitionNumberByUniqueId(p3guid, 3);
-}
-
-int main(int argc, char **argv) {
- google::ParseCommandLineFlags(&argc, &argv, true);
- ::testing::InitGoogleTest(&argc, argv);
-
- // VLOG(2) logs at level -2. So if user gives --v=2, we should
- // set MinLogLevel to -2, so VLOG(2) and VLOG(1) will show up.
- logging::SetMinLogLevel(-FLAGS_v);
- return RUN_ALL_TESTS();
-}