| Index: syzygy/refinery/process_state/process_state_util_unittest.cc
|
| diff --git a/syzygy/refinery/process_state/process_state_util_unittest.cc b/syzygy/refinery/process_state/process_state_util_unittest.cc
|
| index 450a184c7e01e293981297d5e40f39858317a287..6528547e263e79d51f8cb7c8e0b2266d8ecf61df 100644
|
| --- a/syzygy/refinery/process_state/process_state_util_unittest.cc
|
| +++ b/syzygy/refinery/process_state/process_state_util_unittest.cc
|
| @@ -19,8 +19,10 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "gtest/gtest.h"
|
| #include "syzygy/refinery/core/address.h"
|
| +#include "syzygy/refinery/process_state/layer_data.h"
|
| #include "syzygy/refinery/process_state/process_state.h"
|
| #include "syzygy/refinery/process_state/refinery.pb.h"
|
| +#include "syzygy/refinery/types/type.h"
|
|
|
| namespace refinery {
|
|
|
| @@ -32,7 +34,8 @@ const uint32 kChecksum = 11U;
|
| const uint32 kTimestamp = 22U;
|
| const wchar_t kPath[] = L"c:\\path\\ModuleName";
|
| const char kDataName[] = "data_name";
|
| -const char kTypeName[] = "Type::Name*";
|
| +const ModuleId kModuleId = 100;
|
| +const TypeId kTypeId = 42;
|
|
|
| } // namespace
|
|
|
| @@ -67,7 +70,7 @@ TEST(ModuleLayerAccessorTest, AddModuleRecord) {
|
| ASSERT_EQ(module.module_id(), module_layer->data().Find(signature));
|
| }
|
|
|
| -TEST(ModuleLayerAccessorTest, GetModuleSignatureTest) {
|
| +TEST(ModuleLayerAccessorTest, GetModuleSignatureVATest) {
|
| ProcessState state;
|
| ModuleLayerAccessor accessor(&state);
|
| pe::PEFile::Signature signature;
|
| @@ -95,11 +98,58 @@ TEST(ModuleLayerAccessorTest, GetModuleSignatureTest) {
|
| ASSERT_EQ(kPath, signature.path);
|
| }
|
|
|
| +TEST(ModuleLayerAccessorTest, GetModuleSignatureIdTest) {
|
| + ProcessState state;
|
| + ModuleLayerAccessor accessor(&state);
|
| +
|
| + // Add a module and get its id.
|
| + accessor.AddModuleRecord(AddressRange(kAddress, kSize), kChecksum, kTimestamp,
|
| + kPath);
|
| + ModuleId module_id = accessor.GetModuleId(kAddress);
|
| +
|
| + // Validate.
|
| + pe::PEFile::Signature signature;
|
| + ASSERT_TRUE(accessor.GetModuleSignature(module_id, &signature));
|
| +
|
| + ASSERT_EQ(0U, signature.base_address.value());
|
| + ASSERT_EQ(kSize, signature.module_size);
|
| + ASSERT_EQ(kChecksum, signature.module_checksum);
|
| + ASSERT_EQ(kTimestamp, signature.module_time_date_stamp);
|
| + ASSERT_EQ(kPath, signature.path);
|
| +}
|
| +
|
| +TEST(ModuleLayerAccessorTest, GetModuleIdTest) {
|
| + ProcessState state;
|
| + ModuleLayerAccessor accessor(&state);
|
| +
|
| + // Not hitting a module case.
|
| + ASSERT_EQ(kNoModuleId, accessor.GetModuleId(kAddress));
|
| +
|
| + // Hitting a module case.
|
| + accessor.AddModuleRecord(AddressRange(kAddress, kSize), kChecksum, kTimestamp,
|
| + kPath);
|
| + ModuleId module_id = accessor.GetModuleId(kAddress);
|
| + ASSERT_NE(kNoModuleId, module_id);
|
| +
|
| + // Consistency check: the signature associated to module_id must be equal to
|
| + // that associated with va, up to the base address being 0.
|
| + pe::PEFile::Signature sig_from_va;
|
| + ASSERT_TRUE(accessor.GetModuleSignature(kAddress, &sig_from_va));
|
| + sig_from_va.base_address = core::AbsoluteAddress(0U);
|
| +
|
| + pe::PEFile::Signature sig_from_id;
|
| + ModuleLayerPtr layer;
|
| + state.FindOrCreateLayer(&layer);
|
| + ASSERT_TRUE(layer->data().Find(module_id, &sig_from_id));
|
| +
|
| + ASSERT_EQ(sig_from_va, sig_from_id);
|
| +}
|
| +
|
| TEST(AddTypedBlockRecord, BasicTest) {
|
| ProcessState state;
|
| AddTypedBlockRecord(AddressRange(kAddress, kSize),
|
| - base::ASCIIToUTF16(kDataName),
|
| - base::ASCIIToUTF16(kTypeName), &state);
|
| + base::ASCIIToUTF16(kDataName), kModuleId, kTypeId,
|
| + &state);
|
|
|
| // Validate a record was added.
|
| TypedBlockLayerPtr layer;
|
| @@ -115,7 +165,8 @@ TEST(AddTypedBlockRecord, BasicTest) {
|
| // Validate TypedBlock proto.
|
| TypedBlock* proto = record->mutable_data();
|
| ASSERT_EQ(kDataName, proto->data_name());
|
| - ASSERT_EQ(kTypeName, proto->type_name());
|
| + ASSERT_EQ(kTypeId, proto->type_id());
|
| + ASSERT_EQ(kModuleId, proto->module_id());
|
| }
|
|
|
| } // namespace refinery
|
|
|