add tests

This commit is contained in:
2026-06-14 16:33:23 +02:00
parent 3791a8b04e
commit 46a886a6bd
7 changed files with 90 additions and 4 deletions

View File

@ -6,7 +6,7 @@
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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";

View File

@ -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))?;

View File

@ -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<u8> {
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));

View File

@ -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<u8> = 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);
}

View File

@ -0,0 +1,2 @@
pub mod handshake;
pub mod varint;

View File

@ -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<u8> = 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<u8> = 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<u8> = 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<u8> = vec![0x0].into();
let res_zero = varint_read(&mut buf);
let mut buf: VecDeque<u8> = vec![0xff, 0xff, 0xff, 0xff, 0x07].into();
let res_max_int = varint_read(&mut buf);
let mut buf: VecDeque<u8> = 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])
}

1
src/tests/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod minecraft;