test: simple integration test to start and stop relay

This commit is contained in:
Greg Heartsfield 2022-09-11 12:54:24 -05:00
parent 4fa8616c73
commit 786a354776

55
tests/integration_test.rs Normal file
View File

@ -0,0 +1,55 @@
use console_subscriber::ConsoleLayer;
use log::*;
use nostr_rs_relay::config;
use nostr_rs_relay::server::start_server;
use std::sync::mpsc as syncmpsc;
use std::sync::mpsc::{Receiver as MpscReceiver, Sender as MpscSender};
use std::thread;
use std::thread::JoinHandle;
use std::time::Duration;
struct Relay {
handle: JoinHandle<()>,
shutdown_tx: MpscSender<()>,
}
fn start_relay(port: u16) -> Relay {
ConsoleLayer::builder().with_default_env().init();
let _ = env_logger::try_init();
info!("Starting up from main");
// replace default settings
let mut settings = config::Settings::default();
settings.database.in_memory = true;
settings.network.port = port;
let (shutdown_tx, shutdown_rx): (MpscSender<()>, MpscReceiver<()>) = syncmpsc::channel();
let handle = thread::spawn(|| {
let _ = start_server(settings, shutdown_rx);
});
return Relay {
handle,
shutdown_tx,
};
}
#[test]
fn startup() {
let relay = start_relay(8080);
// just make sure we can startup and shut down.
// if we send a shutdown message before the server is listening,
// we will get a SendError. Keep sending until someone is
// listening.
loop {
let shutdown_res = relay.shutdown_tx.send(());
match shutdown_res {
Ok(()) => {
break;
}
Err(_) => {
thread::sleep(Duration::from_millis(100));
}
}
}
// wait for relay to shutdown
let thread_join = relay.handle.join();
assert!(thread_join.is_ok());
}