Ejemplo n.º 1
0
        public void LogFileCreatesAPhysicalCopyOfTheSourceFile()
        {
            using (TemporaryFile sourceFile = new TemporaryFile())
            {
                File.WriteAllText(sourceFile.FileName, "Source file content");

                string copiedFilePath   = null;
                bool   exists           = false;
                long   sourceFileLength = sourceFile.GetSize();

                using (FilesContainer filesContainer = new FilesContainer(new Logger()))
                {
                    LoggedFile file = filesContainer.LogFile(sourceFile.FileName, null);
                    copiedFilePath = file.FilePath;

                    exists = File.Exists(copiedFilePath);
                    Assert.IsTrue(exists);
                    Assert.AreEqual(sourceFileLength, file.FileSize);
                }

                exists = File.Exists(copiedFilePath);
                Assert.IsFalse(exists);

                exists = File.Exists(sourceFile.FileName);
                Assert.IsTrue(exists);
            }
        }
Ejemplo n.º 2
0
        public async Task AllowedContentTypeLogsTheResponseBodyAsAFile(string contentType)
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();
            KissLogConfiguration.Options.ShouldLogResponseBody((HttpProperties httpProperties) => true);

            ModuleInitializer.ReadInputStreamProvider = new EnableBufferingReadInputStreamProvider();

            LoggedFile file        = null;
            string     fileContent = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file        = arg.Files.FirstOrDefault();
                fileContent = file == null ? null : File.ReadAllText(file.FilePath);
            }));

            string responseBody = $"ResponseBody {Guid.NewGuid()}";

            var context    = Helpers.MockHttpContext(responseContentType: contentType);
            var middleware = Helpers.MockMiddleware(responseBody: responseBody);

            await middleware.Invoke(context.Object);

            Assert.IsNotNull(file);
            Assert.AreEqual(responseBody, fileContent);
        }
Ejemplo n.º 3
0
        public void AllowedContentTypeLogsTheResponseBodyAsAFile(string contentType)
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();
            KissLogConfiguration.Options.ShouldLogResponseBody((HttpProperties httpProperties) => true);

            LoggedFile file        = null;
            string     fileContent = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file        = arg.Files.FirstOrDefault();
                fileContent = file == null ? null : File.ReadAllText(file.FilePath);
            }));

            string responseBody = $"ResponseBody {Guid.NewGuid()}";

            var httpContext = Helpers.MockHttpContext(responseBody: responseBody);

            httpContext.Setup(p => p.Response.Headers).Returns(Helpers.GenerateNameValueCollection(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Content-Type", contentType)
            }));

            KissLogHttpModule module = new KissLogHttpModule();

            module.OnEndRequest(httpContext.Object);

            Assert.IsNotNull(file);
            Assert.AreEqual(responseBody, fileContent);
        }
