| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by the GPL v2 license that can |
| // be found in the LICENSE file. |
| // |
| // Tests for verity::FileHasher |
| #include "verity/file_hasher.h" |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "verity/logging.h" |
| #include "verity/simple_file/mock_file.h" |
| #include "verity/utils.h" |
| |
| using ::testing::_; // wildcard mock matcher |
| using ::testing::AtLeast; // Times modifier |
| using ::testing::DefaultValue; // allow for easy default return value change |
| using ::testing::InSequence; |
| using ::testing::Invoke; // mock Invoke action |
| using ::testing::Return; // mock Return action |
| |
| class FileHasherTest : public ::testing::Test { |
| public: |
| FileHasherTest() : |
| src_(new simple_file::MockFile()), |
| dst_(new simple_file::MockFile()) { } |
| ~FileHasherTest() { |
| delete src_; |
| delete dst_; |
| if (hasher_) |
| delete hasher_; |
| } |
| void SetUp() { |
| if (hasher_) |
| delete hasher_; |
| hasher_ = new verity::FileHasher(); |
| } |
| protected: |
| simple_file::MockFile *src_; |
| simple_file::MockFile *dst_; |
| verity::FileHasher *hasher_; |
| }; |
| |
| MATCHER_P(DigestMatch, a, "given hexdigest matches binary digest arg") { |
| static char last_digest_match[256] = { 0 }; |
| char *hexdigest = new char[strlen(a) + 1]; |
| verity_utils::to_hex(hexdigest, arg, strlen(a)/2); |
| bool ok = !strcmp(a, hexdigest); |
| LOG(INFO) << "DigestMatcher: " |
| << hexdigest << (ok? " == " : " != ") << a; |
| delete [] hexdigest; |
| // Store this away globally so we can easily re use it. |
| // Later this needs to be supported by a MockFile. |
| if (sizeof(last_digest_match) > strlen(a)/2) { |
| memcpy(last_digest_match, arg, strlen(a)/2); |
| } |
| return ok; |
| } |
| |
| #if 0 |
| TEST_F(FileHasherTest, EndToEnd) { |
| EXPECT_TRUE(false); |
| } |
| #endif |