1 // FileLogTraceListenerTest.cs - NUnit Test Cases for Microsoft.VisualBasic.Logging.FileLogTraceListener 2 // 3 // Rolf Bjarne Kvinge (RKvinge@novell.com) 4 // 5 // 6 // Copyright (C) 2007 Novell, Inc (http://www.novell.com) 7 // 8 // Permission is hereby granted, free of charge, to any person obtaining 9 // a copy of this software and associated documentation files (the 10 // "Software"), to deal in the Software without restriction, including 11 // without limitation the rights to use, copy, modify, merge, publish, 12 // distribute, sublicense, and/or sell copies of the Software, and to 13 // permit persons to whom the Software is furnished to do so, subject to 14 // the following conditions: 15 // 16 // The above copyright notice and this permission notice shall be 17 // included in all copies or substantial portions of the Software. 18 // 19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 23 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 24 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 25 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 // 27 #if !TARGET_JVM //TargetJvmNotSupported #8857 28 using System; 29 using System.Collections.Generic; 30 using System.Text; 31 using NUnit.Framework; 32 using Microsoft.VisualBasic.Logging; 33 using System.Globalization; 34 35 namespace MonoTests.Microsoft_VisualBasic.Logging 36 { 37 [TestFixture] 38 public class FileLogTraceListenerTest 39 { 40 [Test] SupportedAttributesTest()41 public void SupportedAttributesTest () 42 { 43 Derived derived = new Derived (); 44 Assert.AreEqual (Microsoft.VisualBasic.Strings.Join (derived.GetAttribs (), ";"), "append;Append;autoflush;AutoFlush;autoFlush;basefilename;BaseFilename;baseFilename;BaseFileName;baseFileName;customlocation;CustomLocation;customLocation;delimiter;Delimiter;diskspaceexhaustedbehavior;DiskSpaceExhaustedBehavior;diskSpaceExhaustedBehavior;encoding;Encoding;includehostname;IncludeHostName;includeHostName;location;Location;logfilecreationschedule;LogFileCreationSchedule;logFileCreationSchedule;maxfilesize;MaxFileSize;maxFileSize;reservediskspace;ReserveDiskSpace;reserveDiskSpace", "#01"); 45 } 46 47 [Test] DefaultPropertiesTest()48 public void DefaultPropertiesTest () 49 { 50 using (FileLogTraceListener log = new FileLogTraceListener ()) { 51 Assert.AreEqual (true, log.Append, "A1"); 52 Assert.AreEqual (false, log.AutoFlush, "A2"); 53 Assert.AreEqual (System.IO.Path.GetFileNameWithoutExtension(System.Windows.Forms.Application.ExecutablePath), log.BaseFileName, "B1"); 54 Assert.AreEqual (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.CustomLocation, "C1"); 55 Assert.AreEqual ("\t", log.Delimiter, "D1"); 56 Assert.AreEqual (DiskSpaceExhaustedOption.DiscardMessages, log.DiskSpaceExhaustedBehavior, "D2"); 57 Assert.AreEqual (System.Text.Encoding.UTF8.EncodingName, log.Encoding.EncodingName, "E1"); 58 Assert.AreEqual (System.IO.Path.Combine(Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + ".log", log.FullLogFileName, "F1"); 59 Assert.IsNull (log.Filter, "F2"); 60 Assert.AreEqual (false, log.IncludeHostName, "I1"); 61 Assert.AreEqual (LogFileLocation.LocalUserApplicationDirectory, log.Location, "L1"); 62 Assert.AreEqual (LogFileCreationScheduleOption.None, log.LogFileCreationSchedule, "L2"); 63 Assert.AreEqual (5000000, log.MaxFileSize, "M1"); 64 Assert.AreEqual ("FileLogTraceListener", log.Name, "N1"); 65 Assert.AreEqual (10000000, log.ReserveDiskSpace, "R1"); 66 } 67 } 68 69 [Test] FilenameTest()70 public void FilenameTest () 71 { 72 using (FileLogTraceListener log = new FileLogTraceListener ()) { 73 log.LogFileCreationSchedule = LogFileCreationScheduleOption.None; 74 log.Location = LogFileLocation.CommonApplicationDirectory; 75 Assert.AreEqual (System.IO.Path.Combine(Microsoft.VisualBasic.FileIO.SpecialDirectories.AllUsersApplicationData, log.BaseFileName) + ".log", log.FullLogFileName, "#A1"); 76 77 log.Location = LogFileLocation.ExecutableDirectory; 78 Assert.AreEqual (System.IO.Path.Combine (System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), log.BaseFileName) + ".log", log.FullLogFileName, "#A2"); 79 80 log.Location = LogFileLocation.LocalUserApplicationDirectory; 81 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + ".log", log.FullLogFileName, "#A3"); 82 83 log.Location = LogFileLocation.TempDirectory; 84 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp, log.BaseFileName) + ".log", log.FullLogFileName, "#A4"); 85 86 log.Location = LogFileLocation.Custom; 87 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + ".log", log.FullLogFileName, "#A5"); 88 89 log.CustomLocation = Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments; 90 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments, log.BaseFileName) + ".log", log.FullLogFileName, "#A6"); 91 } 92 93 using (FileLogTraceListener log = new FileLogTraceListener ()) { 94 log.LogFileCreationSchedule = LogFileCreationScheduleOption.Daily; 95 log.Location = LogFileLocation.CommonApplicationDirectory; 96 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.AllUsersApplicationData, log.BaseFileName) + DateTime.Now.ToString("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B1"); 97 98 log.Location = LogFileLocation.ExecutableDirectory; 99 Assert.AreEqual (System.IO.Path.Combine (System.IO.Path.GetDirectoryName (System.Windows.Forms.Application.ExecutablePath), log.BaseFileName) + DateTime.Now.ToString ("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B2"); 100 101 log.Location = LogFileLocation.LocalUserApplicationDirectory; 102 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + DateTime.Now.ToString ("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B3"); 103 104 log.Location = LogFileLocation.TempDirectory; 105 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp, log.BaseFileName) + DateTime.Now.ToString ("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B4"); 106 107 log.Location = LogFileLocation.Custom; 108 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + DateTime.Now.ToString ("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B5"); 109 110 log.CustomLocation = Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments; 111 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments, log.BaseFileName) + DateTime.Now.ToString ("-yyyy-MM-dd") + ".log", log.FullLogFileName, "#B6"); 112 } 113 114 using (FileLogTraceListener log = new FileLogTraceListener ()) { 115 DateTime dt = DateTime.Today.AddDays (-(int)DateTime.Today.DayOfWeek); 116 string format = dt.ToString ("-yyyy-MM-dd"); 117 log.LogFileCreationSchedule = LogFileCreationScheduleOption.Weekly; 118 log.Location = LogFileLocation.CommonApplicationDirectory; 119 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.AllUsersApplicationData, log.BaseFileName) + format + ".log", log.FullLogFileName, "#C1"); 120 121 log.Location = LogFileLocation.ExecutableDirectory; 122 Assert.AreEqual (System.IO.Path.Combine (System.IO.Path.GetDirectoryName (System.Windows.Forms.Application.ExecutablePath), log.BaseFileName) + format + ".log", log.FullLogFileName, "#C2"); 123 124 log.Location = LogFileLocation.LocalUserApplicationDirectory; 125 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + format + ".log", log.FullLogFileName, "#C3"); 126 127 log.Location = LogFileLocation.TempDirectory; 128 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.Temp, log.BaseFileName) + format + ".log", log.FullLogFileName, "#C4"); 129 130 log.Location = LogFileLocation.Custom; 131 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.CurrentUserApplicationData, log.BaseFileName) + format + ".log", log.FullLogFileName, "#C5"); 132 133 log.CustomLocation = Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments; 134 Assert.AreEqual (System.IO.Path.Combine (Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments, log.BaseFileName) + format + ".log", log.FullLogFileName, "#C6"); 135 } 136 } 137 138 [Test] 139 [ExpectedException (typeof (InvalidOperationException))] DiskSpaceTest1()140 public void DiskSpaceTest1 () 141 { 142 using (FileLogTraceListener log = new FileLogTraceListener ()) { 143 log.Location = LogFileLocation.TempDirectory; 144 log.ReserveDiskSpace = new System.IO.DriveInfo (log.FullLogFileName [0].ToString ()).TotalFreeSpace; 145 log.DiskSpaceExhaustedBehavior = DiskSpaceExhaustedOption.ThrowException; 146 log.WriteLine ("TestLine"); 147 } 148 } 149 150 [Test] 151 [ExpectedException (typeof (ArgumentException))] DiskSpaceTest2()152 public void DiskSpaceTest2 () 153 { 154 using (FileLogTraceListener log = new FileLogTraceListener ()) { 155 log.MaxFileSize = 0; 156 } 157 } 158 159 [Test] 160 [ExpectedException (typeof (InvalidOperationException))] DiskSpaceTest3()161 public void DiskSpaceTest3 () 162 { 163 using (FileLogTraceListener log = new FileLogTraceListener ()) { 164 log.Location = LogFileLocation.TempDirectory; 165 log.MaxFileSize = 1000; 166 log.DiskSpaceExhaustedBehavior = DiskSpaceExhaustedOption.ThrowException; 167 log.Write (new string('z', 1001)); 168 } 169 } 170 171 [Test] WriteTest()172 public void WriteTest () 173 { 174 using (FileLogTraceListener log = new FileLogTraceListener ()) { 175 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 176 string filename = log.FullLogFileName; 177 string data; 178 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 179 180 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 181 log.Close (); 182 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 183 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 184 185 Assert.AreEqual ("nunit\tCritical\t0\t\r\n", data, "#01"); 186 } 187 188 189 using (FileLogTraceListener log = new FileLogTraceListener ()) { 190 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 191 string filename = log.FullLogFileName; 192 string data; 193 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 194 195 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, "data"); 196 log.Close (); 197 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 198 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 199 200 Assert.AreEqual ("nunit\tCritical\t0\tdata\r\n", data, "#02"); 201 } 202 203 using (FileLogTraceListener log = new FileLogTraceListener ()) { 204 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 205 string filename = log.FullLogFileName; 206 string data; 207 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 208 209 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, "data", "data2"); 210 log.Close (); 211 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 212 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 213 214 Assert.AreEqual ("nunit\tCritical\t0\tdata\tdata2\r\n", data, "#03"); 215 } 216 217 using (FileLogTraceListener log = new FileLogTraceListener ()) { 218 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 219 string filename = log.FullLogFileName; 220 string data; 221 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 222 223 log.TraceEvent (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, "msg"); 224 log.Close (); 225 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 226 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 227 228 Assert.AreEqual ("nunit\tCritical\t0\tmsg\r\n", data, "#04"); 229 } 230 231 232 using (FileLogTraceListener log = new FileLogTraceListener ()) { 233 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 234 string filename = log.FullLogFileName; 235 string data; 236 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 237 238 log.TraceEvent (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, "msg:{0}", "arg1"); 239 log.Close (); 240 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 241 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 242 243 Assert.AreEqual ("nunit\tCritical\t0\tmsg:arg1\r\n", data, "#05"); 244 } 245 246 using (FileLogTraceListener log = new FileLogTraceListener ()) { 247 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 248 string filename = log.FullLogFileName; 249 string data; 250 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 251 252 log.TraceOutputOptions = System.Diagnostics.TraceOptions.DateTime | System.Diagnostics.TraceOptions.LogicalOperationStack | System.Diagnostics.TraceOptions.ProcessId | System.Diagnostics.TraceOptions.ThreadId | System.Diagnostics.TraceOptions.Timestamp; 253 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 254 log.Close (); 255 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 256 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 257 258 Assert.AreEqual ("nunit\tCritical\t0\t\t\"\"\t" + cache.DateTime.ToString ("u", CultureInfo.InvariantCulture) + "\t" + cache.ProcessId + "\t" + cache.ThreadId + "\t" + cache.Timestamp + System.Environment.NewLine, data, "#06"); 259 } 260 261 262 using (FileLogTraceListener log = new FileLogTraceListener ()) { 263 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 264 log.IncludeHostName = true; 265 266 string filename = log.FullLogFileName; 267 string data; 268 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 269 270 log.TraceOutputOptions = System.Diagnostics.TraceOptions.DateTime | System.Diagnostics.TraceOptions.LogicalOperationStack | System.Diagnostics.TraceOptions.ProcessId | System.Diagnostics.TraceOptions.ThreadId | System.Diagnostics.TraceOptions.Timestamp; 271 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 272 log.Close (); 273 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 274 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 275 276 Assert.AreEqual ("nunit\tCritical\t0\t\t\"\"\t" + cache.DateTime.ToString ("u", CultureInfo.InvariantCulture) + "\t" + cache.ProcessId + "\t" + cache.ThreadId + "\t" + cache.Timestamp + "\t" + Environment.MachineName + System.Environment.NewLine, data, "#07"); 277 } 278 } 279 280 [Test] AppendTest()281 public void AppendTest () 282 { 283 284 using (FileLogTraceListener log = new FileLogTraceListener ()) { 285 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 286 log.Append = false; 287 string filename = log.FullLogFileName; 288 string data; 289 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 290 291 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 292 log.Close (); 293 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 294 295 Assert.AreEqual ("nunit\tCritical\t0\t\r\n", data, "#01"); 296 } 297 298 299 using (FileLogTraceListener log = new FileLogTraceListener ()) { 300 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 301 log.Append = true; 302 string filename = log.FullLogFileName; 303 string data; 304 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 305 306 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 307 log.Close (); 308 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 309 310 Assert.AreEqual ("nunit\tCritical\t0\t\r\n" + "nunit\tCritical\t0\t\r\n", data, "#02"); 311 } 312 313 using (FileLogTraceListener log = new FileLogTraceListener ()) { 314 log.Filter = new System.Diagnostics.EventTypeFilter (System.Diagnostics.SourceLevels.All); 315 log.Append = false; 316 string filename = log.FullLogFileName; 317 string data; 318 System.Diagnostics.TraceEventCache cache = new System.Diagnostics.TraceEventCache (); 319 320 log.TraceData (cache, "nunit", System.Diagnostics.TraceEventType.Critical, 0, null); 321 log.Close (); 322 data = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText (filename); 323 324 Assert.AreEqual ("nunit\tCritical\t0\t\r\n", data, "#03"); 325 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile (filename); 326 } 327 328 329 } 330 331 } 332 333 class Derived : FileLogTraceListener 334 { GetSupportedAttributes()335 protected override string [] GetSupportedAttributes () 336 { 337 return base.GetSupportedAttributes (); 338 } 339 GetAttribs()340 public string [] GetAttribs () 341 { 342 return GetSupportedAttributes (); 343 } 344 } 345 } 346 #endif