Rework CI and add game server login tests (#615)

* Make tests run in release mode

* Fix multiple command in ci

* I forgot how yaml works

* Shitty workaround

* grr mondays

* Add an NP ticket builder for unit tests

* Add NP ticket unit testing

* Fix range indexers for finding uid

* Fix LoginTests

* Validate unit test signatures

* Make builder code follow same style conventions

* Remove remnant of hardcoded issuer id
This commit is contained in:
Josh 2023-01-07 00:12:39 -06:00 committed by GitHub
parent 337124690d
commit 20b2ef5700
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 540 additions and 80 deletions

View file

@ -8,6 +8,7 @@ using LBPUnion.ProjectLighthouse.Helpers;
using LBPUnion.ProjectLighthouse.PlayerData;
using LBPUnion.ProjectLighthouse.PlayerData.Profiles;
using LBPUnion.ProjectLighthouse.Serialization;
using LBPUnion.ProjectLighthouse.Tickets;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.EntityFrameworkCore;
@ -25,27 +26,38 @@ public class LighthouseServerTest<TStartup> where TStartup : class
this.Server = new TestServer(new WebHostBuilder().UseStartup<TStartup>());
this.Client = this.Server.CreateClient();
}
public async Task<HttpResponseMessage> AuthenticateResponse(int number = -1, bool createUser = true)
public async Task<string> CreateRandomUser(int number = -1, bool createUser = true)
{
if (number == -1) number = new Random().Next();
const string username = "unitTestUser";
if (createUser)
{
await using Database database = new();
if (await database.Users.FirstOrDefaultAsync(u => u.Username == $"{username}{number}") == null)
{
User user = await database.CreateUser($"{username}{number}", CryptoHelper.BCryptHash($"unitTestPassword{number}"));
User user = await database.CreateUser($"{username}{number}",
CryptoHelper.BCryptHash($"unitTestPassword{number}"));
user.LinkedPsnId = (ulong)number;
await database.SaveChangesAsync();
}
}
//TODO: generate actual tickets
string stringContent = $"unitTestTicket{username}{number}";
return $"{username}{number}";
}
public async Task<HttpResponseMessage> AuthenticateResponse(int number = -1, bool createUser = true)
{
string username = await this.CreateRandomUser(number, createUser);
byte[] ticketData = new TicketBuilder()
.SetUsername($"{username}{number}")
.SetUserId((ulong)number)
.Build();
HttpResponseMessage response = await this.Client.PostAsync
($"/LITTLEBIGPLANETPS3_XML/login?titleID={GameVersionHelper.LittleBigPlanet2TitleIds[0]}", new StringContent(stringContent));
($"/LITTLEBIGPLANETPS3_XML/login?titleID={GameVersionHelper.LittleBigPlanet2TitleIds[0]}", new ByteArrayContent(ticketData));
return response;
}