public void ToScanResult_ScanError_ReturnsExpectedResult(string value) { // Arrange var rawResult = new RawScanResult(value); // Act var result = rawResult.ToScanResult(); // Assert Assert.Equal(ScanStatus.Error, result.Status); Assert.Empty(result.InfectedFiles); }
/// <summary> /// Scans the byte array for potential malicious content. /// </summary> /// <param name="data"></param> /// <returns></returns> public async Task <ScanResult> ScanBytes(byte[] data) { using (var sourceStream = new MemoryStream(data)) { var result = await this.CommandExecutor.Execute(ScanClientCommand.InStream, (stream) => this.SendStreamFileChunks(sourceStream, stream)); var rawResult = new RawScanResult(result); return(rawResult.ToScanResult()); } }
public void ToScanResult_VirusFound_ReturnsExpectedResult(string value) { // Arrange var rawResult = new RawScanResult(value); // Act var result = rawResult.ToScanResult(); // Assert Assert.Equal(ScanStatus.VirusDetected, result.Status); Assert.Single(result.InfectedFiles); var infected = result.InfectedFiles.First(); Assert.Equal(value, result.RawResult); Assert.Equal("stream", infected.FileName); Assert.Equal("Some-Virus-Name", infected.VirusName); }
public static ScanResult ToScanResult(this RawScanResult rawScanResult) { if (rawScanResult == null) { throw new RawScanResultNullException(); } var rawResult = rawScanResult.Value; var infectedFiles = new List <InfectedFile>(); var status = ScanStatus.Unknown; if (rawResult.EndsWith("OK", StringComparison.InvariantCultureIgnoreCase)) { status = ScanStatus.Clean; } else if (rawResult.EndsWith("ERROR", StringComparison.InvariantCultureIgnoreCase)) { status = ScanStatus.Error; } else if (rawResult.EndsWith("FOUND", StringComparison.InvariantCultureIgnoreCase)) { status = ScanStatus.VirusDetected; var files = rawResult.Split(new[] { "FOUND" }, StringSplitOptions.RemoveEmptyEntries); foreach (var file in files) { var split = file.Trim().Split(' '); var fileName = $"{split[0]?.Replace(":", "")}"; var virusName = split[1]; infectedFiles.Add(new InfectedFile(fileName, virusName)); } } return(new ScanResult(status, new ReadOnlyCollection <InfectedFile>(infectedFiles), rawResult)); }