Ejemplo n.º 4
0
        public void LogFileLogsErrorMessageWhenFileSizeIsTooLarge()
        {
            int maxFileSize = Convert.ToInt32(Constants.MaximumAllowedFileSizeInBytes);

            byte[] contents = Enumerable.Range(0, maxFileSize + 1).Select(p => byte.MaxValue).ToArray();
            var    ex       = new FileSizeTooLargeException(contents.Length, Constants.MaximumAllowedFileSizeInBytes);

            Logger logger = new Logger();

            using (TemporaryFile sourceFile = new TemporaryFile())
            {
                File.WriteAllBytes(sourceFile.FileName, contents);

                using (FilesContainer filesContainer = new FilesContainer(logger))
                {
                    LoggedFile file = filesContainer.LogFile(sourceFile.FileName, null);
                }
            }

            LogMessage message = logger.DataContainer.LogMessages.FirstOrDefault();

            Assert.IsNotNull(message);
            Assert.AreEqual(LogLevel.Error, message.LogLevel);
            Assert.IsTrue(message.Message.Contains(ex.Message));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Finish building the file. Don't use this builder after that!
        /// </summary>
        /// <returns></returns>
        public LoggedFile Close()
        {
            var ret = new LoggedFile(info.ID, log);

            info = new FileLog.LoggedFileInfo();
            log  = null;
            return(ret);
        }
Ejemplo n.º 6
0
        public void EmptyStringIsIgnored(string content)
        {
            using (FilesContainer filesContainer = new FilesContainer(new Logger()))
            {
                LoggedFile loggedFile = filesContainer.LogAsFile(content, "File.txt");

                Assert.IsNull(loggedFile);
            }
        }
Ejemplo n.º 7
0
        public void EmptyByteArrayIsIgnored()
        {
            using (FilesContainer filesContainer = new FilesContainer(new Logger()))
            {
                LoggedFile loggedFile = filesContainer.LogAsFile(new byte[] { }, "File.txt");

                Assert.IsNull(loggedFile);
            }
        }
Ejemplo n.º 8
0
        public void FileNameAlwaysHasValue(string fileName)
        {
            using (FilesContainer filesContainer = new FilesContainer(new Logger()))
            {
                LoggedFile loggedFile = filesContainer.LogAsFile("Content", fileName);

                Assert.IsNotNull(loggedFile.FileName);
            }
        }
Ejemplo n.º 9
0
        public LoggedFile LogFile(string sourceFilePath, string fileName = null)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                fileName = Path.GetFileName(sourceFilePath);
            }

            fileName = NormalizeFileName(fileName);

            FileInfo fi = new FileInfo(sourceFilePath);

            if (!fi.Exists)
            {
                _logger.Error(new LogFileException(sourceFilePath, new FileNotFoundException(null, sourceFilePath)));
                return(null);
            }

            if (fi.Length > Constants.MaximumAllowedFileSizeInBytes)
            {
                _logger.Error(new FileSizeTooLargeException(fi.Length, Constants.MaximumAllowedFileSizeInBytes));
                return(null);
            }

            TemporaryFile temporaryFile = null;

            try
            {
                temporaryFile = new TemporaryFile();
                File.Delete(temporaryFile.FileName);
                File.Copy(sourceFilePath, temporaryFile.FileName, true);
                long length = temporaryFile.GetSize();

                LoggedFile loggedFile = new LoggedFile(fileName, temporaryFile.FileName, length);

                _temporaryFiles.Add(temporaryFile);
                _loggedFiles.Add(loggedFile);

                return(loggedFile);
            }
            catch (Exception ex)
            {
                if (temporaryFile != null)
                {
                    temporaryFile.Dispose();
                }

                _logger.Error(new LogFileException(sourceFilePath, ex));

                return(null);
            }
        }
Ejemplo n.º 10
0
        public void LogByteArrayAsFileCreatesAPhysicalFile()
        {
            using (FilesContainer filesContainer = new FilesContainer(new Logger()))
            {
                byte[] contents = Encoding.UTF8.GetBytes("Byte[] file content");

                LoggedFile file = filesContainer.LogAsFile(contents, null);

                FileInfo fi = new FileInfo(file.FilePath);

                Assert.IsTrue(fi.Exists);
                Assert.IsNotNull(file.FileName);
                Assert.AreEqual(fi.Length, file.FileSize);
            }
        }
Ejemplo n.º 11
0
        public void LogStringAsFileCreatesAPhysicalFile()
        {
            using (FilesContainer filesContainer = new FilesContainer(new Logger()))
            {
                string contents = "String file content";

                LoggedFile file = filesContainer.LogAsFile(contents, null);

                FileInfo fi = new FileInfo(file.FilePath);

                Assert.IsTrue(fi.Exists);
                Assert.IsNotNull(file.FileName);
                Assert.AreEqual(fi.Length, file.FileSize);
            }
        }
Ejemplo n.º 12
0
        public void LogFileCopiesTheContentsOfTheSourceFile()
        {
            using (TemporaryFile sourceFile = new TemporaryFile())
            {
                string sourceContent = "Source file content";

                File.WriteAllText(sourceFile.FileName, sourceContent);

                using (FilesContainer filesContainer = new FilesContainer(new Logger()))
                {
                    LoggedFile file = filesContainer.LogFile(sourceFile.FileName, null);

                    string content = File.ReadAllText(file.FilePath);

                    Assert.AreEqual(sourceContent, content);
                }
            }
        }
Ejemplo n.º 13
0
        public async Task NotAllowedContentTypeDoesNotLogTheResponseBody(string contentType)
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();

            LoggedFile file = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file = arg.Files.FirstOrDefault();
            }));

            var context    = Helpers.MockHttpContext(responseContentType: contentType);
            var middleware = Helpers.MockMiddleware();

            await middleware.Invoke(context.Object);

            Assert.IsNull(file);
        }
Ejemplo n.º 14
0
        public void LogStringAsFileLogsErrorMessageWhenFileSizeIsTooLarge()
        {
            int    maxFileSize = Convert.ToInt32(Constants.MaximumAllowedFileSizeInBytes);
            string contents    = string.Join(string.Empty, Enumerable.Range(0, maxFileSize + 1).Select(p => "0"));
            var    ex          = new FileSizeTooLargeException(contents.Length, Constants.MaximumAllowedFileSizeInBytes);

            Logger logger = new Logger();

            using (FilesContainer filesContainer = new FilesContainer(logger))
            {
                LoggedFile file = filesContainer.LogAsFile(contents, null);
            }

            LogMessage message = logger.DataContainer.LogMessages.FirstOrDefault();

            Assert.IsNotNull(message);
            Assert.AreEqual(LogLevel.Error, message.LogLevel);
            Assert.IsTrue(message.Message.Contains(ex.Message));
        }
