1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-26 03:43:22 +08:00
osu-lazer/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerRoomManager.cs

179 lines
6.0 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2021-03-03 18:40:19 +08:00
using System;
using NUnit.Framework;
using osu.Framework.Graphics;
2020-12-19 01:17:07 +08:00
using osu.Framework.Testing;
2020-12-25 12:38:11 +08:00
using osu.Game.Online.Rooms;
2021-03-03 18:40:19 +08:00
using osu.Game.Screens.OnlinePlay.Components;
using osu.Game.Tests.Beatmaps;
namespace osu.Game.Tests.Visual.Multiplayer
{
2020-12-19 01:17:07 +08:00
[HeadlessTest]
public class TestSceneMultiplayerRoomManager : RoomTestScene
{
2020-12-25 12:38:11 +08:00
private TestMultiplayerRoomContainer roomContainer;
private TestMultiplayerRoomManager roomManager => roomContainer.RoomManager;
[Test]
public void TestPollsInitially()
{
AddStep("create room manager with a few rooms", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom(r => r.Name.Value = "1"));
roomManager.PartRoom();
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom(r => r.Name.Value = "2"));
roomManager.PartRoom();
roomManager.ClearRooms();
});
});
2021-03-03 18:40:19 +08:00
AddAssert("manager polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 2);
AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value);
}
[Test]
public void TestRoomsClearedOnDisconnection()
{
AddStep("create room manager with a few rooms", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.PartRoom();
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.PartRoom();
});
});
AddStep("disconnect", () => roomContainer.Client.Disconnect());
2021-03-03 18:40:19 +08:00
AddAssert("rooms cleared", () => ((RoomManager)roomManager).Rooms.Count == 0);
AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value);
}
[Test]
public void TestRoomsPolledOnReconnect()
{
AddStep("create room manager with a few rooms", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.PartRoom();
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.PartRoom();
});
});
AddStep("disconnect", () => roomContainer.Client.Disconnect());
AddStep("connect", () => roomContainer.Client.Connect());
2021-03-03 18:40:19 +08:00
AddAssert("manager polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 2);
AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value);
}
[Test]
public void TestRoomsNotPolledWhenJoined()
{
AddStep("create room manager with a room", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.ClearRooms();
});
});
2021-03-03 18:40:19 +08:00
AddAssert("manager not polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 0);
AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value);
}
[Test]
public void TestMultiplayerRoomJoinedWhenCreated()
{
AddStep("create room manager with a room", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
});
});
AddUntilStep("multiplayer room joined", () => roomContainer.Client.Room != null);
}
[Test]
public void TestMultiplayerRoomPartedWhenAPIRoomParted()
{
AddStep("create room manager with a room", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
roomManager.CreateRoom(createRoom());
roomManager.PartRoom();
});
});
AddAssert("multiplayer room parted", () => roomContainer.Client.Room == null);
}
[Test]
2020-12-20 17:24:15 +08:00
public void TestMultiplayerRoomJoinedWhenAPIRoomJoined()
{
AddStep("create room manager with a room", () =>
{
createRoomManager().With(d => d.OnLoadComplete += _ =>
{
2021-03-03 18:40:19 +08:00
var r = createRoom();
roomManager.CreateRoom(r);
roomManager.PartRoom();
roomManager.JoinRoom(r);
});
});
AddUntilStep("multiplayer room joined", () => roomContainer.Client.Room != null);
}
2021-03-03 18:40:19 +08:00
private Room createRoom(Action<Room> initFunc = null)
{
var room = new Room
2021-03-03 18:40:19 +08:00
{
Name =
{
Value = "test room"
},
Playlist =
{
new PlaylistItem
{
Beatmap = { Value = new TestBeatmap(Ruleset.Value).BeatmapInfo },
Ruleset = { Value = Ruleset.Value }
}
}
};
2021-03-03 18:40:19 +08:00
initFunc?.Invoke(room);
return room;
}
2020-12-25 12:38:11 +08:00
private TestMultiplayerRoomManager createRoomManager()
{
2020-12-25 12:38:11 +08:00
Child = roomContainer = new TestMultiplayerRoomContainer
{
RoomManager =
{
TimeBetweenListingPolls = { Value = 1 },
TimeBetweenSelectionPolls = { Value = 1 }
}
};
return roomManager;
}
}
}