aboutsummaryrefslogtreecommitdiff
path: root/src/common/linux/file_id_unittest.cc
diff options
context:
space:
mode:
authorted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2013-03-29 15:10:50 +0000
committerted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2013-03-29 15:10:50 +0000
commitbbaca6bc0030c71bc24033df3cdf58f8b0e84d10 (patch)
tree0242020cb66eff24657932659301edcecd6594e1 /src/common/linux/file_id_unittest.cc
parentAdd tests for section headers in synth_elf unittest (diff)
downloadbreakpad-bbaca6bc0030c71bc24033df3cdf58f8b0e84d10.tar.xz
Refactor file_id_unittest
A=Mike Hommey <mh@glandium.org> R=ted at https://breakpad.appspot.com/543003/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1138 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/common/linux/file_id_unittest.cc')
-rw-r--r--src/common/linux/file_id_unittest.cc137
1 files changed, 35 insertions, 102 deletions
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 <string>
+#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<typename ElfClass>
class FileIDTest : public testing::Test {
public:
void GetElfContents(ELF& elf) {
@@ -110,48 +115,35 @@ public:
uint8_t* elfdata;
};
-TEST_F(FileIDTest, ElfClass) {
+typedef Types<ElfClass32, ElfClass64> 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));