MalwareMultiScan/MalwareMultiScan.Tests/Api/ScanResultServiceTests.cs

102 lines
3.1 KiB
C#
Raw Normal View History

2020-10-29 12:17:09 +02:00
using System.IO;
using System.Threading.Tasks;
using Consul;
using Hangfire;
using MalwareMultiScan.Api.Services;
2020-10-29 12:17:09 +02:00
using MalwareMultiScan.Api.Services.Interfaces;
using MalwareMultiScan.Shared.Enums;
using MalwareMultiScan.Shared.Message;
2020-10-29 12:17:09 +02:00
using Mongo2Go;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.GridFS;
using Moq;
using NUnit.Framework;
2020-10-29 16:09:56 +02:00
namespace MalwareMultiScan.Tests.Api
2020-10-29 12:17:09 +02:00
{
public class ScanResultServiceTest
{
private MongoDbRunner _mongoDbRunner;
2020-10-29 16:09:56 +02:00
private IScanResultService _resultService;
2020-10-29 12:17:09 +02:00
[SetUp]
public void SetUp()
{
2020-10-29 17:13:57 +02:00
_mongoDbRunner = MongoDbRunner.Start(additionalMongodArguments: "--quiet");
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
var connection = new MongoClient(_mongoDbRunner.ConnectionString);
var database = connection.GetDatabase("Test");
var gridFsBucket = new GridFSBucket(database);
2020-10-29 12:17:09 +02:00
_resultService = new ScanResultService(
database, gridFsBucket,
Mock.Of<IConsulClient>(),
Mock.Of<IBackgroundJobClient>());
2020-10-29 12:17:09 +02:00
}
[TearDown]
public void TearDown()
{
_mongoDbRunner.Dispose();
}
[Test]
public async Task TestFileStorageStoreObtain()
{
var originalData = new byte[] {0xDE, 0xAD, 0xBE, 0xEF};
string fileId;
await using (var dataStream = new MemoryStream(originalData))
2020-10-29 16:09:56 +02:00
{
2020-10-29 12:17:09 +02:00
fileId = await _resultService.StoreFile("test.txt", dataStream);
2020-10-29 16:09:56 +02:00
}
2020-10-29 12:17:09 +02:00
Assert.NotNull(fileId);
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
Assert.IsNull(await _resultService.ObtainFile("wrong-id"));
Assert.IsNull(await _resultService.ObtainFile(ObjectId.GenerateNewId().ToString()));
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
await using var fileSteam = await _resultService.ObtainFile(fileId);
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
var readData = new[]
{
2020-10-29 16:09:56 +02:00
(byte) fileSteam.ReadByte(),
(byte) fileSteam.ReadByte(),
(byte) fileSteam.ReadByte(),
(byte) fileSteam.ReadByte()
2020-10-29 12:17:09 +02:00
};
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
Assert.That(readData, Is.EquivalentTo(originalData));
}
[Test]
public async Task TestScanResultCreateGet()
{
var result = await _resultService.CreateScanResult(null);
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
Assert.NotNull(result.Id);
await _resultService.UpdateScanResultForBackend(
result.Id, "dummy", new ScanResultMessage
{
Duration = 100,
Status = ScanResultStatus.Succeeded,
Threats = new []{"Test"}
});
2020-10-29 12:17:09 +02:00
result = await _resultService.GetScanResult(result.Id);
Assert.NotNull(result.Id);
Assert.That(result.Results, Contains.Key("dummy"));
var dummyResult = result.Results["dummy"];
2020-10-29 16:09:56 +02:00
Assert.IsTrue(dummyResult.Status == ScanResultStatus.Succeeded);
2020-10-29 12:17:09 +02:00
Assert.AreEqual(dummyResult.Duration, 100);
Assert.IsNotEmpty(dummyResult.Threats);
Assert.That(dummyResult.Threats, Is.EquivalentTo(new[] {"Test"}));
}
}
}