EventLog GetEntry Exception (dotnet/corefx#25048)
authorAnirudh Agnihotry <anirudhagnihotry098@gmail.com>
Sat, 4 Nov 2017 03:17:44 +0000 (20:17 -0700)
committerDan Moseley <danmose@microsoft.com>
Sat, 4 Nov 2017 03:17:44 +0000 (20:17 -0700)
* Latency between write entry and getting entries

* commenting

* increased retries for slower system

* win32 exception at getting count in win7

* redistribution of functions

* item not added to list but count incremented

* On all Platform changes

* flag removed and failure after 20 tries

* Set event Flag event handler

* Argument exception moved to helpers

Commit migrated from https://github.com/dotnet/corefx/commit/b82d38be3ca7462f81ed76449ecc8b0eea4f8772

src/libraries/System.Diagnostics.EventLog/tests/EventLogEntryCollectionTests.cs
src/libraries/System.Diagnostics.EventLog/tests/EventLogTests/EventLogEntryWrittenTest.cs
src/libraries/System.Diagnostics.EventLog/tests/EventLogTests/EventLogTests.cs
src/libraries/System.Diagnostics.EventLog/tests/EventLogTests/EventLogWriteEntryTests.cs
src/libraries/System.Diagnostics.EventLog/tests/Helpers.cs

index 54feaee..a2117fd 100644 (file)
@@ -57,6 +57,7 @@ namespace System.Diagnostics.Tests
                 {
                     eventLog.Source = source;
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message));
+                    Helpers.WaitForEventLog(eventLog, 1);
                     EventLogEntry entry = Helpers.RetryOnWin7(() => eventLog.Entries[eventLog.Entries.Count - 1]);
                     Assert.False(entry.Equals(null));
                 }
@@ -81,10 +82,12 @@ namespace System.Diagnostics.Tests
                 {
                     eventLog.Source = source;
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message));
+                    Helpers.WaitForEventLog(eventLog, 1);  //There is latency between writing and getting the entry
                     EventLogEntry entry = Helpers.RetryOnWin7(() => eventLog.Entries[eventLog.Entries.Count - 1]);
                     Assert.True(entry.Equals(entry));
 
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message));
+                    Helpers.WaitForEventLog(eventLog, 2);
                     EventLogEntry secondEntry = Helpers.RetryOnWin7(() => eventLog.Entries[eventLog.Entries.Count - 1]);
                     Assert.Equal(entry.Index + 1, secondEntry.Index);
                 }
@@ -110,6 +113,7 @@ namespace System.Diagnostics.Tests
                     eventLog.Source = source;
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message));
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message));
+                    Helpers.WaitForEventLog(eventLog, 2);
                     EventLogEntry entry = Helpers.RetryOnWin7(() => eventLog.Entries[eventLog.Entries.Count - 1]);
                     EventLogEntry secondEntry = Helpers.RetryOnWin7(() => eventLog.Entries[eventLog.Entries.Count - 2]);
                     Assert.False(entry.Equals(secondEntry));
index 5b0572a..9c72a94 100644 (file)
@@ -30,7 +30,7 @@ namespace System.Diagnostics.Tests
                         eventCounter += 1;
                         signal.Set();
                     });
-                    eventLog.EnableRaisingEvents = waitOnEvent;
+                    Helpers.RetryOnWin7(() => eventLog.EnableRaisingEvents = waitOnEvent);
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry(message, EventLogEntryType.Information));
                     if (waitOnEvent)
                     {
index 9d82c27..6bf0ff5 100644 (file)
@@ -34,9 +34,10 @@ namespace System.Diagnostics.Tests
                 {
                     eventLog.Source = source;
                     eventLog.Clear();
-                    Assert.Equal(0, eventLog.Entries.Count);
+                    Assert.Equal(0, Helpers.RetryOnWin7((() => eventLog.Entries.Count)));
                     Helpers.RetryOnWin7(() => eventLog.WriteEntry("Writing to event log."));
-                    Assert.Equal(1, eventLog.Entries.Count);
+                    Helpers.WaitForEventLog(eventLog, 1);
+                    Assert.Equal(1, Helpers.RetryOnWin7((() => eventLog.Entries.Count)));
                 }
             }
             finally
