diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-02-03 14:37:27 -0500 |
---|---|---|
committer | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-03-02 12:24:37 -0500 |
commit | 0d408153594e2e2366e0729397ca2890f00b026c (patch) | |
tree | 5201e5e9fd707447543bf8c638b0a701f314ca5e /src/mongo/db/time_proof_service_test.cpp | |
parent | 8c173ff0776c2c4ab1698a26aee2d087f973a3de (diff) | |
download | mongo-0d408153594e2e2366e0729397ca2890f00b026c.tar.gz |
SERVER-27768 Implement HMAC key for signing Logical clock's storage & distribution
Diffstat (limited to 'src/mongo/db/time_proof_service_test.cpp')
-rw-r--r-- | src/mongo/db/time_proof_service_test.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/mongo/db/time_proof_service_test.cpp b/src/mongo/db/time_proof_service_test.cpp new file mode 100644 index 00000000000..6c4a8d51256 --- /dev/null +++ b/src/mongo/db/time_proof_service_test.cpp @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2017 MongoDB, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * As a special exception, the copyright holders give permission to link the + * code of portions of this program with the OpenSSL library under certain + * conditions as described in each individual source file and distribute + * linked combinations including the program with the OpenSSL library. You + * must comply with the GNU Affero General Public License in all respects for + * all of the code used other than as permitted herein. If you modify file(s) + * with this exception, you may extend this exception to your version of the + * file(s), but you are not obligated to do so. If you do not wish to do so, + * delete this exception statement from your version. If you delete this + * exception statement from all source files in the program, then also delete + * it in the license file. + */ + +#include "mongo/platform/basic.h" + +#include "mongo/bson/timestamp.h" +#include "mongo/db/logical_time.h" +#include "mongo/db/time_proof_service.h" +#include "mongo/unittest/unittest.h" + +namespace mongo { +namespace { + +using TimeProof = TimeProofService::TimeProof; + +// Verifies logical time with proof signed with the correct key. +TEST(TimeProofService, VerifyLogicalTimeWithValidProof) { + std::array<std::uint8_t, 20> tempKey = {}; + TimeProofService::Key key(std::move(tempKey)); + TimeProofService timeProofService(std::move(key)); + + LogicalTime time(Timestamp(1)); + TimeProof proof = timeProofService.getProof(time); + + ASSERT_OK(timeProofService.checkProof(time, proof)); +} + +// Fails for logical time with proof signed with an invalid key. +TEST(TimeProofService, LogicalTimeWithMismatchingProofShouldFail) { + std::array<std::uint8_t, 20> tempKey = {}; + TimeProofService::Key key(std::move(tempKey)); + TimeProofService timeProofService(std::move(key)); + + LogicalTime time(Timestamp(1)); + TimeProof invalidProof = {{1, 2, 3}}; + + ASSERT_EQUALS(ErrorCodes::TimeProofMismatch, timeProofService.checkProof(time, invalidProof)); +} + +} // unnamed namespace +} // namespace mongo |