Skip to content

Commit a707fbd

Browse files
committed
extend tests
Signed-off-by: Sam Batschelet <[email protected]>
1 parent 478f099 commit a707fbd

File tree

4 files changed

+63
-29
lines changed

4 files changed

+63
-29
lines changed

scripts/tests.e2e.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
#!/usr/bin/env bash
22
set -e
33

4-
# build spacesvm-rs binary
4+
# build spacesvm binary
55
# ./scripts/build.release.sh
66
#
77
# download from github, keep network running
8-
# VM_PLUGIN_PATH=$(pwd)/target/release/spacesvm-rs ./scripts/tests.e2e.sh
8+
# VM_PLUGIN_PATH=$(pwd)/target/release/spacesvm ./scripts/tests.e2e.sh
99
#
1010
# download from github, shut down network
11-
# NETWORK_RUNNER_ENABLE_SHUTDOWN=1 VM_PLUGIN_PATH=$(pwd)/target/release/spacesvm-rs ./scripts/tests.e2e.sh
11+
# NETWORK_RUNNER_ENABLE_SHUTDOWN=1 VM_PLUGIN_PATH=$(pwd)/target/release/spacesvm ./scripts/tests.e2e.sh
1212
#
1313
# use custom avalanchego binary
14-
# VM_PLUGIN_PATH=$(pwd)/target/release/timestampvm ./scripts/tests.e2e.sh ~/go/src/github.com/ava-labs/avalanchego/build/avalanchego
14+
# VM_PLUGIN_PATH=$(pwd)/target/release/spacesvm ./scripts/tests.e2e.sh ~/go/src/github.com/ava-labs/avalanchego/build/avalanchego
1515
#
1616
if ! [[ "$0" =~ scripts/tests.e2e.sh ]]; then
1717
echo "must be run from repository root"

