* 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
{
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));
}
{
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);
}
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));
eventCounter += 1;
signal.Set();
});
- eventLog.EnableRaisingEvents = waitOnEvent;
+ Helpers.RetryOnWin7(() => eventLog.EnableRaisingEvents = waitOnEvent);
Helpers.RetryOnWin7(() => eventLog.WriteEntry(message, EventLogEntryType.Information));
if (waitOnEvent)
{
{
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
{
using (EventLog eventLog = new EventLog("Application"))
{
- Assert.InRange(eventLog.Entries.Count, 1, Int32.MaxValue);
+ Assert.InRange(Helpers.RetryOnWin7((() => eventLog.Entries.Count)), 1, Int32.MaxValue);
}
}
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))]
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))]
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
return Helpers.RetryOnWin7(() => elec.Count > 0 ? elec[elec.Count - 1] : null);
}
}
-
}
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
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)));
+ }
}
}