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