Files
speckle-sharp-sdk/tests/Speckle.Core.Tests.Integration/ServerTransportTests.cs
T
Adam Hathcock 200b84f49a Main to dev (#18)
* Add Instances base (#6)

* Use Uri for checks in GetAccounts function (#8)

* Add integration and perf tests to sln (#9)

* Remove perf tests (#10)

* remove perf tests

* do all unit tests

* Code coverage (#11)

* code coverage

* enable codecov for GA

* Update README.md

* Update coverage and dependencies (#12)

* Update coverage and dependencies

* fmt

* add codecov config

* merge DUI3/Alpha into sdk (#13)

* merge DUI3/Alpha into sdk

* formatting

* Merge Objects dui3/alpha -> dev (#14)

* merge DUI3/Alpha into sdk

* formatting

* Objects changes

* Objects tests

* Unit test project

* update codecov to be less intrusive (#15)

* update codecov to be less intrusive

* fix codecov yaml

* add coverage exclusion

* Merge sharp `dui3/alpha` -> sdk `main` (#16)

* Merge

* csharpier format

* Fixed polysharp issues

* Integration Tests

* Fixes

* Some nullability fixes (#17)

* add coverage exclusion

* fix some tests and fix nullability errors

---------

Co-authored-by: Oğuzhan Koral <45078678+oguzhankoral@users.noreply.github.com>
Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
2024-07-09 13:56:03 +01:00

174 lines
5.8 KiB
C#

using Shouldly;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Helpers;
using Speckle.Core.Models;
using Speckle.Core.Transports;
namespace Speckle.Core.Tests.Integration;
public class ServerTransportTests : IDisposable
{
private string _basePath;
private Account _account;
private Client _client;
private string _streamId;
private ServerTransport _transport;
[OneTimeSetUp]
public async Task InitialSetup()
{
_basePath = Path.Join(Path.GetTempPath(), "speckleTest");
CleanData();
Directory.CreateDirectory(_basePath);
SpecklePathProvider.OverrideApplicationDataPath(_basePath);
_account = await Fixtures.SeedUser();
_client = new Client(_account);
_streamId = await _client.StreamCreate(new StreamCreateInput { description = "Flobber", name = "Blobber" });
}
[SetUp]
public void Setup()
{
CleanData();
// need to recreate the server transport object for each test
// to make sure all folders are properly initialized
_transport = new ServerTransport(_account, _streamId);
}
[TearDown]
public void TearDown()
{
CleanData();
}
private void CleanData()
{
_transport?.Dispose();
if (Directory.Exists(_basePath))
{
Directory.Delete(_basePath, true);
}
}
[Test]
public async Task SendObject()
{
var myObject = Fixtures.GenerateNestedObject();
var objectId = await Operations.Send(myObject, _transport, false);
Assert.That(objectId, Is.Not.Null);
}
[Test]
public async Task SendAndReceiveObjectWithBlobs()
{
var myObject = Fixtures.GenerateSimpleObject();
myObject["blobs"] = Fixtures.GenerateThreeBlobs();
var sentObjectId = await Operations.Send(myObject, _transport, false);
// NOTE: used to debug diffing
// await Operations.Send(myObject, new List<ITransport> { transport });
var receivedObject = await Operations.Receive(sentObjectId, _transport, new MemoryTransport());
var allFiles = Directory
.GetFiles(_transport.BlobStorageFolder)
.Select(fp => fp.Split(Path.DirectorySeparatorChar).Last())
.ToList();
var blobPaths = allFiles
.Where(fp => fp.Length > Blob.LocalHashPrefixLength) // excludes things like .DS_store
.ToList();
// Check that there are three downloaded blobs!
Assert.That(blobPaths, Has.Count.EqualTo(3));
var objectBlobs = receivedObject["blobs"] as IList<object>;
objectBlobs.ShouldNotBeNull();
var blobs = objectBlobs.Cast<Blob>().ToList();
// Check that we have three blobs
Assert.That(blobs, Has.Count.EqualTo(3));
// Check that received blobs point to local path (where they were received)
Assert.That(blobs[0].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[1].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[2].filePath, Contains.Substring(_transport.BlobStorageFolder));
}
[Test]
public async Task SendWithBlobsWithoutSQLiteSendCache()
{
var myObject = Fixtures.GenerateSimpleObject();
myObject["blobs"] = Fixtures.GenerateThreeBlobs();
var memTransport = new MemoryTransport();
var sentObjectId = await Operations.Send(myObject, new List<ITransport> { _transport, memTransport });
var receivedObject = await Operations.Receive(sentObjectId, _transport, new MemoryTransport());
var allFiles = Directory
.GetFiles(_transport.BlobStorageFolder)
.Select(fp => fp.Split(Path.DirectorySeparatorChar).Last())
.ToList();
var blobPaths = allFiles
.Where(fp => fp.Length > Blob.LocalHashPrefixLength) // excludes things like .DS_store
.ToList();
// Check that there are three downloaded blobs!
Assert.That(blobPaths, Has.Count.EqualTo(3));
var objectBlobs = receivedObject["blobs"] as IList<object>;
objectBlobs.ShouldNotBeNull();
var blobs = objectBlobs.Cast<Blob>().ToList();
// Check that we have three blobs
Assert.That(blobs, Has.Count.EqualTo(3));
// Check that received blobs point to local path (where they were received)
Assert.That(blobs[0].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[1].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[2].filePath, Contains.Substring(_transport.BlobStorageFolder));
}
[Test]
public async Task SendReceiveWithCleanedMemoryCache()
{
var myObject = Fixtures.GenerateSimpleObject();
myObject["blobs"] = Fixtures.GenerateThreeBlobs();
var memTransport = new MemoryTransport();
var sentObjectId = await Operations.Send(myObject, new ITransport[] { _transport, memTransport });
memTransport = new MemoryTransport();
Base receivedObject = await Operations.Receive(sentObjectId, _transport, memTransport);
Assert.That(receivedObject, Is.Not.Null);
var allFiles = Directory
.GetFiles(_transport.BlobStorageFolder)
.Select(fp => fp.Split(Path.DirectorySeparatorChar).Last())
.ToList();
var blobPaths = allFiles
.Where(fp => fp.Length > Blob.LocalHashPrefixLength) // excludes things like .DS_store
.ToList();
// Check that there are three downloaded blobs!
Assert.That(blobPaths.Count, Is.EqualTo(3));
var objectBlobs = receivedObject["blobs"] as IList<object>;
objectBlobs.ShouldNotBeNull();
var blobs = objectBlobs.Cast<Blob>().ToList();
// Check that we have three blobs
Assert.That(blobs, Has.Count.EqualTo(3));
// Check that received blobs point to local path (where they were received)
Assert.That(blobs[0].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[1].filePath, Contains.Substring(_transport.BlobStorageFolder));
Assert.That(blobs[2].filePath, Contains.Substring(_transport.BlobStorageFolder));
}
public void Dispose()
{
_client?.Dispose();
_transport?.Dispose();
}
}