1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

add support for panicking on warn/error in simulation tests

This commit is contained in:
mat 2025-06-08 22:46:26 -03:30
parent 338f931c51
commit 3087b0c996
16 changed files with 76 additions and 37 deletions

View file

@ -17,7 +17,7 @@ pub mod player;
mod plugins;
#[doc(hidden)]
pub mod test_simulation;
pub mod test_utils;
pub use account::{Account, AccountOpts};
pub use azalea_protocol::common::client_information::ClientInformation;

View file

@ -3,6 +3,7 @@ use std::{net::SocketAddr, sync::Arc};
use azalea_entity::{LocalEntity, indexing::EntityUuidIndex};
use azalea_protocol::{
ServerAddress,
common::client_information::ClientInformation,
connect::{Connection, ConnectionError, Proxy},
packets::{
ClientIntention, ConnectionProtocol, PROTOCOL_VERSION,
@ -215,7 +216,7 @@ pub fn poll_create_connection_task(
write_conn,
ConnectionProtocol::Login,
),
client_information: crate::ClientInformation::default(),
client_information: ClientInformation::default(),
instance_holder,
metadata: azalea_entity::metadata::PlayerMetadataBundle::default(),
},

View file

@ -0,0 +1,6 @@
pub mod simulation;
pub mod tracing;
pub mod prelude {
pub use super::{simulation::*, tracing::*};
}

View file

@ -0,0 +1,38 @@
use bevy_log::tracing_subscriber::{
self, EnvFilter, Layer,
layer::{Context, SubscriberExt},
registry::LookupSpan,
util::SubscriberInitExt,
};
use tracing::{Event, Level, Subscriber, level_filters::LevelFilter};
pub fn init_tracing() {
init_tracing_with_level(Level::WARN);
}
pub fn init_tracing_with_level(max_level: Level) {
tracing_subscriber::registry()
.with(
tracing_subscriber::fmt::layer().with_filter(
EnvFilter::builder()
.with_default_directive(max_level.into())
.from_env_lossy(),
),
)
.with(TestTracingLayer {
panic_on_level: max_level,
})
.init();
}
struct TestTracingLayer {
panic_on_level: Level,
}
impl<S: Subscriber> Layer<S> for TestTracingLayer {
fn on_event(&self, event: &Event<'_>, _ctx: Context<'_, S>) {
let level = *event.metadata().level();
if level <= self.panic_on_level {
panic!("logged on level {level}");
}
}
}

View file

@ -1,4 +1,4 @@
use azalea_client::{InConfigState, InGameState, test_simulation::*};
use azalea_client::{InConfigState, InGameState, test_utils::prelude::*};
use azalea_core::{position::ChunkPos, resource_location::ResourceLocation};
use azalea_entity::LocalEntity;
use azalea_protocol::packets::{
@ -7,12 +7,11 @@ use azalea_protocol::packets::{
};
use azalea_registry::{DataRegistry, DimensionType};
use azalea_world::InstanceName;
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn test_change_dimension_to_nether_and_back() {
let _ = tracing_subscriber::fmt().try_init();
init_tracing();
generic_test_change_dimension_to_nether_and_back(true);
generic_test_change_dimension_to_nether_and_back(false);
@ -29,8 +28,6 @@ fn generic_test_change_dimension_to_nether_and_back(using_respawn: bool) {
}
};
let _ = tracing_subscriber::fmt::try_init();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
assert!(simulation.has_component::<InConfigState>());
assert!(!simulation.has_component::<InGameState>());

View file

@ -1,11 +1,10 @@
use azalea_client::test_simulation::*;
use azalea_client::test_utils::prelude::*;
use azalea_protocol::packets::ConnectionProtocol;
use azalea_world::InstanceName;
use bevy_log::tracing_subscriber;
#[test]
fn test_client_disconnect() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Game);

View file

@ -1,4 +1,4 @@
use azalea_client::test_simulation::*;
use azalea_client::test_utils::prelude::*;
use azalea_core::{position::ChunkPos, resource_location::ResourceLocation};
use azalea_entity::metadata::Cow;
use azalea_protocol::packets::{
@ -7,12 +7,11 @@ use azalea_protocol::packets::{
};
use azalea_registry::{DataRegistry, DimensionType, EntityKind};
use bevy_ecs::query::With;
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn test_despawn_entities_when_changing_dimension() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
simulation.receive_packet(ClientboundRegistryData {

View file

@ -1,4 +1,4 @@
use azalea_client::{InConfigState, test_simulation::*};
use azalea_client::{InConfigState, test_utils::prelude::*};
use azalea_core::resource_location::ResourceLocation;
use azalea_entity::metadata::Health;
use azalea_protocol::packets::{
@ -6,12 +6,11 @@ use azalea_protocol::packets::{
config::{ClientboundFinishConfiguration, ClientboundRegistryData},
game::ClientboundSetHealth,
};
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn test_fast_login() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
assert!(simulation.has_component::<InConfigState>());

View file

@ -1,4 +1,6 @@
use azalea_client::{InConfigState, InGameState, local_player::InstanceHolder, test_simulation::*};
use azalea_client::{
InConfigState, InGameState, local_player::InstanceHolder, test_utils::prelude::*,
};
use azalea_core::{position::ChunkPos, resource_location::ResourceLocation};
use azalea_entity::LocalEntity;
use azalea_protocol::packets::{
@ -8,12 +10,11 @@ use azalea_protocol::packets::{
};
use azalea_registry::{DataRegistry, DimensionType};
use azalea_world::InstanceName;
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn test_login_to_dimension_with_same_name() {
let _ = tracing_subscriber::fmt().try_init();
init_tracing();
generic_test_login_to_dimension_with_same_name(true);
generic_test_login_to_dimension_with_same_name(false);
@ -30,8 +31,6 @@ fn generic_test_login_to_dimension_with_same_name(using_respawn: bool) {
}
};
let _ = tracing_subscriber::fmt::try_init();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
assert!(simulation.has_component::<InConfigState>());
assert!(!simulation.has_component::<InGameState>());

View file

@ -1,15 +1,15 @@
use azalea_client::test_simulation::*;
use azalea_client::test_utils::prelude::*;
use azalea_core::{position::ChunkPos, resource_location::ResourceLocation};
use azalea_entity::metadata::Cow;
use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundMoveEntityRot};
use azalea_registry::{DataRegistry, DimensionType, EntityKind};
use azalea_world::MinecraftEntityId;
use bevy_ecs::query::With;
use bevy_log::tracing_subscriber;
use tracing::Level;
#[test]
fn test_move_despawned_entity() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing_with_level(Level::ERROR); // a warning is expected here
let mut simulation = Simulation::new(ConnectionProtocol::Game);
simulation.receive_packet(make_basic_login_packet(
@ -26,7 +26,7 @@ fn test_move_despawned_entity() {
// make sure it's spawned
let mut cow_query = simulation.app.world_mut().query_filtered::<(), With<Cow>>();
let cow_iter = cow_query.iter(simulation.app.world());
assert_eq!(cow_iter.count(), 1, "cow should be despawned");
assert_eq!(cow_iter.count(), 1, "cow should be spawned");
// despawn the cow by receiving a login packet
simulation.receive_packet(make_basic_login_packet(

View file

@ -1,4 +1,4 @@
use azalea_client::{InConfigState, test_simulation::*};
use azalea_client::{InConfigState, test_utils::prelude::*};
use azalea_core::{position::Vec3, resource_location::ResourceLocation};
use azalea_protocol::packets::{
ConnectionProtocol,
@ -6,12 +6,11 @@ use azalea_protocol::packets::{
};
use azalea_registry::{DataRegistry, DimensionType, EntityKind};
use azalea_world::InstanceName;
use bevy_log::tracing_subscriber;
use uuid::Uuid;
#[test]
fn test_receive_spawn_entity_and_start_config_packet() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Game);
simulation.receive_packet(make_basic_login_packet(

View file

@ -1,14 +1,13 @@
use azalea_client::{InConfigState, packet::game::SendPacketEvent, test_simulation::*};
use azalea_client::{InConfigState, packet::game::SendPacketEvent, test_utils::prelude::*};
use azalea_core::resource_location::ResourceLocation;
use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundStartConfiguration};
use azalea_registry::{DataRegistry, DimensionType};
use azalea_world::InstanceName;
use bevy_ecs::event::Events;
use bevy_log::tracing_subscriber;
#[test]
fn test_receive_start_config_packet() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Game);
simulation.receive_packet(make_basic_login_packet(

View file

@ -2,7 +2,7 @@ use std::sync::Arc;
use azalea_client::{
packet::{config::SendConfigPacketEvent, game::SendPacketEvent},
test_simulation::*,
test_utils::prelude::*,
};
use azalea_core::resource_location::ResourceLocation;
use azalea_protocol::packets::{
@ -13,13 +13,12 @@ use azalea_protocol::packets::{
game::{self, ServerboundGamePacket},
};
use bevy_ecs::observer::Trigger;
use bevy_log::tracing_subscriber;
use parking_lot::Mutex;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn reply_to_ping_with_pong() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);

View file

@ -1,4 +1,4 @@
use azalea_client::{InConfigState, test_simulation::*};
use azalea_client::{InConfigState, test_utils::prelude::*};
use azalea_core::resource_location::ResourceLocation;
use azalea_entity::{LocalEntity, metadata::Health};
use azalea_protocol::packets::{
@ -7,12 +7,11 @@ use azalea_protocol::packets::{
game::ClientboundSetHealth,
};
use azalea_registry::{DataRegistry, DimensionType};
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
#[test]
fn test_set_health_before_login() {
let _ = tracing_subscriber::fmt::try_init();
init_tracing();
let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
assert!(simulation.has_component::<InConfigState>());

View file

@ -28,6 +28,11 @@ pub struct RelativeMovements {
pub delta_z: bool,
pub rotate_delta: bool,
}
impl RelativeMovements {
pub fn all_absolute() -> Self {
RelativeMovements::default()
}
}
impl AzaleaRead for RelativeMovements {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {