Add alpha session gate with cookie auth and login UI.
This commit is contained in:
@@ -431,7 +431,13 @@ public class GameSocketTests(AppHostFixture fixture)
|
||||
[Fact]
|
||||
public async Task OldProtocolVersion_IsRejected()
|
||||
{
|
||||
using var socket = await ConnectRawAsync();
|
||||
using var httpClient = fixture.App.CreateHttpClient("server");
|
||||
var cookie = await SchoolApiTests.LoginAndGetCookieAsync(httpClient);
|
||||
using var socket = new ClientWebSocket();
|
||||
socket.Options.SetRequestHeader("Cookie", cookie);
|
||||
var http = fixture.App.GetEndpoint("server", "http");
|
||||
var uri = new UriBuilder(http) { Scheme = "ws", Path = "/ws/game" }.Uri;
|
||||
await socket.ConnectAsync(uri, TestContext.Current.CancellationToken).WaitAsync(DefaultTimeout);
|
||||
|
||||
await SendAsync(socket, buffer => ProtocolCodec.WriteHello(
|
||||
buffer,
|
||||
@@ -447,7 +453,13 @@ public class GameSocketTests(AppHostFixture fixture)
|
||||
[Fact]
|
||||
public async Task VersionMismatch_IsRejected()
|
||||
{
|
||||
using var socket = await ConnectRawAsync();
|
||||
using var httpClient = fixture.App.CreateHttpClient("server");
|
||||
var cookie = await SchoolApiTests.LoginAndGetCookieAsync(httpClient);
|
||||
using var socket = new ClientWebSocket();
|
||||
socket.Options.SetRequestHeader("Cookie", cookie);
|
||||
var http = fixture.App.GetEndpoint("server", "http");
|
||||
var uri = new UriBuilder(http) { Scheme = "ws", Path = "/ws/game" }.Uri;
|
||||
await socket.ConnectAsync(uri, TestContext.Current.CancellationToken).WaitAsync(DefaultTimeout);
|
||||
|
||||
await SendAsync(socket, buffer => ProtocolCodec.WriteHello(
|
||||
buffer,
|
||||
@@ -474,7 +486,8 @@ public class GameSocketTests(AppHostFixture fixture)
|
||||
|
||||
private async Task<ClientWebSocket> OpenSchoolAsync(int schoolId, byte locale = ProtocolConstants.LocaleRussian)
|
||||
{
|
||||
var socket = await ConnectAsync(locale);
|
||||
using var httpClient = fixture.App.CreateHttpClient("server");
|
||||
var socket = await ConnectAsync(httpClient, locale);
|
||||
await ReceiveUntilAsync(socket, MessageType.ServerWelcome);
|
||||
await SendAsync(socket, buffer =>
|
||||
ProtocolCodec.WriteOpenSchool(buffer, new ClientOpenSchoolMessage(schoolId)));
|
||||
@@ -483,7 +496,30 @@ public class GameSocketTests(AppHostFixture fixture)
|
||||
|
||||
private async Task<ClientWebSocket> ConnectAsync(byte locale = ProtocolConstants.LocaleRussian)
|
||||
{
|
||||
var socket = await ConnectRawAsync();
|
||||
using var httpClient = fixture.App.CreateHttpClient("server");
|
||||
var userName = $"Ws-{Guid.NewGuid():N}"[..12];
|
||||
var cookie = await SchoolApiTests.LoginAndGetCookieAsync(httpClient, userName);
|
||||
|
||||
var socket = new ClientWebSocket();
|
||||
socket.Options.SetRequestHeader("Cookie", cookie);
|
||||
var http = fixture.App.GetEndpoint("server", "http");
|
||||
var uri = new UriBuilder(http) { Scheme = "ws", Path = "/ws/game" }.Uri;
|
||||
await socket.ConnectAsync(uri, TestContext.Current.CancellationToken).WaitAsync(DefaultTimeout);
|
||||
await SendAsync(socket, buffer =>
|
||||
ProtocolCodec.WriteHello(buffer, new ClientHelloMessage(ProtocolConstants.Version, locale)));
|
||||
return socket;
|
||||
}
|
||||
|
||||
private async Task<ClientWebSocket> ConnectAsync(HttpClient client, byte locale = ProtocolConstants.LocaleRussian)
|
||||
{
|
||||
var userName = $"Ws-{Guid.NewGuid():N}"[..12];
|
||||
var cookie = await SchoolApiTests.LoginAndGetCookieAsync(client, userName);
|
||||
|
||||
var socket = new ClientWebSocket();
|
||||
socket.Options.SetRequestHeader("Cookie", cookie);
|
||||
var http = fixture.App.GetEndpoint("server", "http");
|
||||
var uri = new UriBuilder(http) { Scheme = "ws", Path = "/ws/game" }.Uri;
|
||||
await socket.ConnectAsync(uri, TestContext.Current.CancellationToken).WaitAsync(DefaultTimeout);
|
||||
await SendAsync(socket, buffer =>
|
||||
ProtocolCodec.WriteHello(buffer, new ClientHelloMessage(ProtocolConstants.Version, locale)));
|
||||
return socket;
|
||||
|
||||
Reference in New Issue
Block a user