From bbaca6bc0030c71bc24033df3cdf58f8b0e84d10 Mon Sep 17 00:00:00 2001 From: "ted.mielczarek@gmail.com" Date: Fri, 29 Mar 2013 15:10:50 +0000 Subject: Refactor file_id_unittest A=Mike Hommey R=ted at https://breakpad.appspot.com/543003/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1138 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/common/linux/file_id_unittest.cc | 137 +++++++++-------------------------- 1 file changed, 35 insertions(+), 102 deletions(-) (limited to 'src/common/linux/file_id_unittest.cc') diff --git a/src/common/linux/file_id_unittest.cc b/src/common/linux/file_id_unittest.cc index fa3af802..7c6550b1 100644 --- a/src/common/linux/file_id_unittest.cc +++ b/src/common/linux/file_id_unittest.cc @@ -34,6 +34,7 @@ #include +#include "common/linux/elfutils.h" #include "common/linux/file_id.h" #include "common/linux/safe_readlink.h" #include "common/linux/synth_elf.h" @@ -43,11 +44,14 @@ #include "breakpad_googletest_includes.h" using namespace google_breakpad; +using google_breakpad::ElfClass32; +using google_breakpad::ElfClass64; using google_breakpad::SafeReadLink; using google_breakpad::synth_elf::BuildIDNote; using google_breakpad::synth_elf::ELF; using google_breakpad::test_assembler::kLittleEndian; using google_breakpad::test_assembler::Section; +using ::testing::Types; namespace { @@ -94,6 +98,7 @@ TEST(FileIDStripTest, StripSelf) { EXPECT_STREQ(identifier_string1, identifier_string2); } +template class FileIDTest : public testing::Test { public: void GetElfContents(ELF& elf) { @@ -110,48 +115,35 @@ public: uint8_t* elfdata; }; -TEST_F(FileIDTest, ElfClass) { +typedef Types ElfClasses; + +TYPED_TEST_CASE(FileIDTest, ElfClasses); + +TYPED_TEST(FileIDTest, ElfClass) { uint8_t identifier[sizeof(MDGUID)]; const char expected_identifier_string[] = "80808080-8080-0000-0000-008080808080"; char identifier_string[sizeof(expected_identifier_string)]; const size_t kTextSectionSize = 128; - ELF elf32(EM_386, ELFCLASS32, kLittleEndian); - Section text32(kLittleEndian); - for (size_t i = 0; i < kTextSectionSize; ++i) { - text32.D8(i * 3); - } - elf32.AddSection(".text", text32, SHT_PROGBITS); - elf32.Finish(); - GetElfContents(elf32); - - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier)); - - FileID::ConvertIdentifierToString(identifier, identifier_string, - sizeof(identifier_string)); - EXPECT_STREQ(expected_identifier_string, identifier_string); - - memset(identifier, 0, sizeof(identifier)); - memset(identifier_string, 0, sizeof(identifier_string)); - - ELF elf64(EM_X86_64, ELFCLASS64, kLittleEndian); - Section text64(kLittleEndian); + ELF elf(EM_386, TypeParam::kClass, kLittleEndian); + Section text(kLittleEndian); for (size_t i = 0; i < kTextSectionSize; ++i) { - text64.D8(i * 3); + text.D8(i * 3); } - elf64.AddSection(".text", text64, SHT_PROGBITS); - elf64.Finish(); - GetElfContents(elf64); + elf.AddSection(".text", text, SHT_PROGBITS); + elf.Finish(); + this->GetElfContents(elf); - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier)); + EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(this->elfdata, + identifier)); FileID::ConvertIdentifierToString(identifier, identifier_string, sizeof(identifier_string)); EXPECT_STREQ(expected_identifier_string, identifier_string); } -TEST_F(FileIDTest, BuildID) { +TYPED_TEST(FileIDTest, BuildID) { const uint8_t kExpectedIdentifier[sizeof(MDGUID)] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; @@ -164,35 +156,18 @@ TEST_F(FileIDTest, BuildID) { uint8_t identifier[sizeof(MDGUID)]; char identifier_string[sizeof(expected_identifier_string)]; - ELF elf32(EM_386, ELFCLASS32, kLittleEndian); + ELF elf(EM_386, TypeParam::kClass, kLittleEndian); Section text(kLittleEndian); text.Append(4096, 0); - elf32.AddSection(".text", text, SHT_PROGBITS); - BuildIDNote::AppendSection(elf32, + elf.AddSection(".text", text, SHT_PROGBITS); + BuildIDNote::AppendSection(elf, kExpectedIdentifier, sizeof(kExpectedIdentifier)); - elf32.Finish(); - GetElfContents(elf32); + elf.Finish(); + this->GetElfContents(elf); - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier)); - - FileID::ConvertIdentifierToString(identifier, identifier_string, - sizeof(identifier_string)); - EXPECT_STREQ(expected_identifier_string, identifier_string); - - memset(identifier, 0, sizeof(identifier)); - memset(identifier_string, 0, sizeof(identifier_string)); - - ELF elf64(EM_X86_64, ELFCLASS64, kLittleEndian); - // Re-use empty text section from previous test - elf64.AddSection(".text", text, SHT_PROGBITS); - BuildIDNote::AppendSection(elf64, - kExpectedIdentifier, - sizeof(kExpectedIdentifier)); - elf64.Finish(); - GetElfContents(elf64); - - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier)); + EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(this->elfdata, + identifier)); FileID::ConvertIdentifierToString(identifier, identifier_string, sizeof(identifier_string)); @@ -201,51 +176,7 @@ TEST_F(FileIDTest, BuildID) { // Test to make sure two files with different text sections produce // different hashes when not using a build id. -TEST_F(FileIDTest, UniqueHashes32) { - char identifier_string_1[] = - "00000000-0000-0000-0000-000000000000"; - char identifier_string_2[] = - "00000000-0000-0000-0000-000000000000"; - uint8_t identifier_1[sizeof(MDGUID)]; - uint8_t identifier_2[sizeof(MDGUID)]; - - { - ELF elf1(EM_386, ELFCLASS32, kLittleEndian); - Section foo_1(kLittleEndian); - PopulateSection(&foo_1, 32, 5); - elf1.AddSection(".foo", foo_1, SHT_PROGBITS); - Section text_1(kLittleEndian); - PopulateSection(&text_1, 4096, 17); - elf1.AddSection(".text", text_1, SHT_PROGBITS); - elf1.Finish(); - GetElfContents(elf1); - } - - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier_1)); - FileID::ConvertIdentifierToString(identifier_1, identifier_string_1, - sizeof(identifier_string_1)); - - { - ELF elf2(EM_386, ELFCLASS32, kLittleEndian); - Section text_2(kLittleEndian); - Section foo_2(kLittleEndian); - PopulateSection(&foo_2, 32, 5); - elf2.AddSection(".foo", foo_2, SHT_PROGBITS); - PopulateSection(&text_2, 4096, 31); - elf2.AddSection(".text", text_2, SHT_PROGBITS); - elf2.Finish(); - GetElfContents(elf2); - } - - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier_2)); - FileID::ConvertIdentifierToString(identifier_2, identifier_string_2, - sizeof(identifier_string_2)); - - EXPECT_STRNE(identifier_string_1, identifier_string_2); -} - -// Same as UniqueHashes32, for x86-64. -TEST_F(FileIDTest, UniqueHashes64) { +TYPED_TEST(FileIDTest, UniqueHashes) { char identifier_string_1[] = "00000000-0000-0000-0000-000000000000"; char identifier_string_2[] = @@ -254,7 +185,7 @@ TEST_F(FileIDTest, UniqueHashes64) { uint8_t identifier_2[sizeof(MDGUID)]; { - ELF elf1(EM_X86_64, ELFCLASS64, kLittleEndian); + ELF elf1(EM_386, TypeParam::kClass, kLittleEndian); Section foo_1(kLittleEndian); PopulateSection(&foo_1, 32, 5); elf1.AddSection(".foo", foo_1, SHT_PROGBITS); @@ -262,15 +193,16 @@ TEST_F(FileIDTest, UniqueHashes64) { PopulateSection(&text_1, 4096, 17); elf1.AddSection(".text", text_1, SHT_PROGBITS); elf1.Finish(); - GetElfContents(elf1); + this->GetElfContents(elf1); } - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier_1)); + EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(this->elfdata, + identifier_1)); FileID::ConvertIdentifierToString(identifier_1, identifier_string_1, sizeof(identifier_string_1)); { - ELF elf2(EM_X86_64, ELFCLASS64, kLittleEndian); + ELF elf2(EM_386, TypeParam::kClass, kLittleEndian); Section text_2(kLittleEndian); Section foo_2(kLittleEndian); PopulateSection(&foo_2, 32, 5); @@ -278,10 +210,11 @@ TEST_F(FileIDTest, UniqueHashes64) { PopulateSection(&text_2, 4096, 31); elf2.AddSection(".text", text_2, SHT_PROGBITS); elf2.Finish(); - GetElfContents(elf2); + this->GetElfContents(elf2); } - EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(elfdata, identifier_2)); + EXPECT_TRUE(FileID::ElfFileIdentifierFromMappedFile(this->elfdata, + identifier_2)); FileID::ConvertIdentifierToString(identifier_2, identifier_string_2, sizeof(identifier_string_2)); -- cgit v1.2.1