spaces-cli/src/bin/spaces-cli/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ struct Cli {
4343
#[command(subcommand)]
4444
command: Command,
4545
}
46-
47-
fn main() -> Result<(), Box<dyn error::Error>> {
46+
#[tokio::main]
47+
async fn main() -> Result<(), Box<dyn error::Error>> {
4848
let cli = Cli::parse();
4949

5050
let private_key = get_or_create_pk(&cli.private_key_file)?;

spacesvm/src/api/client.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,8 @@ impl Client<HttpConnector> {
5353
Id::Num(id)
5454
}
5555

56-
pub fn set_endpoint(mut self, endpoint: Uri) -> Self {
56+
pub fn set_endpoint(&mut self, endpoint: Uri) {
5757
self.endpoint = endpoint;
58-
self
5958
}
6059

6160
pub fn set_private_key(mut self, private_key: Key) -> Self {
@@ -81,7 +80,7 @@ impl Client<HttpConnector> {
8180
/// Returns a recoverable signature from bytes.
8281
pub fn sign_digest(&self, dh: &[u8]) -> Result<Sig> {
8382
if let Some(pk) = &self.private_key {
84-
pk.sign_digest(dh)?;
83+
return pk.sign_digest(dh);
8584
}
8685
Err(Error::new(ErrorKind::Other, "private key not set"))
8786
}
@@ -125,15 +124,14 @@ impl Client<HttpConnector> {
125124
space: space.as_bytes().to_vec(),
126125
key: key.as_bytes().to_vec(),
127126
})?;
128-
let (_id, json_request) = self.raw_request("issueTx", &Params::Array(vec![arg_value]));
127+
let (_id, json_request) = self.raw_request("resolve", &Params::Array(vec![arg_value]));
129128
let resp = self.post_de::<ResolveResponse>(&json_request).await?;
130129

131130
Ok(resp)
132131
}
133132

134133
/// Returns a deserialized response from client request.
135134
pub async fn post_de<T: de::DeserializeOwned>(&self, json: &str) -> Result<T> {
136-
println!("json: {}", json);
137135
let req = Request::builder()
138136
.method(Method::POST)
139137
.uri(self.endpoint.to_string())
@@ -221,8 +219,8 @@ pub fn get_or_create_pk(path: &str) -> Result<key::secp256k1::private_key::Key>
221219
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))
222220
}
223221

224-
#[tokio::test]
225-
async fn test_raw_request() {
222+
#[test]
223+
fn test_raw_request() {
226224
let mut cli = Client::new(Uri::from_static("http://test.url"));
227225
let (id, _) = cli.raw_request("ping", &Params::None);
228226
assert_eq!(id, jsonrpc_core::Id::Num(0));

tests/e2e/src/tests/mod.rs

+52-16
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
use std::{
22
fs,
33
path::Path,
4+
str::FromStr,
45
thread,
56
time::{Duration, Instant},
67
};
78

89
use avalanche_network_runner_sdk::{BlockchainSpec, Client, GlobalConfig, StartRequest};
9-
use avalanche_types::subnet;
10+
use avalanche_types::{ids, subnet};
1011
use spacesvm::{
1112
self,
12-
api::client::{claim_tx, get_or_create_pk, Uri},
13+
api::client::{claim_tx, get_or_create_pk, set_tx, Uri},
1314
};
1415

1516
#[tokio::test]
@@ -33,7 +34,7 @@ async fn e2e() {
3334
assert!(exists);
3435
assert!(Path::new(&vm_plugin_path).exists());
3536

36-
let vm_id = subnet::vm_name_to_id("minikvvm").unwrap();
37+
let vm_id = subnet::vm_name_to_id("spacesvm").unwrap();
3738

3839
let (mut avalanchego_exec_path, _) = crate::get_avalanchego_path();
3940
let plugins_dir = if !avalanchego_exec_path.is_empty() {
@@ -50,7 +51,7 @@ async fn e2e() {
5051
// keep this in sync with "proto" crate
5152
// ref. https://github.com/ava-labs/avalanchego/blob/v1.9.2/version/constants.go#L15-L17
5253
let (exec_path, plugins_dir) =
53-
avalanche_installer::avalanchego::download(None, None, Some("v1.9.2".to_string()))
54+
avalanche_installer::avalanchego::download(None, None, Some("v1.9.3".to_string()))
5455
.await
5556
.unwrap();
5657
avalanchego_exec_path = exec_path;
@@ -180,33 +181,68 @@ async fn e2e() {
180181
log::info!("{}: {}", node_name, iv.uri);
181182
rpc_eps.push(iv.uri.clone());
182183
}
184+
let mut blockchain_id = ids::Id::empty();
185+
for (k, v) in cluster_info.custom_chains.iter() {
186+
log::info!("custom chain info: {}={:?}", k, v);
187+
if v.chain_name == "spacesvm" {
188+
blockchain_id = ids::Id::from_str(&v.chain_id).unwrap();
189+
break;
190+
}
191+
}
192+
193+
log::info!("avalanchego RPC endpoints: {:?}", rpc_eps);
183194

184-
let ep = format!(
185-
"{}/{}",
186-
rpc_eps[0].to_owned(),
187-
spacesvm::vm::PUBLIC_API_ENDPOINT
188-
);
189195
let private_key = get_or_create_pk("/tmp/.spacesvm-cli-pk").expect("generate new private key");
196+
let chain_url = format!("{}/ext/bc/{}/public", rpc_eps[0], blockchain_id);
197+
let mut scli =
198+
spacesvm::api::client::Client::new(chain_url.parse::<Uri>().expect("valid endpoint"))
199+
.set_private_key(private_key);
200+
for ep in rpc_eps.iter() {
201+
let chain_url = format!("{}/ext/bc/{}/public", ep, blockchain_id)
202+
.parse::<Uri>()
203+
.expect("valid endpoint");
204+
scli.set_endpoint(chain_url);
205+
let resp = scli.ping().await.unwrap();
206+
log::info!("ping response from {}: {:?}", ep, resp);
207+
assert!(resp.success);
208+
209+
thread::sleep(Duration::from_millis(300));
210+
}
190211

191-
let mut scli = spacesvm::api::client::Client::new(ep.parse::<Uri>().expect("valid endpoint"))
192-
.set_private_key(private_key);
193-
log::info!("ping request...");
194-
let resp = scli.ping().await.expect("ping success");
195-
log::info!("ping response from {}: {:?}", ep, resp);
212+
scli.set_endpoint(chain_url.parse::<Uri>().expect("valid endpoint"));
196213

197214
log::info!("decode claim tx request...");
198215
let resp = scli
199216
.decode_tx(claim_tx("test"))
200217
.await
201218
.expect("decodeTx success");
202-
log::info!("decode claim response from {}: {:?}", ep, resp);
219+
log::info!("decode claim response from {}: {:?}", chain_url, resp);
203220

204221
log::info!("issue claim tx request...");
205222
let resp = scli
206223
.issue_tx(&resp.typed_data)
207224
.await
208225
.expect("issue_tx success");
209-
log::info!("issue claim tx response from {}: {:?}", ep, resp);
226+
log::info!("issue claim tx response from {}: {:?}", chain_url, resp);
227+
228+
log::info!("decode set tx request...");
229+
let resp = scli
230+
.decode_tx(set_tx("test", "foo", "bar"))
231+
.await
232+
.expect("decodeTx success");
233+
log::info!("decode set response from {}: {:?}", chain_url, resp);
234+
235+
log::info!("issue set tx request...");
236+
let resp = scli
237+
.issue_tx(&resp.typed_data)
238+
.await
239+
.expect("issue_tx success");
240+
log::info!("issue tx tx response from {}: {:?}", chain_url, resp);
241+
242+
log::info!("issue resolve request...");
243+
let resp = scli.resolve("test", "foo").await.expect("resolve success");
244+
log::info!("resolve response from {}: {:?}", chain_url, resp);
245+
assert_eq!(std::str::from_utf8(&resp.value).unwrap(), "bar");
210246

211247
if crate::get_network_runner_enable_shutdown() {
212248
log::info!("shutdown is enabled... stopping...");

0 commit comments

Comments
 (0)