extern crate jmx;
use std::process::Command;
use std::thread;
use std::time::Duration;
use jmx::MBeanAddress;
use jmx::MBeanClientTrait;
use jmx::MBeanThreadedClient;
use jmx::MBeanThreadedClientOptions;
use jmx::Result;
static JMX_PORT: u16 = 1624;
#[test]
fn multi_threaded_delay_connect() {
let mut server = Command::new("java")
.arg("-Dcom.sun.management.jmxremote")
.arg(format!("-Dcom.sun.management.jmxremote.port={}", JMX_PORT))
.arg("-Dcom.sun.management.jmxremote.authenticate=false")
.arg("-Dcom.sun.management.jmxremote.ssl=false")
.arg("TestServer")
.current_dir("tests/jmxserver")
.spawn()
.expect("Could not start JMX server");
thread::sleep(Duration::from_secs(1));
run_test();
let _ = server.kill();
}
fn run_test() {
let address = MBeanAddress::address(format!("localhost:{}", JMX_PORT));
let options = MBeanThreadedClientOptions::default().skip_connect(true);
let client = MBeanThreadedClient::connect_with_options(address.clone(), options)
.expect("Failed to create JMX client");
let result: Result<i32> = client.get_attribute("FOO:name=ServerBean", "ThreadCount");
assert!(result.is_err());
client.reconnect(address.clone()).expect("Failed to connect to the server");
let threads: i32 = client.get_attribute("FOO:name=ServerBean", "ThreadCount")
.expect("Failed to fetch threads count");
assert_eq!(threads, 16);
let options = MBeanThreadedClientOptions::default().skip_connect(true);
client.reconnect_with_options(address, options)
.expect("Failed to disconnect from the server");
let result: Result<i32> = client.get_attribute("FOO:name=ServerBean", "ThreadCount");
assert!(result.is_err());
}