Files
speckle-sharp-sdk/tests/Speckle.Core.Tests.Performance/TestDataHelper.cs
T
2024-06-21 08:42:42 +01:00

55 lines
1.8 KiB
C#

using Microsoft.Data.Sqlite;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Models;
using Speckle.Core.Transports;
namespace Speckle.Core.Tests.Performance;
public sealed class TestDataHelper : IDisposable
{
private static readonly string s_basePath = $"./temp {Guid.NewGuid()}";
private const string APPLICATION_NAME = "Speckle Performance Tests";
public SQLiteTransport Transport { get; private set; }
public string ObjectId { get; private set; }
public async Task SeedTransport(int dataComplexity)
{
Transport = new SQLiteTransport(s_basePath, APPLICATION_NAME);
//seed SQLite transport with test data
ObjectId = await SeedTransport(dataComplexity, Transport).ConfigureAwait(false);
}
public static async Task<string> SeedTransport(int dataComplexity, ITransport transport)
{
//seed SQLite transport with test data
StreamWrapper sw = new($"https://latest.speckle.dev/streams/efd2c6a31d/branches/{dataComplexity}");
var acc = await sw.GetAccount().ConfigureAwait(false);
using var client = new Client(acc);
var branch = await client.BranchGet(sw.StreamId, sw.BranchName!, 1).ConfigureAwait(false);
var objectId = branch.commits.items[0].referencedObject;
using ServerTransport remoteTransport = new(acc, sw.StreamId);
transport.BeginWrite();
await remoteTransport.CopyObjectAndChildren(objectId, transport).ConfigureAwait(false);
transport.EndWrite();
await transport.WriteComplete().ConfigureAwait(false);
return objectId;
}
public async Task<Base> DeserializeBase()
{
return await Operations.Receive(ObjectId, null, Transport).ConfigureAwait(false);
}
public void Dispose()
{
Transport.Dispose();
SqliteConnection.ClearAllPools();
Directory.Delete(s_basePath, true);
}
}