1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//! Integration tests for command `key`
use crate::common::{self, traits::Convert, Result};
const SIGNATURE_PATT: &str = "Signature:";
const SEED_PATT: &str = "Seed:";
#[cfg(feature = "node-key")]
const SECRET_PATT: &str = "Secret:";
const PUBLIC_PATT: &str = "Public key:";
fn parse_from<'s>(log: &'s str, patt: &'s str) -> &'s str {
let arr = log.split(patt).collect::<Vec<&str>>();
arr[1].split_whitespace().collect::<Vec<&str>>()[0]
}
#[test]
fn test_sign_and_verify() -> Result<()> {
// STDOUT of generate output template:
//
// Secret Phrase `cool link because slight minute face pelican among wise split timber museum` is account:
// Secret Seed: 0xb437604109791c3ea203cb840e29d7512e65251237bb927b65fae9bea0829c09
// Public key: 0xcafede900f53dae1b499d2a0d70898d631900e5918b2ba76bbcfafef9e5f007f
// SS58 Address: 5GesEyyr5EU1rGLt9JK72EYdvAeakqWNoKk5i7ZZSq9n6U3R
let key_info = common::gear(&["key", "generate"])?.stdout.convert();
let secret = parse_from(&key_info, SEED_PATT);
let public = parse_from(&key_info, PUBLIC_PATT);
// STDOUT of sign output template:
//
// Signature: 24d8d89e1a40ea6a1e076a598551062c21125877650085d6fde8f15c48ab3a65890eacfaeedddd22e23e3891f52610adac72fc6dbf0dcef5dbe133a96fd49087
// The signer of this signature is account:
// Secret Seed: 0xafaedcf860ebcda8c9439630d177d98cd3e799c1f7f1296a792e30263d3b120a
// Public key: 0xe4b6453570bc573eebe4143e40e023c7d702e2d8ffc0e3b39d4268671a3f1362
// SS58 Address: 5HEavLjXpVQtAWrsr7BjxXZysoW27zESHGpMX6nro7RGFEMA
let message = "42";
let sign_info = common::gear(&["key", "sign", secret, message])?
.stdout
.convert();
let sig = parse_from(&sign_info, SIGNATURE_PATT);
// STDOUT of verify output template:
//
// Result: true
let verify_info = common::gear(&["key", "verify", sig, message, public])?
.stdout
.convert();
assert!(verify_info.contains("true"));
Ok(())
}
#[test]
#[cfg(feature = "node-key")]
fn test_node_key() -> Result<()> {
// template STDOUT
//
// Secret: 0x510b7a90ac2050b8952682489da36f5064f0b7348f3da557dacc36ae8c66cc99
// Peer ID: 12D3KooWQEUQzpFif7Kv7BgGpniQPat8X1tjLkogrNyL4cww51MR
let key_info = common::gear(&["key", "generate-node-key"])?
.stdout
.convert();
let secret = parse_from(&key_info, SECRET_PATT);
// template STDOUT
//
// Peer ID: 12D3KooWQEUQzpFif7Kv7BgGpniQPat8X1tjLkogrNyL4cww51MR
let inspect_info = common::gear(&["key", "inspect-node-key", secret])?
.stdout
.convert();
assert!(key_info.contains(&inspect_info));
Ok(())
}