From 46a886a6bdc79f6f731b758dc62de65399d4da82 Mon Sep 17 00:00:00 2001 From: tomoron Date: Sun, 14 Jun 2026 16:33:23 +0200 Subject: [PATCH] add tests --- src/main.rs | 5 ++- src/minecraft/client/buffer.rs | 1 - src/minecraft/handshake.rs | 3 +- src/tests/minecraft/handshake.rs | 21 +++++++++++ src/tests/minecraft/mod.rs | 2 ++ src/tests/minecraft/varint.rs | 61 ++++++++++++++++++++++++++++++++ src/tests/mod.rs | 1 + 7 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/tests/minecraft/handshake.rs create mode 100644 src/tests/minecraft/mod.rs create mode 100644 src/tests/minecraft/varint.rs create mode 100644 src/tests/mod.rs diff --git a/src/main.rs b/src/main.rs index 2eb5b22..467bb8b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,7 @@ /* By: tomoron +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2026/05/29 21:22:17 by tomoron #+# #+# */ -/* Updated: 2026/06/12 18:32:19 by tomoron ### ########.fr */ +/* Updated: 2026/06/14 16:21:23 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,6 +36,9 @@ use bollard::Docker; mod migrations; +#[cfg(test)] +mod tests; + fn get_connection_pool() -> DbPool { let database_url = "sqlite://".to_string() + &Config::load().config_path + "/db.sqlite"; diff --git a/src/minecraft/client/buffer.rs b/src/minecraft/client/buffer.rs index 4044c98..065003f 100644 --- a/src/minecraft/client/buffer.rs +++ b/src/minecraft/client/buffer.rs @@ -48,7 +48,6 @@ impl Client { return Ok(1); } - match self.out_stream.as_mut().unwrap().try_read(&mut self.read_buf) { Ok(n) => { self.in_stream.write_all(&self.read_buf[..n]).await.map_err(|e| format!("Failed to write to client stream :{}", e))?; diff --git a/src/minecraft/handshake.rs b/src/minecraft/handshake.rs index 03343f7..b880d76 100644 --- a/src/minecraft/handshake.rs +++ b/src/minecraft/handshake.rs @@ -2,7 +2,7 @@ use std::collections::VecDeque; use std::fmt; use crate::minecraft::varint::{varint_read, varint_write}; -#[derive(Clone)] +#[derive(Clone, Debug, PartialEq)] pub struct Handshake { pub protocol_version: i32, pub server_address: String, @@ -33,7 +33,6 @@ impl Handshake { pub fn to_packet(&self) -> Vec { let mut packet = Vec::new(); - packet.extend(varint_write(0)); packet.extend(varint_write(self.protocol_version)); let address_bytes = self.server_address.as_bytes(); packet.extend(varint_write(address_bytes.len() as i32)); diff --git a/src/tests/minecraft/handshake.rs b/src/tests/minecraft/handshake.rs new file mode 100644 index 0000000..10ca893 --- /dev/null +++ b/src/tests/minecraft/handshake.rs @@ -0,0 +1,21 @@ +use crate::minecraft::handshake::Handshake; + +#[test] +fn test_handshake_to_packat_from_packet() { + let expected_handshake = Handshake { + protocol_version: 775, + server_address: "tmoron.fr".to_string(), + server_port: 25565, + intent: 1 + }; + let buffer: Vec = vec![ + 0x87, 0x06, // varint 775 + 0x09, 0x74, 0x6d, 0x6f, 0x72, 0x6f, 0x6e, 0x2e, 0x66, 0x72, // 9 chars, "tmoron.fr" + 0x63, 0xdd, // port 25565 (unsigned short) + 0x01 // varint intent 1 + ]; + + let parsed = Handshake::from_packet(&mut buffer.clone().into()).unwrap(); + assert_eq!(parsed, expected_handshake); + assert_eq!(expected_handshake.to_packet(), buffer); +} diff --git a/src/tests/minecraft/mod.rs b/src/tests/minecraft/mod.rs new file mode 100644 index 0000000..03689b6 --- /dev/null +++ b/src/tests/minecraft/mod.rs @@ -0,0 +1,2 @@ +pub mod handshake; +pub mod varint; diff --git a/src/tests/minecraft/varint.rs b/src/tests/minecraft/varint.rs new file mode 100644 index 0000000..fb08af8 --- /dev/null +++ b/src/tests/minecraft/varint.rs @@ -0,0 +1,61 @@ +use crate::minecraft::varint::{ varint_read, varint_write }; +use std::collections::VecDeque; + + +#[test] +fn test_varint_no_interfere_other_values() { + let mut buf: VecDeque = vec![123, 0x28, 0x21].into(); + let _ = varint_read(&mut buf); + + assert_eq!(buf, vec![0x28, 0x21]); +} + +#[test] +fn test_varint_right_answer() { + let mut buf: VecDeque = vec![0xa8, 0x60].into(); + let res = varint_read(&mut buf); + + assert_eq!(buf.len(), 0); + assert_eq!(res, Ok(12328)); +} + +#[test] +fn test_varint_incomplete() { + let mut buf: VecDeque = vec![0xa8].into(); + let res = varint_read(&mut buf); + + assert_eq!(buf.len(), 0); + assert_eq!(res.is_err(), true); +} +#[test] +fn test_varint_limits() { + let mut buf: VecDeque = vec![0x0].into(); + let res_zero = varint_read(&mut buf); + + let mut buf: VecDeque = vec![0xff, 0xff, 0xff, 0xff, 0x07].into(); + let res_max_int = varint_read(&mut buf); + + let mut buf: VecDeque = vec![0x80, 0x80, 0x80, 0x80, 0x8].into(); + let res_min_int = varint_read(&mut buf); + + assert_eq!(buf.len(), 0); + assert_eq!(res_zero, Ok(0)); + assert_eq!(res_max_int, Ok(2147483647)); + assert_eq!(res_min_int, Ok(-2147483648)); +} + +#[test] +fn test_varint_write_normal() { + let res = varint_write(82149); + assert_eq!(res, vec![0xe5, 0x81, 0x05]); +} +#[test] +fn test_varint_write_limits() { + let res_zero = varint_write(0); + let res_max_int = varint_write(2147483647); + let res_min_int = varint_write(-2147483648); + + assert_eq!(res_zero, vec![0x00]); + assert_eq!(res_max_int, vec![0xff, 0xff, 0xff, 0xff, 0x07]); + assert_eq!(res_min_int, vec![0x80, 0x80, 0x80, 0x80, 0x8]) +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..1be1840 --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1 @@ +pub mod minecraft;