add tests
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
|
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2026/05/29 21:22:17 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;
|
mod migrations;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
|
||||||
fn get_connection_pool() -> DbPool {
|
fn get_connection_pool() -> DbPool {
|
||||||
let database_url = "sqlite://".to_string() + &Config::load().config_path + "/db.sqlite";
|
let database_url = "sqlite://".to_string() + &Config::load().config_path + "/db.sqlite";
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,6 @@ impl Client {
|
|||||||
return Ok(1);
|
return Ok(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
match self.out_stream.as_mut().unwrap().try_read(&mut self.read_buf) {
|
match self.out_stream.as_mut().unwrap().try_read(&mut self.read_buf) {
|
||||||
Ok(n) => {
|
Ok(n) => {
|
||||||
self.in_stream.write_all(&self.read_buf[..n]).await.map_err(|e| format!("Failed to write to client stream :{}", e))?;
|
self.in_stream.write_all(&self.read_buf[..n]).await.map_err(|e| format!("Failed to write to client stream :{}", e))?;
|
||||||
|
|||||||
@ -2,7 +2,7 @@ use std::collections::VecDeque;
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use crate::minecraft::varint::{varint_read, varint_write};
|
use crate::minecraft::varint::{varint_read, varint_write};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub struct Handshake {
|
pub struct Handshake {
|
||||||
pub protocol_version: i32,
|
pub protocol_version: i32,
|
||||||
pub server_address: String,
|
pub server_address: String,
|
||||||
@ -33,7 +33,6 @@ impl Handshake {
|
|||||||
|
|
||||||
pub fn to_packet(&self) -> Vec<u8> {
|
pub fn to_packet(&self) -> Vec<u8> {
|
||||||
let mut packet = Vec::new();
|
let mut packet = Vec::new();
|
||||||
packet.extend(varint_write(0));
|
|
||||||
packet.extend(varint_write(self.protocol_version));
|
packet.extend(varint_write(self.protocol_version));
|
||||||
let address_bytes = self.server_address.as_bytes();
|
let address_bytes = self.server_address.as_bytes();
|
||||||
packet.extend(varint_write(address_bytes.len() as i32));
|
packet.extend(varint_write(address_bytes.len() as i32));
|
||||||
|
|||||||
21
src/tests/minecraft/handshake.rs
Normal file
21
src/tests/minecraft/handshake.rs
Normal 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);
|
||||||
|
}
|
||||||
2
src/tests/minecraft/mod.rs
Normal file
2
src/tests/minecraft/mod.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
pub mod handshake;
|
||||||
|
pub mod varint;
|
||||||
61
src/tests/minecraft/varint.rs
Normal file
61
src/tests/minecraft/varint.rs
Normal 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
1
src/tests/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod minecraft;
|
||||||
Reference in New Issue
Block a user