Ejemplo n.º 15
0
        public LoggedFile LogAsFile(byte[] contents, string fileName = null)
        {
            if (contents == null || !contents.Any())
            {
                return(null);
            }

            fileName = NormalizeFileName(fileName);
            long fileSize = contents.Length;

            if (fileSize > Constants.MaximumAllowedFileSizeInBytes)
            {
                _logger.Error(new FileSizeTooLargeException(fileSize, Constants.MaximumAllowedFileSizeInBytes));
                return(null);
            }

            TemporaryFile temporaryFile = null;

            try
            {
                temporaryFile = new TemporaryFile();
                File.WriteAllBytes(temporaryFile.FileName, contents);

                LoggedFile loggedFile = new LoggedFile(fileName, temporaryFile.FileName, fileSize);

                _temporaryFiles.Add(temporaryFile);
                _loggedFiles.Add(loggedFile);

                return(loggedFile);
            }
            catch (Exception ex)
            {
                if (temporaryFile != null)
                {
                    temporaryFile.Dispose();
                }

                _logger.Error(new LogByteArrayAsFileException(contents, ex));

                return(null);
            }
        }
Ejemplo n.º 16
0
        public async Task EvaluatesOptionsShouldLogResponseBody()
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();

            KissLogConfiguration.Options.ShouldLogResponseBody((HttpProperties args) => false);

            LoggedFile file = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file = arg.Files.FirstOrDefault();
            }));

            var context    = Helpers.MockHttpContext();
            var middleware = Helpers.MockMiddleware();

            await middleware.Invoke(context.Object);

            Assert.IsNull(file);
        }
Ejemplo n.º 17
0
        public void EvaluatesOptionsShouldLogResponseBody()
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();

            KissLogConfiguration.Options.ShouldLogResponseBody((HttpProperties args) => false);

            LoggedFile file = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file = arg.Files.FirstOrDefault();
            }));

            var httpContext = Helpers.MockHttpContext();

            KissLogHttpModule module = new KissLogHttpModule();

            module.OnEndRequest(httpContext.Object);

            Assert.IsNull(file);
        }
Ejemplo n.º 18
0
        public void NotAllowedContentTypeDoesNotLogTheResponseBody(string contentType)
        {
            KissLog.Tests.Common.CommonTestHelpers.ResetContext();

            LoggedFile file = null;

            KissLogConfiguration.Listeners.Add(new KissLog.Tests.Common.CustomLogListener(onFlush: (FlushLogArgs arg) =>
            {
                file = arg.Files.FirstOrDefault();
            }));

            var httpContext = Helpers.MockHttpContext();

            httpContext.Setup(p => p.Response.Headers).Returns(Helpers.GenerateNameValueCollection(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Content-Type", contentType)
            }));

            KissLogHttpModule module = new KissLogHttpModule();

            module.OnEndRequest(httpContext.Object);

            Assert.IsNull(file);
        }
Ejemplo n.º 19
0
        public void LogFileLogsErrorMessageWhenFileWasNotFound()
        {
            string fileName = null;

            using (TemporaryFile tempFile = new TemporaryFile())
            {
                fileName = tempFile.FileName;
            }

            var ex = new LogFileException(fileName, new FileNotFoundException(null, fileName));

            Logger logger = new Logger();

            using (FilesContainer filesContainer = new FilesContainer(logger))
            {
                LoggedFile file = filesContainer.LogFile(fileName);
            }

            LogMessage message = logger.DataContainer.LogMessages.FirstOrDefault();

            Assert.IsNotNull(message);
            Assert.AreEqual(LogLevel.Error, message.LogLevel);
            Assert.IsTrue(message.Message.Contains(ex.Message));
        }
Ejemplo n.º 20
0
 public void NegativeLengthThrowsException(long length)
 {
     LoggedFile item = new LoggedFile("File", @"D:\my\file.txt", length);
 }
Ejemplo n.º 21
0
 public void NullFilePathThrowsException(string filePath)
 {
     LoggedFile item = new LoggedFile("File", filePath, 0);
 }
Ejemplo n.º 22
0
 public void NullFileNameThrowsException(string fileName)
 {
     LoggedFile item = new LoggedFile(fileName, @"D:\my\file.txt", 0);
 }