initial commit
This commit is contained in:
76
interfaces/websocket/server/tests/basic_integration_test.rs
Normal file
76
interfaces/websocket/server/tests/basic_integration_test.rs
Normal file
@@ -0,0 +1,76 @@
|
||||
use circle_ws_lib::{spawn_circle_server, ServerConfig};
|
||||
use rhailib_engine::create_heromodels_engine;
|
||||
use futures_util::{SinkExt, StreamExt};
|
||||
use heromodels::db::hero::OurDB;
|
||||
use rhailib_worker::spawn_rhai_worker;
|
||||
use serde_json::json;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::mpsc;
|
||||
use tokio_tungstenite::{connect_async, tungstenite::protocol::Message};
|
||||
use uuid::Uuid;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_server_startup_and_play() {
|
||||
let circle_pk = Uuid::new_v4().to_string();
|
||||
let redis_url = "redis://127.0.0.1/";
|
||||
|
||||
// --- Worker Setup ---
|
||||
let (shutdown_tx, shutdown_rx) = mpsc::channel(1);
|
||||
let db = Arc::new(OurDB::new("file:memdb_test_server?mode=memory&cache=shared", true).unwrap());
|
||||
let engine = create_heromodels_engine();
|
||||
let worker_id = Uuid::new_v4().to_string();
|
||||
let worker_handle = spawn_rhai_worker(
|
||||
worker_id,
|
||||
circle_pk.to_string(),
|
||||
engine,
|
||||
redis_url.to_string(),
|
||||
shutdown_rx,
|
||||
false,
|
||||
);
|
||||
|
||||
// --- Server Setup ---
|
||||
let config = ServerConfig::new(
|
||||
"127.0.0.1".to_string(),
|
||||
9997, // Using a different port to avoid conflicts
|
||||
redis_url.to_string(),
|
||||
);
|
||||
let (server_task, server_handle) = spawn_circle_server(config).unwrap();
|
||||
let server_join_handle = tokio::spawn(server_task);
|
||||
|
||||
// Give server and worker a moment to start
|
||||
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
|
||||
|
||||
// --- Client Connection and Test ---
|
||||
let ws_url = format!("ws://127.0.0.1:9997/{}", circle_pk);
|
||||
let (mut ws_stream, _) = connect_async(ws_url).await.expect("Failed to connect");
|
||||
|
||||
let play_req = json!({
|
||||
"jsonrpc": "2.0",
|
||||
"method": "play",
|
||||
"params": { "script": "40 + 2" },
|
||||
"id": 1
|
||||
});
|
||||
|
||||
ws_stream
|
||||
.send(Message::Text(play_req.to_string()))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let response = ws_stream.next().await.unwrap().unwrap();
|
||||
let response_text = response.to_text().unwrap();
|
||||
let response_json: serde_json::Value = serde_json::from_str(response_text).unwrap();
|
||||
|
||||
assert_eq!(response_json["id"], 1);
|
||||
assert!(
|
||||
response_json["result"].is_object(),
|
||||
"The result should be an object, but it was: {}",
|
||||
response_text
|
||||
);
|
||||
assert_eq!(response_json["result"]["output"], "42");
|
||||
|
||||
// --- Cleanup ---
|
||||
server_handle.stop(true).await;
|
||||
let _ = server_join_handle.await;
|
||||
let _ = shutdown_tx.send(()).await;
|
||||
let _ = worker_handle.await;
|
||||
}
|
Reference in New Issue
Block a user