Browse Source

Extract testing server to a new crate.

wip
Titouan Rigoudy 4 years ago
parent
commit
c737a6b892
7 changed files with 33 additions and 12 deletions
  1. +12
    -0
      Cargo.lock
  2. +1
    -0
      Cargo.toml
  3. +0
    -2
      proto/src/server/mod.rs
  4. +13
    -0
      server/Cargo.toml
  5. +1
    -1
      server/src/lib.rs
  6. +3
    -6
      server/src/server.rs
  7. +3
    -3
      server/src/user_status.rs

+ 12
- 0
Cargo.lock View File

@ -774,6 +774,18 @@ dependencies = [
"tokio",
]
[[package]]
name = "solstice-server"
version = "0.1.0"
dependencies = [
"anyhow",
"env_logger 0.8.4",
"log",
"parking_lot",
"solstice-proto",
"tokio",
]
[[package]]
name = "strsim"
version = "0.8.0"


+ 1
- 0
Cargo.toml View File

@ -3,4 +3,5 @@
members = [
"client",
"proto",
"server",
]

+ 0
- 2
proto/src/server/mod.rs View File

@ -3,8 +3,6 @@ mod constants;
mod credentials;
mod request;
mod response;
#[cfg(test)]
mod testing;
mod version;
pub use self::client::{Client, ClientLoginError, ClientWorker};


+ 13
- 0
server/Cargo.toml View File

@ -0,0 +1,13 @@
[package]
name = "solstice-server"
version = "0.1.0"
authors = ["letitz"]
edition = "2021"
[dependencies]
anyhow = "^1.0"
env_logger = "^0.8"
log = "^0.4"
parking_lot = "^0.11"
solstice-proto = { path = "../proto" }
tokio = { version = "^1.0", features = ["full"] }

proto/src/server/testing/mod.rs → server/src/lib.rs View File

@ -1,4 +1,4 @@
//! Testing utilities for server protocol code.
//! A server library, mostly for testing.
mod server;
mod user_status;

proto/src/server/testing/server.rs → server/src/server.rs View File

@ -1,22 +1,18 @@
//! Provides utilities for testing protocol code.
// TODO: Move this to a separate crate, so that it can be depended upon as a
// dev dependency in tests and run standalone as examples. Layering should be:
// solstice-client -(dev)-> solstice-server -> solstice-proto
use std::io;
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use anyhow::{bail, Context};
use log::{info, warn};
use solstice_proto::core::{FrameReader, FrameWriter, Worker};
use solstice_proto::server::{LoginResponse, ServerRequest, ServerResponse};
use tokio::net::tcp::{OwnedReadHalf, OwnedWriteHalf};
use tokio::net::{TcpListener, TcpStream};
use tokio::sync::mpsc;
use tokio::sync::oneshot;
use tokio::sync::watch;
use crate::core::{FrameReader, FrameWriter, Worker};
use crate::server::{LoginResponse, ServerRequest, ServerResponse};
/// A handler for a single client connected to the server.
pub trait ClientHandler {
/// Runs this handler against the given incoming stream of requests.
@ -300,6 +296,7 @@ where
///
/// Useful for tests who need to guarantee a handler is spawned before the
/// server shuts down.
#[cfg(test)]
async fn accept(&mut self) -> io::Result<()> {
let (stream, peer_address) = self.listener.accept().await?;
self.spawn_handler(stream, peer_address);

proto/src/server/testing/user_status.rs → server/src/user_status.rs View File

@ -3,12 +3,12 @@ use std::sync::Arc;
use log::warn;
use parking_lot::Mutex;
use crate::server::testing::{ClientHandlerFactory, RequestHandler};
use crate::server::{
use solstice_proto::server::{
ServerRequest, ServerResponse, UserStatusRequest, UserStatusResponse,
};
use crate::{ClientHandlerFactory, RequestHandler};
/// A map of user names to user status responses to serve.
#[derive(Debug, Default)]
pub struct UserStatusMap {

Loading…
Cancel
Save