cf3fd00350
* - standardise versions for all nym-sdk workspace dependencies - prepend sqlx-pool-guard with 'nym-' * Test remove nym-api from deps * Add oneliner to client_pool doc comments * Add note to commented out docs.rs link in sdk * remove nym-api from script * add publishing file * bring non-binary / contract / tools into workspace version * added more info to publishing.md * make deps workspace version * remove uploaded sphinx-types crate from script * remove erroueously included ignore-defaults * add zeroise to feature * chore: Release * add topology to batch * more cargo versioning * more cargo versioning - wasm utils * more cargo versioning - wasm utils * Add publish=false to manifest for cargo workspaces / crates.io publishing exclusion * remove script now switched to manifest based exclusion * rename import based on rename of contracts-common dep * Making workspace versions for publication + removing unnecessary crates from publication * Remove OOD info from publishing sdk guide * rename contract imports + remove package * temp commit: continuing with removal of path from cargo manifest and replacing with workspace version import for publication * continuing with cargo.toml updates * dryrun only erroring on known version problem crates * remove old published-crates file * Minor comment change * remove default features warning * Additional info on workspace dep comment re publish list * Add missing description to cargo.toml * Fix missing feature flags * Add missing descriptions * Fix remaining path import * Add workspace repo / homepage / documentation links to cargo.toml files * remove workspace version from excluded crate * Remove todo descriptions * Minor comment change * add homepage etc * move from bls git import to nym_bls_fork crate * Modify rest of imports from path to workspace import, excluding binaries * add directory/homepage info * fix cargo fmt * add notes to gitignore * better solution to contracts/ experiment * wasm -> nym_wasm crate renaming * fix fatfinger * add metadata to ecash cargo.toml * stub publishing guide * fix misrevolved netlink- version * Fixes and block publication of rebase re: LP * first pass @ workflows
98 lines
2.9 KiB
Rust
98 lines
2.9 KiB
Rust
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// due to expansion of #[wasm_bindgen] macro on NodeTestResult
|
|
#![allow(clippy::drop_non_drop)]
|
|
|
|
use crate::error::NodeTesterError;
|
|
use crate::tester::LockedGatewayClient;
|
|
use crate::types::WasmTestMessageExt;
|
|
use js_sys::Promise;
|
|
use nym_node_tester_utils::processor::Received;
|
|
use nym_node_tester_utils::receiver::ReceivedReceiver;
|
|
use nym_wasm_utils::console_warn;
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
use std::sync::Arc;
|
|
use tokio::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard};
|
|
use wasm_bindgen::prelude::*;
|
|
use wasm_bindgen_futures::future_to_promise;
|
|
|
|
#[derive(Clone)]
|
|
pub(super) struct ReceivedReceiverWrapper(Arc<AsyncMutex<ReceivedReceiver<WasmTestMessageExt>>>);
|
|
|
|
impl ReceivedReceiverWrapper {
|
|
pub(super) fn new(inner: ReceivedReceiver<WasmTestMessageExt>) -> Self {
|
|
ReceivedReceiverWrapper(Arc::new(AsyncMutex::new(inner)))
|
|
}
|
|
|
|
pub(super) async fn clear_received_channel(&self) {
|
|
let mut lost_msgs = 0;
|
|
let mut lost_acks = 0;
|
|
let mut permit = self.0.lock().await;
|
|
while let Ok(Some(received)) = permit.try_next() {
|
|
match received {
|
|
Received::Message(_) => lost_msgs += 1,
|
|
Received::Ack(_) => lost_acks += 1,
|
|
}
|
|
}
|
|
if lost_msgs > 0 || lost_acks > 0 {
|
|
console_warn!("while preparing for the test run, we cleared {lost_msgs} messages and {lost_acks} acks that were received in the meantime.")
|
|
}
|
|
}
|
|
|
|
pub(super) async fn lock(&self) -> AsyncMutexGuard<'_, ReceivedReceiver<WasmTestMessageExt>> {
|
|
self.0.lock().await
|
|
}
|
|
}
|
|
|
|
pub(crate) struct TestMarker {
|
|
value: Arc<AtomicBool>,
|
|
}
|
|
|
|
impl TestMarker {
|
|
pub fn new(value: Arc<AtomicBool>) -> Self {
|
|
Self { value }
|
|
}
|
|
}
|
|
|
|
impl Drop for TestMarker {
|
|
// make sure to clear the test flag when the marker is dropped
|
|
fn drop(&mut self) {
|
|
self.value.store(false, Ordering::SeqCst)
|
|
}
|
|
}
|
|
|
|
pub(crate) trait GatewayReconnection {
|
|
fn disconnect_from_gateway(&self) -> Promise;
|
|
|
|
fn reconnect_to_gateway(&self) -> Promise;
|
|
}
|
|
|
|
impl GatewayReconnection for LockedGatewayClient {
|
|
fn disconnect_from_gateway(&self) -> Promise {
|
|
let this = self.clone();
|
|
|
|
future_to_promise(async move {
|
|
let mut guard = this.lock().await;
|
|
guard
|
|
.disconnect()
|
|
.await
|
|
.map_err(|err| JsValue::from(NodeTesterError::from(err)))?;
|
|
Ok(JsValue::undefined())
|
|
})
|
|
}
|
|
|
|
fn reconnect_to_gateway(&self) -> Promise {
|
|
let this = self.clone();
|
|
|
|
future_to_promise(async move {
|
|
let mut guard = this.lock().await;
|
|
guard
|
|
.try_reconnect()
|
|
.await
|
|
.map_err(|err| JsValue::from(NodeTesterError::from(err)))?;
|
|
Ok(JsValue::undefined())
|
|
})
|
|
}
|
|
}
|