mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 16:57:58 +00:00
27274c42cf
* Fix tracing tests (#8022) * Fix tracing tests The tests were not working properly. 1. Some test was setting a global subscriber, this could lead to racy conditions with other tests. 2. A logging test called `process::exit` which is completly wrong. * Update client/tracing/src/lib.rs Co-authored-by: David <dvdplm@gmail.com> * Review comments Co-authored-by: David <dvdplm@gmail.com> * Fix tracing spans are not being forwarded to spawned task (#8009) * Fix tracing spans are not being forwarded to spawned task There is a bug that tracing spans are not forwarded to spawned task. The problem was that only the telemetry span was forwarded. The solution to this is to use the tracing provided `in_current_span` to capture the current active span and pass the telemetry span explictely. We will now always enter the span when the future is polled. This is essentially the same strategy as tracing is doing with its `Instrumented`, but now extended for our use case with having multiple spans active. * More tests * Proper test for telemetry and prefix span * WIP * Fix test (need to create & enter the span at the same time) * WIP * Remove telemtry_span from sc_service config * CLEANUP * Update comment * Incorrect indent * More meaningful name * Dedent * Naming XD * Attempt to make a more complete test * lint * Missing licenses * Remove user data * CLEANUP * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * CLEANUP * Apply suggestion * Update bin/node/cli/tests/telemetry.rs Co-authored-by: David <dvdplm@gmail.com> * Wrapping lines Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> Co-authored-by: David <dvdplm@gmail.com>
103 lines
3.0 KiB
Rust
103 lines
3.0 KiB
Rust
// This file is part of Substrate.
|
|
|
|
// Copyright (C) 2021 Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
use assert_cmd::cargo::cargo_bin;
|
|
use nix::sys::signal::{kill, Signal::SIGINT};
|
|
use nix::unistd::Pid;
|
|
use std::convert::TryInto;
|
|
use std::process;
|
|
|
|
pub mod common;
|
|
pub mod websocket_server;
|
|
|
|
#[async_std::test]
|
|
async fn telemetry_works() {
|
|
let config = websocket_server::Config {
|
|
capacity: 1,
|
|
max_frame_size: 1048 * 1024,
|
|
send_buffer_len: 32,
|
|
bind_address: "127.0.0.1:0".parse().unwrap(),
|
|
};
|
|
let mut server = websocket_server::WsServer::new(config).await.unwrap();
|
|
|
|
let addr = server.local_addr().unwrap();
|
|
|
|
let server_task = async_std::task::spawn(async move {
|
|
loop {
|
|
use websocket_server::Event;
|
|
match server.next_event().await {
|
|
// New connection on the listener.
|
|
Event::ConnectionOpen { address } => {
|
|
println!("New connection from {:?}", address);
|
|
server.accept();
|
|
}
|
|
|
|
// Received a message from a connection.
|
|
Event::BinaryFrame { message, .. } => {
|
|
let json: serde_json::Value = serde_json::from_slice(&message).unwrap();
|
|
let object = json
|
|
.as_object()
|
|
.unwrap()
|
|
.get("payload")
|
|
.unwrap()
|
|
.as_object()
|
|
.unwrap();
|
|
if matches!(object.get("best"), Some(serde_json::Value::String(_))) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
Event::TextFrame { .. } => panic!("Got a TextFrame over the socket, this is a bug"),
|
|
|
|
// Connection has been closed.
|
|
Event::ConnectionError { .. } => {}
|
|
}
|
|
}
|
|
});
|
|
|
|
let mut substrate = process::Command::new(cargo_bin("substrate"));
|
|
|
|
let mut substrate = substrate
|
|
.args(&["--dev", "--tmp", "--telemetry-url"])
|
|
.arg(format!("ws://{} 10", addr))
|
|
.stdout(process::Stdio::piped())
|
|
.stderr(process::Stdio::piped())
|
|
.stdin(process::Stdio::null())
|
|
.spawn()
|
|
.unwrap();
|
|
|
|
server_task.await;
|
|
|
|
assert!(
|
|
substrate.try_wait().unwrap().is_none(),
|
|
"the process should still be running"
|
|
);
|
|
|
|
// Stop the process
|
|
kill(Pid::from_raw(substrate.id().try_into().unwrap()), SIGINT).unwrap();
|
|
assert!(common::wait_for(&mut substrate, 40)
|
|
.map(|x| x.success())
|
|
.unwrap_or_default());
|
|
|
|
let output = substrate.wait_with_output().unwrap();
|
|
|
|
println!("{}", String::from_utf8(output.stdout).unwrap());
|
|
eprintln!("{}", String::from_utf8(output.stderr).unwrap());
|
|
assert!(output.status.success());
|
|
}
|