PageRenderTime 25ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/Blocks/Logging/Tests/Logging/TraceListeners/FlatFileTraceListenerFixture.cs

#
C# | 228 lines | 187 code | 28 blank | 13 comment | 1 complexity | 51e115f35197c1b410b9f76ec04cf4e6 MD5 | raw file
  1. //===============================================================================
  2. // Microsoft patterns & practices Enterprise Library
  3. // Logging Application Block
  4. //===============================================================================
  5. // Copyright Š Microsoft Corporation. All rights reserved.
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
  7. // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
  8. // LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  9. // FITNESS FOR A PARTICULAR PURPOSE.
  10. //===============================================================================
  11. using System;
  12. using System.Diagnostics;
  13. using System.IO;
  14. using System.Security;
  15. using System.Security.Permissions;
  16. using Microsoft.Practices.EnterpriseLibrary.Logging.Formatters;
  17. using Microsoft.VisualStudio.TestTools.UnitTesting;
  18. namespace Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.Tests
  19. {
  20. [TestClass]
  21. public partial class FlatFileTraceListenerFixture
  22. {
  23. [TestInitialize]
  24. public void Initialize()
  25. {
  26. AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory);
  27. }
  28. [TestMethod]
  29. public void ListenerWillUseFormatterIfExists()
  30. {
  31. File.Delete("trace.log");
  32. FlatFileTraceListener listener = new FlatFileTraceListener("trace.log", new TextFormatter("DUMMY{newline}DUMMY"));
  33. // need to go through the source to get a TraceEventCache
  34. LogSource source = new LogSource("notfromconfig", SourceLevels.All);
  35. source.Listeners.Add(listener);
  36. source.TraceData(TraceEventType.Error, 0, new LogEntry("message", "cat1", 0, 0, TraceEventType.Error, "title", null));
  37. listener.Dispose();
  38. string strFileContents = GetFileContents("trace.log");
  39. Assert.AreEqual("DUMMY" + Environment.NewLine + "DUMMY" + Environment.NewLine, strFileContents);
  40. }
  41. [TestMethod]
  42. public void ListenerWithHeaderAndFooterWillUseFormatterIfExists()
  43. {
  44. File.Delete("tracewithheaderandfooter.log");
  45. FlatFileTraceListener listener = new FlatFileTraceListener("tracewithheaderandfooter.log", "--------header------", "=======footer===========", new TextFormatter("DUMMY{newline}DUMMY"));
  46. // need to go through the source to get a TraceEventCache
  47. LogSource source = new LogSource("notfromconfig", SourceLevels.All);
  48. source.Listeners.Add(listener);
  49. source.TraceData(TraceEventType.Error, 0, new LogEntry("message", "cat1", 0, 0, TraceEventType.Error, "title", null));
  50. listener.Dispose();
  51. string strFileContents = GetFileContents("tracewithheaderandfooter.log");
  52. Assert.AreEqual("--------header------" + Environment.NewLine + "DUMMY" + Environment.NewLine + "DUMMY" + Environment.NewLine + "=======footer===========" + Environment.NewLine, strFileContents);
  53. }
  54. [TestMethod]
  55. public void ListenerWillFallbackToTraceEntryToStringIfFormatterDoesNotExists()
  56. {
  57. LogEntry testLogEntry = new LogEntry("message", "cat1", 0, 0, TraceEventType.Error, "title", null);
  58. StreamWriter writer = new StreamWriter("trace.log");
  59. FlatFileTraceListener listener = new FlatFileTraceListener(writer);
  60. // need to go through the source to get a TraceEventCache
  61. LogSource source = new LogSource("notfromconfig", SourceLevels.All);
  62. source.Listeners.Add(listener);
  63. source.TraceData(TraceEventType.Error, 0, testLogEntry);
  64. listener.Dispose();
  65. string strFileContents = GetFileContents("trace.log");
  66. string testLogEntryAsString = testLogEntry.ToString();
  67. Assert.IsTrue(-1 != strFileContents.IndexOf(testLogEntryAsString));
  68. }
  69. [TestMethod]
  70. public void FlatFileListenerReplacedEnviromentVariables()
  71. {
  72. string fileName = @"%USERPROFILE%\foo.log";
  73. string fileNameFromListener = string.Empty;
  74. FlatFileTraceListener listener = new FlatFileTraceListener(fileName);
  75. listener.TraceData(new TraceEventCache(), "source", TraceEventType.Error, 1, "This is a test");
  76. listener.Dispose();
  77. string expandedFileName = EnvironmentHelper.ReplaceEnvironmentVariables(fileName);
  78. bool result = File.Exists(expandedFileName);
  79. Assert.IsTrue(result);
  80. using (FileStream stream = File.Open(expandedFileName, FileMode.Open))
  81. {
  82. fileNameFromListener = stream.Name;
  83. }
  84. File.Delete(expandedFileName);
  85. Assert.AreEqual(expandedFileName, fileNameFromListener);
  86. }
  87. [TestMethod]
  88. public void DontWriteHeaderOrFooterWhenEventsAreFiltered()
  89. {
  90. const string header = "MockHeader";
  91. const string footer = "MockFooter";
  92. const string fileName = "rolling.log";
  93. string filePath = AppDomain.CurrentDomain.BaseDirectory + "\\" + fileName;
  94. try
  95. {
  96. LogEntry log = new LogEntry("Header nor footer written", "Category", 1, 1, TraceEventType.Error, "FilteredEventsDontWriteHeaderNorFooter", null);
  97. RollingFlatFileTraceListener listener = new RollingFlatFileTraceListener(filePath, header, footer, null, 100, "mmddyyyy", RollFileExistsBehavior.Overwrite, RollInterval.Day);
  98. listener.Filter = new EventTypeFilter(SourceLevels.Off);
  99. listener.TraceData(null, "Error", TraceEventType.Error, 1, log);
  100. listener.Flush();
  101. listener.Close();
  102. Assert.IsTrue(File.Exists(filePath));
  103. StreamReader reader = new StreamReader(filePath);
  104. string content = reader.ReadToEnd();
  105. reader.Close();
  106. Assert.IsFalse(content.Contains(header));
  107. Assert.IsFalse(content.Contains(footer));
  108. }
  109. finally
  110. {
  111. File.Delete(filePath);
  112. }
  113. }
  114. [TestMethod]
  115. public void FlatFileListenerReplacedInexistingEnviromentVariables()
  116. {
  117. string fileName = @"%FOO%\%MY_VARIABLE%\foo.log";
  118. FlatFileTraceListener listener = new FlatFileTraceListener(fileName);
  119. listener.TraceData(new TraceEventCache(), "source", TraceEventType.Error, 1, "This is a test");
  120. listener.Dispose();
  121. string fileNameFromListener = string.Empty;
  122. string expandedFileName = EnvironmentHelper.ReplaceEnvironmentVariables(fileName);
  123. string expectedFileName = Path.GetFileName(expandedFileName);
  124. bool result = File.Exists(expandedFileName);
  125. Assert.IsTrue(result);
  126. File.Delete(expandedFileName);
  127. Assert.AreEqual(expectedFileName, expandedFileName);
  128. }
  129. [TestMethod]
  130. public void FlatFileTraceListenerMultipleWrites()
  131. {
  132. File.Delete("tracewithheaderandfootermultiplewrites.log");
  133. string header = "--------header------";
  134. int numberOfWrites = 4;
  135. FlatFileTraceListener listener = new FlatFileTraceListener("tracewithheaderandfootermultiplewrites.log", header, "=======footer===========", new TextFormatter("DUMMY{newline}DUMMY"));
  136. // need to go through the source to get a TraceEventCache
  137. LogSource source = new LogSource("notfromconfig", SourceLevels.All);
  138. source.Listeners.Add(listener);
  139. for (int writeLoop = 0; writeLoop < numberOfWrites; writeLoop++)
  140. source.TraceData(TraceEventType.Error, 0, new LogEntry("message", "cat1", 0, 0, TraceEventType.Error, "title", null));
  141. listener.Dispose();
  142. StreamReader reader = new StreamReader("tracewithheaderandfootermultiplewrites.log");
  143. int headersFound = NumberOfItems("tracewithheaderandfootermultiplewrites.log", header);
  144. Assert.AreEqual(numberOfWrites, headersFound);
  145. }
  146. string GetFileContents(string fileName)
  147. {
  148. string strFileContents = String.Empty;
  149. using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
  150. {
  151. using (StreamReader reader = new StreamReader(fileStream))
  152. {
  153. strFileContents = reader.ReadToEnd();
  154. reader.Close();
  155. }
  156. }
  157. return strFileContents;
  158. }
  159. int NumberOfItems(string fileName,
  160. string item)
  161. {
  162. int itemsFound = 0;
  163. using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
  164. {
  165. using (StreamReader reader = new StreamReader(fileStream))
  166. {
  167. string strFileContents;
  168. while ((strFileContents = reader.ReadLine()) != null)
  169. {
  170. if (strFileContents.Equals(item))
  171. itemsFound++;
  172. }
  173. reader.Close();
  174. }
  175. }
  176. return itemsFound;
  177. }
  178. }
  179. }