MalwareMultiScan/MalwareMultiScan.Tests/Api/ScanResultServiceTests.cs

121 lines
3.8 KiB
C#
Raw Normal View History

2020-10-29 12:17:09 +02:00
using System.IO;
using System.Threading.Tasks;
using MalwareMultiScan.Api.Data.Configuration;
using MalwareMultiScan.Api.Data.Models;
using MalwareMultiScan.Api.Services.Implementations;
using MalwareMultiScan.Api.Services.Interfaces;
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
private Mock<IScanBackendService> _scanBackendService;
[SetUp]
public void SetUp()
{
_mongoDbRunner = MongoDbRunner.Start();
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);
_scanBackendService = new Mock<IScanBackendService>();
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
_scanBackendService
.SetupGet(x => x.List)
.Returns(() => new[]
{
new ScanBackend {Id = "dummy", Enabled = true},
new ScanBackend {Id = "clamav", Enabled = true},
2020-10-29 16:09:56 +02:00
new ScanBackend {Id = "disabled", Enabled = false}
2020-10-29 12:17:09 +02:00
});
_resultService = new ScanResultService(
database, gridFsBucket, _scanBackendService.Object);
}
[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();
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
Assert.NotNull(result.Id);
Assert.That(result.Results, Contains.Key("dummy"));
await _resultService.UpdateScanResultForBackend(
result.Id, "dummy", 100, true, true, new[] {"Test"});
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
2020-10-29 12:17:09 +02:00
Assert.IsTrue(dummyResult.Completed);
Assert.IsTrue(dummyResult.Succeeded);
Assert.AreEqual(dummyResult.Duration, 100);
Assert.IsNotEmpty(dummyResult.Threats);
Assert.That(dummyResult.Threats, Is.EquivalentTo(new[] {"Test"}));
}
[Test]
public async Task TestQueueUrlScan()
{
var result = await _resultService.CreateScanResult();
await _resultService.QueueUrlScan(
result, "http://url.com");
2020-10-29 16:09:56 +02:00
2020-10-29 12:17:09 +02:00
_scanBackendService.Verify(x => x.QueueUrlScan(
2020-10-29 16:09:56 +02:00
It.IsAny<ScanResult>(),
2020-10-29 12:17:09 +02:00
It.IsAny<ScanBackend>(),
"http://url.com"), Times.Exactly(2));
}
}
}