Example #1
0
        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);
        }
Example #2
0
        /// <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());
            }
        }
Example #3
0
        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));
        }