From 6d992e61d687b40d036e453700c10259eb8c9cca Mon Sep 17 00:00:00 2001 From: Antioch Peverell Date: Thu, 30 Aug 2018 20:08:16 +0100 Subject: [PATCH] Add test coverage for verifier_cache --- core/tests/verifier_cache.rs | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 core/tests/verifier_cache.rs diff --git a/core/tests/verifier_cache.rs b/core/tests/verifier_cache.rs new file mode 100644 index 000000000..887a25c9c --- /dev/null +++ b/core/tests/verifier_cache.rs @@ -0,0 +1,68 @@ +// Copyright 2018 The Grin Developers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +extern crate chrono; +extern crate grin_core; +extern crate grin_keychain as keychain; +extern crate grin_util as util; +extern crate grin_wallet as wallet; + +use std::sync::{Arc, RwLock}; + +pub mod common; + +use grin_core::core::verifier_cache::{LruVerifierCache, VerifierCache}; +use grin_core::core::{Output, OutputFeatures}; +use keychain::{ExtKeychain, Keychain}; +use wallet::libtx::proof; + +fn verifier_cache() -> Arc> { + Arc::new(RwLock::new(LruVerifierCache::new())) +} + +#[test] +fn test_verifier_cache_rangeproofs() { + let cache = verifier_cache(); + + let keychain = ExtKeychain::from_random_seed().unwrap(); + let key_id = keychain.derive_key_id(1).unwrap(); + let commit = keychain.commit(5, &key_id).unwrap(); + let proof = proof::create(&keychain, 5, &key_id, commit, None).unwrap(); + + let out = Output { + features: OutputFeatures::DEFAULT_OUTPUT, + commit: commit, + proof: proof, + }; + + // Check our output is not verified according to the cache. + { + let mut cache = cache.write().unwrap(); + let unverified = cache.filter_rangeproof_unverified(&vec![out]); + assert_eq!(unverified, vec![out]); + } + + // Add our output to the cache. + { + let mut cache = cache.write().unwrap(); + cache.add_rangeproof_verified(vec![out]); + } + + // Check it shows as verified according to the cache. + { + let mut cache = cache.write().unwrap(); + let unverified = cache.filter_rangeproof_unverified(&vec![out]); + assert_eq!(unverified, vec![]); + } +}