| Index: src/trusted/validator/validation_cache_test.cc
|
| diff --git a/src/trusted/validator/validation_cache_test.cc b/src/trusted/validator/validation_cache_test.cc
|
| index b7f60826c91e2f9f0fb3dea19689d2e835c0c4e1..21ffd455d27aa5b39bdbfb30a91fb7a90bca65ee 100644
|
| --- a/src/trusted/validator/validation_cache_test.cc
|
| +++ b/src/trusted/validator/validation_cache_test.cc
|
| @@ -12,6 +12,7 @@
|
| #include "native_client/src/trusted/validator/ncvalidate.h"
|
| #include "native_client/src/trusted/validator/validation_cache.h"
|
| #include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h"
|
| +#include "native_client/src/trusted/validator/validation_metadata.h"
|
|
|
| #define CONTEXT_MARKER 31
|
| #define QUERY_MARKER 37
|
| @@ -31,6 +32,7 @@ const char sse41[CODE_SIZE + 1] =
|
| struct MockContext {
|
| int marker; /* Sanity check that we're getting the right object. */
|
| int query_result;
|
| + int add_count_expected;
|
| bool set_validates_expected;
|
| bool query_destroyed;
|
| };
|
| @@ -75,8 +77,7 @@ int MockQueryCodeValidates(void *query) {
|
| MockQuery *mquery = (MockQuery *) query;
|
| EXPECT_EQ(QUERY_MARKER, mquery->marker);
|
| EXPECT_EQ(QUERY_CREATED, mquery->state);
|
| - /* Less than two pieces of data is suspicious. */
|
| - EXPECT_LE(2, mquery->add_count);
|
| + EXPECT_EQ(mquery->context->add_count_expected, mquery->add_count);
|
| mquery->state = QUERY_GET_CALLED;
|
| return mquery->context->query_result;
|
| }
|
| @@ -105,6 +106,7 @@ void MockDestroyQuery(void *query) {
|
| class ValidationCachingInterfaceTests : public ::testing::Test {
|
| protected:
|
| MockContext context;
|
| + NaClValidationMetadata *metadata_ptr;
|
| NaClValidationCache cache;
|
| const struct NaClValidatorInterface *validator;
|
| NaClCPUFeatures *cpu_features;
|
| @@ -114,9 +116,12 @@ class ValidationCachingInterfaceTests : public ::testing::Test {
|
| void SetUp() {
|
| context.marker = CONTEXT_MARKER;
|
| context.query_result = 1;
|
| + context.add_count_expected = 4;
|
| context.set_validates_expected = false;
|
| context.query_destroyed = false;
|
|
|
| + metadata_ptr = NULL;
|
| +
|
| cache.handle = &context;
|
| cache.CreateQuery = MockCreateQuery;
|
| cache.AddData = MockAddData;
|
| @@ -137,6 +142,7 @@ class ValidationCachingInterfaceTests : public ::testing::Test {
|
| FALSE, /* stubout_mode */
|
| FALSE, /* readonly_test */
|
| cpu_features,
|
| + metadata_ptr,
|
| &cache);
|
| }
|
|
|
| @@ -147,6 +153,7 @@ class ValidationCachingInterfaceTests : public ::testing::Test {
|
|
|
| TEST_F(ValidationCachingInterfaceTests, Sanity) {
|
| void *query = cache.CreateQuery(cache.handle);
|
| + context.add_count_expected = 2;
|
| cache.AddData(query, NULL, 6);
|
| cache.AddData(query, NULL, 128);
|
| EXPECT_EQ(1, cache.QueryKnownToValidate(query));
|
| @@ -161,6 +168,7 @@ TEST_F(ValidationCachingInterfaceTests, NoCache) {
|
| FALSE, /* stubout_mode */
|
| FALSE, /* readonly_test */
|
| cpu_features,
|
| + NULL, /* metadata */
|
| NULL);
|
| EXPECT_EQ(NaClValidationSucceeded, status);
|
| }
|
| @@ -215,6 +223,21 @@ TEST_F(ValidationCachingInterfaceTests, IllegalCacheHit) {
|
| EXPECT_EQ(true, context.query_destroyed);
|
| }
|
|
|
| +TEST_F(ValidationCachingInterfaceTests, Metadata) {
|
| + NaClValidationMetadata metadata;
|
| + memset(&metadata, 0, sizeof(metadata));
|
| + metadata.identity_type = NaClCodeIdentityFile;
|
| + metadata.file_name = "foobar";
|
| + metadata.file_name_length = strlen(metadata.file_name);
|
| + metadata.file_size = CODE_SIZE;
|
| + metadata.mtime = 100;
|
| + metadata_ptr = &metadata;
|
| + context.add_count_expected = 8;
|
| + NaClValidationStatus status = Validate();
|
| + EXPECT_EQ(NaClValidationSucceeded, status);
|
| + EXPECT_EQ(true, context.query_destroyed);
|
| +}
|
| +
|
| // Test driver function.
|
| int main(int argc, char *argv[]) {
|
| // The IllegalInst test touches the log mutex deep inside the validator.
|
|
|