@@ -51,7 +52,7 @@ namespace System.Diagnostics.Tests
         {
             using (EventLog eventLog = new EventLog("Application"))
             {
-                Assert.InRange(eventLog.Entries.Count, 1, Int32.MaxValue);
+                Assert.InRange(Helpers.RetryOnWin7((() => eventLog.Entries.Count)), 1, Int32.MaxValue);
             }
         }
 
index 8bf90b7..87da042 100644 (file)
@@ -359,7 +359,7 @@ namespace System.Diagnostics.Tests
         public void WriteEventInstanceNull()
         {
             string source = "Source_" + nameof(WriteEventInstanceNull);
-            Assert.Throws<ArgumentNullException>(() => EventLog.WriteEvent(source, null, insertStrings));
+            Assert.Throws<ArgumentNullException>(() => Helpers.RetryOnWin7(() => EventLog.WriteEvent(source, null, insertStrings)));
         }
 
         [ConditionalTheory(typeof(Helpers), nameof(Helpers.IsElevatedAndSupportsEventLogs))]
@@ -368,7 +368,7 @@ namespace System.Diagnostics.Tests
             string source = "Source_" + nameof(WriteEventMessageValues_OutOfRange);
             string[] message = new string[1];
             message[0] = new string('c', 32767);
-            Assert.Throws<ArgumentException>(() => EventLog.WriteEvent(source, eventInstance, message));
+            Assert.Throws<ArgumentException>(() => Helpers.RetryOnWin7(() => EventLog.WriteEvent(source, eventInstance, message)));
         }
 
         [ConditionalFact(typeof(Helpers), nameof(Helpers.IsElevatedAndSupportsEventLogs))]
@@ -377,7 +377,7 @@ namespace System.Diagnostics.Tests
             string source = "Source_" + nameof(WriteWithoutExistingSource);
             try
             {
-                EventLog.WriteEvent(source, eventInstance, rawData, null);
+                Helpers.RetryOnWin7(() => EventLog.WriteEvent(source, eventInstance, rawData, null));
                 Assert.Equal("Application", EventLog.LogNameFromSourceName(source, "."));
             }
             finally
@@ -401,5 +401,4 @@ namespace System.Diagnostics.Tests
             return Helpers.RetryOnWin7(() => elec.Count > 0 ? elec[elec.Count - 1] : null);
         }
     }
-
 }
index 0057218..2e7fe14 100644 (file)
@@ -20,15 +20,20 @@ namespace System.Diagnostics.Tests
 
         public static T RetryOnWin7<T>(Func<T> func)
         {
-            T entry = default(T);
             if (!PlatformDetection.IsWindows7)
             {
                 return func();
             }
 
-            // We are retrying on windows 7 because it throws win32exception while some operations like Writing,Retrieveing and Deleting log.
+            return RetryOnAllPlatforms(func);
+            // We are retrying on windows 7 because it throws win32exception while some operations like Writing,retrieving and Deleting log.
             // So We just try to do the operation again in case of this exception 
-            int retries = 10;
+        }
+
+        public static T RetryOnAllPlatforms<T>(Func<T> func)
+        {
+            T entry = default(T);
+            int retries = 20;
             while (retries > 0)
             {
                 try
@@ -41,10 +46,27 @@ namespace System.Diagnostics.Tests
                     Thread.Sleep(100);
                     retries--;
                 }
+                catch (ArgumentException)
+                {
+                    Thread.Sleep(100);
+                    retries--;
+                }
             }
 
             Assert.NotEqual(0, retries);
             return entry;
         }
+
+        public static void WaitForEventLog(EventLog eventLog, int entriesExpected)
+        {
+            int tries = 0;
+            while (RetryOnAllPlatforms((() => eventLog.Entries.Count)) < entriesExpected && tries < 20)
+            {
+                Thread.Sleep(100);
+                tries++;
+            }
+
+            Assert.Equal(entriesExpected, RetryOnWin7((() => eventLog.Entries.Count)));
+        }
     }
 }