-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
V2 slate versioning enablement (#85)
* fix for command line listener port override * reduce parameter query size * Add slate versioning * rustfmt * bump version number * Add tests for slate version conversion * rustfmt * Updates and test addition based on bdap's review * rustfmt
- Loading branch information
1 parent
54bd364
commit 47ee03c
Showing
17 changed files
with
3,787 additions
and
278 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
[package] | ||
name = "grin_wallet" | ||
version = "1.1.0-beta.1" | ||
version = "1.1.0-beta.2" | ||
authors = ["Grin Developers <[email protected]>"] | ||
description = "Simple, private and scalable cryptocurrency implementation based on the MimbleWimble chain format." | ||
license = "Apache-2.0" | ||
|
@@ -29,13 +29,13 @@ prettytable-rs = "0.7" | |
log = "0.4" | ||
linefeed = "0.5" | ||
|
||
grin_wallet_api = { path = "./api", version = "1.1.0-beta.1" } | ||
grin_wallet_impls = { path = "./impls", version = "1.1.0-beta.1" } | ||
grin_wallet_libwallet = { path = "./libwallet", version = "1.1.0-beta.1" } | ||
grin_wallet_controller = { path = "./controller", version = "1.1.0-beta.1" } | ||
grin_wallet_config = { path = "./config", version = "1.1.0-beta.1" } | ||
grin_wallet_api = { path = "./api", version = "1.1.0-beta.2" } | ||
grin_wallet_impls = { path = "./impls", version = "1.1.0-beta.2" } | ||
grin_wallet_libwallet = { path = "./libwallet", version = "1.1.0-beta.2" } | ||
grin_wallet_controller = { path = "./controller", version = "1.1.0-beta.2" } | ||
grin_wallet_config = { path = "./config", version = "1.1.0-beta.2" } | ||
|
||
grin_wallet_util = { path = "./util", version = "1.1.0-beta.1" } | ||
grin_wallet_util = { path = "./util", version = "1.1.0-beta.2" } | ||
|
||
[build-dependencies] | ||
built = "0.3" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
[package] | ||
name = "grin_wallet_api" | ||
version = "1.1.0-beta.1" | ||
version = "1.1.0-beta.2" | ||
authors = ["Grin Developers <[email protected]>"] | ||
description = "Grin Wallet API" | ||
license = "Apache-2.0" | ||
|
@@ -18,11 +18,11 @@ serde_json = "1" | |
easy-jsonrpc = "0.4.1" | ||
chrono = { version = "0.4.4", features = ["serde"] } | ||
|
||
grin_wallet_libwallet = { path = "../libwallet", version = "1.1.0-beta.1" } | ||
grin_wallet_config = { path = "../config", version = "1.1.0-beta.1" } | ||
grin_wallet_impls = { path = "../impls", version = "1.1.0-beta.1" } | ||
grin_wallet_libwallet = { path = "../libwallet", version = "1.1.0-beta.2" } | ||
grin_wallet_config = { path = "../config", version = "1.1.0-beta.2" } | ||
grin_wallet_impls = { path = "../impls", version = "1.1.0-beta.2" } | ||
|
||
grin_wallet_util = { path = "../util", version = "1.1.0-beta.1" } | ||
grin_wallet_util = { path = "../util", version = "1.1.0-beta.2" } | ||
|
||
[dev-dependencies] | ||
serde_json = "1" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
// Copyright 2019 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. | ||
|
||
//! core::libtx specific tests | ||
use grin_wallet_api::foreign_rpc_client; | ||
use grin_wallet_api::run_doctest_foreign; | ||
use grin_wallet_libwallet::{Slate, SlateVersion, VersionedSlate}; | ||
use serde_json; | ||
use serde_json::Value; | ||
use tempfile::tempdir; | ||
//use grin_wallet_libwallet::slate_versions::v1::SlateV1; | ||
//use grin_wallet_libwallet::slate_versions::v2::SlateV2; | ||
|
||
// test all slate conversions | ||
#[test] | ||
fn receive_versioned_slate() { | ||
// as in doctests, except exercising versioning functionality | ||
// by accepting and responding with a V1 slate | ||
|
||
let dir = tempdir().map_err(|e| format!("{:#?}", e)).unwrap(); | ||
let dir = dir | ||
.path() | ||
.to_str() | ||
.ok_or("Failed to convert tmpdir path to string.".to_owned()) | ||
.unwrap(); | ||
|
||
let v1_req = include_str!("slates/v1_req.slate"); | ||
let v1_resp = include_str!("slates/v1_res.slate"); | ||
|
||
// leave here for the ability to create earlier slate versions | ||
// for test input | ||
/*let v: Value = serde_json::from_str(v1_req).unwrap(); | ||
let v2_slate = v["params"][0].clone(); | ||
println!("{}", v2_slate); | ||
let v2_slate_str = v2_slate.to_string(); | ||
println!("{}", v2_slate_str); | ||
let v2: SlateV2 = serde_json::from_str(&v2_slate.to_string()).unwrap(); | ||
let v1 = SlateV1::from(v2); | ||
let v1_str = serde_json::to_string_pretty(&v1).unwrap(); | ||
panic!("{}", v1_str);*/ | ||
|
||
let request_val: Value = serde_json::from_str(v1_req).unwrap(); | ||
let expected_response: Value = serde_json::from_str(v1_resp).unwrap(); | ||
|
||
let response = run_doctest_foreign(request_val, dir, 5, true) | ||
.unwrap() | ||
.unwrap(); | ||
|
||
if response != expected_response { | ||
panic!( | ||
"(left != right) \nleft: {}\nright: {}", | ||
serde_json::to_string_pretty(&response).unwrap(), | ||
serde_json::to_string_pretty(&expected_response).unwrap() | ||
); | ||
} | ||
} | ||
|
||
/// call ForeignRpc::receive_tx on vs and return the result | ||
fn receive_tx(vs: VersionedSlate) -> VersionedSlate { | ||
let dir = tempdir().map_err(|e| format!("{:#?}", e)).unwrap(); | ||
let dir = dir | ||
.path() | ||
.to_str() | ||
.ok_or("Failed to convert tmpdir path to string.".to_owned()) | ||
.unwrap(); | ||
let bound_method = foreign_rpc_client::receive_tx( | ||
vs, | ||
None, | ||
Some("Thanks for saving my dog from that tree, bddap.".into()), | ||
) | ||
.unwrap(); | ||
let (call, tracker) = bound_method.call(); | ||
let json_response = run_doctest_foreign(call.as_request(), dir, 5, false) | ||
.unwrap() | ||
.unwrap(); | ||
let mut response = easy_jsonrpc::Response::from_json_response(json_response).unwrap(); | ||
tracker.get_return(&mut response).unwrap().unwrap() | ||
} | ||
|
||
#[test] | ||
fn version_unchanged() { | ||
let req: Value = serde_json::from_str(include_str!("slates/v1_req.slate")).unwrap(); | ||
let slate: VersionedSlate = serde_json::from_value(req["params"][0].clone()).unwrap(); | ||
let slate_req: Slate = slate.into(); | ||
|
||
assert_eq!( | ||
receive_tx(VersionedSlate::into_version( | ||
slate_req.clone(), | ||
SlateVersion::V0 | ||
)) | ||
.version(), | ||
SlateVersion::V0 | ||
); | ||
|
||
assert_eq!( | ||
receive_tx(VersionedSlate::into_version( | ||
slate_req.clone(), | ||
SlateVersion::V1 | ||
)) | ||
.version(), | ||
SlateVersion::V1 | ||
); | ||
|
||
assert_eq!( | ||
receive_tx(VersionedSlate::into_version( | ||
slate_req.clone(), | ||
SlateVersion::V2 | ||
)) | ||
.version(), | ||
SlateVersion::V2 | ||
); | ||
|
||
// compile time test will remind us to update these tests when updating slate format | ||
fn _all_versions_tested(vs: VersionedSlate) { | ||
match vs { | ||
VersionedSlate::V0(_) => (), | ||
VersionedSlate::V1(_) => (), | ||
VersionedSlate::V2(_) => (), | ||
} | ||
} | ||
} |
Oops, something went wrong.