@@ -244,6 +244,36 @@ BOOST_DATA_TEST_CASE(ClientFollowsConnectProtocol, usesLuaScriptValues, usesLuaS
244244 }
245245}
246246
247+ BOOST_AUTO_TEST_CASE (ClientStoresReceivedSavegamesInSaveFolder)
248+ {
249+ rttr::test::TmpFolder testUserData;
250+ rttr::test::ConfigOverride userDataOverride (" USERDATA" , testUserData);
251+
252+ GameClient client;
253+ GameMessageInterface& clientMsgInterface = client;
254+ TestServer server;
255+ const auto serverPort = server.tryListen ();
256+ BOOST_TEST_REQUIRE (serverPort >= 0 );
257+
258+ BOOST_TEST_REQUIRE (client.Connect (" localhost" , rttr::test::randString (10 ), rttr::test::randomEnum<ServerType>(),
259+ serverPort, false , false ));
260+ clientMsgInterface.OnGameMessage (GameMessage_Player_Id (1 ));
261+ client.GetMainPlayer ().sendQueue .clear ();
262+ clientMsgInterface.OnGameMessage (GameMessage_Server_TypeOK (GameMessage_Server_TypeOK::StatusCode::Ok, " " ));
263+ client.GetMainPlayer ().sendQueue .clear ();
264+ clientMsgInterface.OnGameMessage (GameMessage_Server_Password (" true" ));
265+ client.GetMainPlayer ().sendQueue .clear ();
266+
267+ const auto expectedSavePath = RTTRCONFIG .ExpandPath (s25::folders::save) / " received.sav" ;
268+
269+ clientMsgInterface.OnGameMessage (GameMessage_Map_Info (" received.sav" , MapType::Savegame, 1 , 1 , 0 , 0 ));
270+ const auto msg = boost::dynamic_pointer_cast<GameMessage_MapRequest>(client.GetMainPlayer ().sendQueue .pop ());
271+ BOOST_TEST_REQUIRE (msg);
272+ BOOST_TEST (!msg->requestInfo );
273+ BOOST_TEST (client.GetMapType () == MapType::Savegame);
274+ BOOST_TEST (client.GetMapPath () == expectedSavePath);
275+ }
276+
247277BOOST_AUTO_TEST_CASE (ClientDetectsMapBufferOverflow)
248278{
249279 rttr::test::LogAccessor _suppressLogOutput;
@@ -287,6 +317,34 @@ BOOST_AUTO_TEST_CASE(ClientDetectsMapBufferOverflow)
287317 BOOST_TEST (client.GetState () == ClientState::Stopped);
288318}
289319
320+ BOOST_AUTO_TEST_CASE (ClientReportsWrongPasswordResponse)
321+ {
322+ GameClient client;
323+ GameMessageInterface& clientMsgInterface = client;
324+ MockClientInterface callbacks;
325+ client.SetInterface (&callbacks);
326+ TestServer server;
327+ const auto serverPort = server.tryListen ();
328+ BOOST_TEST_REQUIRE (serverPort >= 0 );
329+ const auto serverType = rttr::test::randomEnum<ServerType>();
330+ mock::sequence s;
331+ MOCK_EXPECT (callbacks.CI_NextConnectState ).in (s).with (ConnectState::Initiated).once ();
332+ MOCK_EXPECT (callbacks.CI_NextConnectState ).in (s).with (ConnectState::VerifyServer).once ();
333+ MOCK_EXPECT (callbacks.CI_NextConnectState ).in (s).with (ConnectState::QueryPw).once ();
334+ MOCK_EXPECT (callbacks.CI_Error ).in (s).with (ClientError::WrongPassword).once ();
335+
336+ BOOST_TEST_REQUIRE (client.Connect (" localhost" , rttr::test::randString (10 ), serverType, serverPort, false , false ));
337+ clientMsgInterface.OnGameMessage (GameMessage_Player_Id (1 ));
338+ clientMsgInterface.OnGameMessage (GameMessage_Server_TypeOK (GameMessage_Server_TypeOK::StatusCode::Ok, " " ));
339+ BOOST_TEST_REQUIRE (boost::dynamic_pointer_cast<GameMessage_Server_Type>(client.GetMainPlayer ().sendQueue .pop ()));
340+ BOOST_TEST_REQUIRE (
341+ boost::dynamic_pointer_cast<GameMessage_Server_Password>(client.GetMainPlayer ().sendQueue .pop ()));
342+
343+ clientMsgInterface.OnGameMessage (GameMessage_Server_Password (" false" ));
344+
345+ BOOST_TEST (client.GetState () == ClientState::Stopped);
346+ }
347+
290348using namespace std ::chrono_literals;
291349
292350BOOST_AUTO_TEST_CASE (CanSetNewSpeed)
0 commit comments