Skip to content

Commit 21760de

Browse files
authored
Merge pull request #27 from artemijan/fixes
Cleanup+ fix randomly failing tests because of `reset_for_tests` caus…
2 parents 267cf29 + 2d3d1af commit 21760de

File tree

10 files changed

+57
-46
lines changed

10 files changed

+57
-46
lines changed

Cargo.lock

Lines changed: 41 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,4 @@ uuid = { version = "^1.17.0", features = ["v4"] }
5959
strum = { version = "0.27.2", features = ["derive"] }
6060
async-std = { version = "1.13.1", features = ["attributes", "tokio1"] }
6161
bytes = "1.10.1"
62-
ntest = "0.9.3"
62+
serial_test = "3.2.0"

game/Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ kameo.workspace = true
2626
bytes.workspace = true
2727
dotenvy.workspace = true
2828
[dev-dependencies]
29-
ntest.workspace = true
3029
test-utils = { path = "../test-utils" }
3130
entities = { path = "../entities", features = ["test-factories"] }
32-
3331
[lints.rust]
3432
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }

game/src/packets/from_client/restart.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::packets::to_client::{CharSelectionInfo, DeleteObject, RestartResponse};
2-
use crate::pl_client::PlayerClient;
2+
use crate::pl_client::{ClientStatus, PlayerClient};
33
use bytes::BytesMut;
44
use entities::entities::character;
55
use kameo::message::Context;
@@ -28,12 +28,12 @@ impl Message<RequestRestart> for PlayerClient {
2828
_ctx: &mut Context<Self, Self::Reply>,
2929
) -> anyhow::Result<()> {
3030
//todo: if can logout (olymp, pvp flag, events, etc.)
31-
self.stop_movement();
3231
let session_id = self.try_get_session_key()?.get_play_session_id();
3332
let chars = self.try_get_account_chars()?;
3433
let user_name = self.try_get_user()?.username.clone();
3534
let p = CharSelectionInfo::new(&user_name.clone(), session_id, &self.controller, chars)?;
3635
let player = self.try_get_selected_char()?.clone(); // we clone it to avoid borrow checker issues with reference to self
36+
self.set_status(ClientStatus::Authenticated);
3737
self.controller.broadcast_packet_with_filter(
3838
DeleteObject::new(player.get_object_id())?,
3939
Some(Box::new(move |acc, _| !acc.eq(&user_name))),

game/src/packets/handleable/gs_auth_response.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ mod tests {
4545
use crate::test_utils::test::spawn_ls_client_actor;
4646
use l2_core::config::gs::GSServerConfig;
4747
use l2_core::traits::ServerConfig;
48-
use ntest::timeout;
4948
use std::sync::Arc;
5049
use test_utils::utils::get_test_db;
5150
use tokio::io::{split, AsyncReadExt};

game/src/packets/handleable/init_ls.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ mod tests {
3838
use l2_core::config::gs::GSServerConfig;
3939
use l2_core::crypt::rsa::ScrambledRSAKeyPair;
4040
use l2_core::traits::ServerConfig;
41-
use ntest::timeout;
4241
use std::sync::Arc;
4342
use test_utils::utils::get_test_db;
4443
use tokio::io::{split, AsyncReadExt};

game/src/pl_client.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ impl PlayerClient {
338338
dest_z: i32,
339339
actor_ref: ActorRef<PlayerClient>,
340340
) -> anyhow::Result<(i32, i32, i32)> {
341+
if self.status != ClientStatus::InGame {
342+
bail!("Can't start movement. PlayerClient is not in game");
343+
}
341344
// Compute effective current position consistent with validation logic
342345
let (current_x, current_y, current_z) = self.effective_current_position()?;
343346

@@ -363,7 +366,7 @@ impl PlayerClient {
363366
let controller = self.controller.clone();
364367

365368
let task_handle = tokio::spawn(async move {
366-
let mut interval = tokio::time::interval(std::time::Duration::from_millis(300));
369+
let mut interval = tokio::time::interval(Duration::from_millis(300));
367370

368371
loop {
369372
// Check movement state BEFORE waiting
@@ -388,7 +391,7 @@ impl PlayerClient {
388391
error!("Error while broadcasting movement packet");
389392
}
390393
} else {
391-
// Error or no movement state, stop a task
394+
// Error or no movement state, or movement is not allowed, stop a task
392395
break;
393396
}
394397

@@ -588,6 +591,10 @@ impl Message<GetMovementPosition> for PlayerClient {
588591
_: GetMovementPosition,
589592
_ctx: &mut Context<Self, Self::Reply>,
590593
) -> Self::Reply {
594+
if self.status != ClientStatus::InGame {
595+
self.stop_movement();
596+
bail!("Can't get movement position. PlayerClient is not in game");
597+
}
591598
if let Some(movement) = self.movement_state.as_ref() {
592599
let (x, y, z) = movement.calculate_current_position();
593600
let has_arrived = movement.has_arrived();

l2-core/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ serde_json.workspace = true
4242
kameo.workspace = true
4343

4444
[dev-dependencies]
45-
test-utils = { path = "../test-utils" }
45+
test-utils = { path = "../test-utils" }
46+
serial_test.workspace = true

l2-core/src/id_factory.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ mod tests {
106106
}
107107

108108
#[test]
109+
#[serial_test::serial]
109110
fn test_allocation() {
110111
let factory = IdFactory::instance();
111112
factory.reset_for_tests();
@@ -116,6 +117,7 @@ mod tests {
116117
}
117118

118119
#[test]
120+
#[serial_test::serial]
119121
fn test_reuse() {
120122
let factory = IdFactory::instance();
121123
factory.reset_for_tests();

login/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ pnet.workspace = true
2222
tracing.workspace = true
2323
tracing-subscriber.workspace = true
2424
sea-orm.workspace = true
25-
ntest.workspace = true
2625
kameo.workspace = true
2726
dotenvy.workspace = true
2827
bytes.workspace = true

0 commit comments

Comments
 (0)