mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-05-14 13:52:28 +00:00
Add CanSerializeBack, CanUseToken, and ShouldReturnForbiddenWhenNotAuthenticated authentication tests
This commit is contained in:
parent
5052d19656
commit
bd8b86b65c
3 changed files with 76 additions and 7 deletions
|
@ -1,7 +1,10 @@
|
||||||
using System;
|
using System.IO;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Serialization;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.TestHost;
|
using Microsoft.AspNetCore.TestHost;
|
||||||
|
using ProjectLighthouse.Serialization;
|
||||||
using ProjectLighthouse.Types;
|
using ProjectLighthouse.Types;
|
||||||
|
|
||||||
namespace ProjectLighthouse.Tests {
|
namespace ProjectLighthouse.Tests {
|
||||||
|
@ -12,8 +15,37 @@ namespace ProjectLighthouse.Tests {
|
||||||
public LighthouseTest() {
|
public LighthouseTest() {
|
||||||
this.Server = new TestServer(new WebHostBuilder()
|
this.Server = new TestServer(new WebHostBuilder()
|
||||||
.UseStartup<Startup>());
|
.UseStartup<Startup>());
|
||||||
this.Client = this.Server.CreateClient();
|
|
||||||
|
|
||||||
|
this.Client = this.Server.CreateClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<HttpResponseMessage> AuthenticateResponse(int number = 0) {
|
||||||
|
const char nullChar = (char)0x00;
|
||||||
|
const char sepChar = (char)0x20;
|
||||||
|
const string username = "unitTestUser";
|
||||||
|
|
||||||
|
string stringContent = $"{nullChar}{sepChar}{username}{number}{nullChar}";
|
||||||
|
|
||||||
|
HttpResponseMessage response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", new StringContent(stringContent));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<LoginResult> Authenticate(int number = 0) {
|
||||||
|
HttpResponseMessage response = await this.AuthenticateResponse(number);
|
||||||
|
|
||||||
|
string responseContent = LbpSerializer.StringElement("loginResult", await response.Content.ReadAsStringAsync());
|
||||||
|
|
||||||
|
XmlSerializer serializer = new(typeof(LoginResult));
|
||||||
|
return (LoginResult)serializer.Deserialize(new StringReader(responseContent))!;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<HttpResponseMessage> AuthenticatedRequest(string endpoint, string mmAuth) => AuthenticatedRequest(endpoint, mmAuth, HttpMethod.Get);
|
||||||
|
|
||||||
|
public Task<HttpResponseMessage> AuthenticatedRequest(string endpoint, string mmAuth, HttpMethod method) {
|
||||||
|
using var requestMessage = new HttpRequestMessage(method, endpoint);
|
||||||
|
requestMessage.Headers.Add("Cookie", mmAuth);
|
||||||
|
|
||||||
|
return this.Client.SendAsync(requestMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,13 +1,15 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using ProjectLighthouse.Types;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace ProjectLighthouse.Tests {
|
namespace ProjectLighthouse.Tests {
|
||||||
public class AuthenticationTest : LighthouseTest {
|
public class AuthenticationTest : LighthouseTest {
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task ShouldReturnErrorOnNoPostData() {
|
public async Task ShouldReturnErrorOnNoPostData() {
|
||||||
var response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", null!);
|
HttpResponseMessage response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", null!);
|
||||||
Assert.False(response.IsSuccessStatusCode);
|
Assert.False(response.IsSuccessStatusCode);
|
||||||
#if NET6_0_OR_GREATER
|
#if NET6_0_OR_GREATER
|
||||||
Assert.True(response.StatusCode == HttpStatusCode.BadRequest);
|
Assert.True(response.StatusCode == HttpStatusCode.BadRequest);
|
||||||
|
@ -17,12 +19,42 @@ namespace ProjectLighthouse.Tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
[DatabaseFact]
|
[DatabaseFact]
|
||||||
public async Task ShouldAuthenticateWithValidData() {
|
public async Task ShouldReturnWithValidData() {
|
||||||
const char nullChar = (char)0x00;
|
HttpResponseMessage response = await this.AuthenticateResponse();
|
||||||
const char sepChar = (char)0x20;
|
Assert.True(response.IsSuccessStatusCode);
|
||||||
|
string responseContent = await response.Content.ReadAsStringAsync();
|
||||||
|
Assert.Contains("MM_AUTH=", responseContent);
|
||||||
|
Assert.Contains(ServerSettings.ServerName, responseContent);
|
||||||
|
}
|
||||||
|
|
||||||
var response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", new StringContent($"{nullChar}{sepChar}jvyden{nullChar}"));
|
[DatabaseFact]
|
||||||
Assert.True(response.StatusCode == HttpStatusCode.OK);
|
public async Task CanSerializeBack() {
|
||||||
|
LoginResult loginResult = await this.Authenticate();
|
||||||
|
|
||||||
|
Assert.NotNull(loginResult);
|
||||||
|
Assert.NotNull(loginResult.AuthTicket);
|
||||||
|
Assert.NotNull(loginResult.LbpEnvVer);
|
||||||
|
|
||||||
|
Assert.Contains("MM_AUTH=", loginResult.AuthTicket);
|
||||||
|
Assert.Equal(ServerSettings.ServerName, loginResult.LbpEnvVer);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DatabaseFact]
|
||||||
|
public async Task CanUseToken() {
|
||||||
|
LoginResult loginResult = await this.Authenticate();
|
||||||
|
|
||||||
|
HttpResponseMessage response = await AuthenticatedRequest("/LITTLEBIGPLANETPS3_XML/eula", loginResult.AuthTicket);
|
||||||
|
string responseContent = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
Assert.True(response.IsSuccessStatusCode);
|
||||||
|
Assert.Contains("You are logged in", responseContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DatabaseFact]
|
||||||
|
public async Task ShouldReturnForbiddenWhenNotAuthenticated() {
|
||||||
|
HttpResponseMessage response = await this.Client.GetAsync("/LITTLEBIGPLANETPS3_XML/eula");
|
||||||
|
Assert.False(response.IsSuccessStatusCode);
|
||||||
|
Assert.True(response.StatusCode == HttpStatusCode.Forbidden);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,12 +1,17 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Xml.Serialization;
|
||||||
using ProjectLighthouse.Serialization;
|
using ProjectLighthouse.Serialization;
|
||||||
|
|
||||||
namespace ProjectLighthouse.Types {
|
namespace ProjectLighthouse.Types {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Response to POST /login
|
/// Response to POST /login
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[XmlRoot("loginResult"), XmlType("loginResult")]
|
||||||
public class LoginResult {
|
public class LoginResult {
|
||||||
|
[XmlElement("authTicket")]
|
||||||
public string AuthTicket { get; set; }
|
public string AuthTicket { get; set; }
|
||||||
|
|
||||||
|
[XmlElement("lbpEnvVer")]
|
||||||
public string LbpEnvVer { get; set; }
|
public string LbpEnvVer { get; set; }
|
||||||
|
|
||||||
public string Serialize() {
|
public string Serialize() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue