mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-21 11:31:08 +03:00
97 lines
2.6 KiB
Rust
97 lines
2.6 KiB
Rust
|
// 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.
|
||
|
|
||
|
//! Top-level Graph tests
|
||
|
|
||
|
extern crate grin_core as core;
|
||
|
extern crate grin_keychain as keychain;
|
||
|
extern crate grin_pool as pool;
|
||
|
extern crate grin_wallet as wallet;
|
||
|
|
||
|
extern crate rand;
|
||
|
|
||
|
use keychain::Keychain;
|
||
|
use core::core::OutputFeatures;
|
||
|
use core::core::transaction::ProofMessageElements;
|
||
|
use wallet::libwallet::proof;
|
||
|
|
||
|
#[test]
|
||
|
fn test_add_entry() {
|
||
|
let keychain = Keychain::from_random_seed().unwrap();
|
||
|
let key_id1 = keychain.derive_key_id(1).unwrap();
|
||
|
let key_id2 = keychain.derive_key_id(2).unwrap();
|
||
|
let key_id3 = keychain.derive_key_id(3).unwrap();
|
||
|
|
||
|
let output_commit = keychain.commit(70, &key_id1).unwrap();
|
||
|
|
||
|
let inputs = vec![
|
||
|
core::core::transaction::Input::new(
|
||
|
OutputFeatures::DEFAULT_OUTPUT,
|
||
|
keychain.commit(50, &key_id2).unwrap(),
|
||
|
None,
|
||
|
None,
|
||
|
),
|
||
|
core::core::transaction::Input::new(
|
||
|
OutputFeatures::DEFAULT_OUTPUT,
|
||
|
keychain.commit(25, &key_id3).unwrap(),
|
||
|
None,
|
||
|
None,
|
||
|
),
|
||
|
];
|
||
|
|
||
|
let msg = ProofMessageElements::new(100, &key_id1);
|
||
|
|
||
|
let output = core::core::transaction::Output {
|
||
|
features: OutputFeatures::DEFAULT_OUTPUT,
|
||
|
commit: output_commit,
|
||
|
proof: proof::create(
|
||
|
&keychain,
|
||
|
100,
|
||
|
&key_id1,
|
||
|
output_commit,
|
||
|
None,
|
||
|
msg.to_proof_message(),
|
||
|
).unwrap(),
|
||
|
};
|
||
|
|
||
|
let kernel = core::core::transaction::TxKernel::empty()
|
||
|
.with_fee(5)
|
||
|
.with_lock_height(0);
|
||
|
|
||
|
let test_transaction =
|
||
|
core::core::transaction::Transaction::new(inputs, vec![output], vec![kernel]);
|
||
|
|
||
|
let test_pool_entry = pool::graph::PoolEntry::new(&test_transaction);
|
||
|
|
||
|
let incoming_edge_1 = pool::graph::Edge::new(
|
||
|
Some(random_hash()),
|
||
|
Some(core::core::hash::ZERO_HASH),
|
||
|
core::core::OutputIdentifier::from_output(&output),
|
||
|
);
|
||
|
|
||
|
let mut test_graph = pool::graph::DirectedGraph::empty();
|
||
|
|
||
|
test_graph.add_entry(test_pool_entry, vec![incoming_edge_1]);
|
||
|
|
||
|
assert_eq!(test_graph.vertices.len(), 1);
|
||
|
assert_eq!(test_graph.roots.len(), 0);
|
||
|
assert_eq!(test_graph.edges.len(), 1);
|
||
|
}
|
||
|
|
||
|
/// For testing/debugging: a random tx hash
|
||
|
fn random_hash() -> core::core::hash::Hash {
|
||
|
let hash_bytes: [u8; 32] = rand::random();
|
||
|
core::core::hash::Hash(hash_bytes)
|
||
|
}
|