From 511644d7eb22c34d033985908cf22f12f8f5fbbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= <12201973+fredericdelaporte@users.noreply.github.com> Date: Sun, 20 Oct 2019 18:44:37 +0200 Subject: [PATCH] Fix a flaky test --- .../Async/NHSpecificTest/GH1594/Fixture.cs | 5 +++++ .../NHSpecificTest/GH1594/ExecutionContextExtensions.cs | 8 +++++--- src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs | 5 +++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs index ca584ea9c43..520df4f6c12 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs @@ -62,8 +62,13 @@ public async Task ExecutionContextLocalValuesLeakAsync() { await (RunInTransactionAsync(session)); var localValuesCountAfterFirstCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterFirstCall.HasValue) + Assert.Ignore("Unable to get async local values count"); await (RunInTransactionAsync(session)); var localValuesCountAfterSecondCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterSecondCall.HasValue) + Assert.Ignore("Unable to get async local values count"); + Assert.AreEqual(localValuesCountAfterFirstCall, localValuesCountAfterSecondCall); } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs b/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs index efc3f52831e..70d82885768 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs @@ -5,7 +5,7 @@ namespace NHibernate.Test.NHSpecificTest.GH1594 { public static class ExecutionContextExtensions { - public static int LocalValuesCount(this ExecutionContext c) + public static int? LocalValuesCount(this ExecutionContext c) { #if NETFX const string localValuesFieldName = "_localValues"; @@ -13,8 +13,10 @@ public static int LocalValuesCount(this ExecutionContext c) const string localValuesFieldName = "m_localValues"; #endif var f = typeof(ExecutionContext).GetField(localValuesFieldName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - var d = (IDictionary) f.GetValue(c); - return d?.Count ?? 0; + // The property value may not implement IDictionary, especially when there is less than 4 values, but not only. + // So we may not be able to know anything about this count. + var d = f.GetValue(c) as IDictionary; + return d?.Count; } } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs index 0f0118cb56a..7c342aa2dbf 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs @@ -50,8 +50,13 @@ public void ExecutionContextLocalValuesLeak() { RunInTransaction(session); var localValuesCountAfterFirstCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterFirstCall.HasValue) + Assert.Ignore("Unable to get async local values count"); RunInTransaction(session); var localValuesCountAfterSecondCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterSecondCall.HasValue) + Assert.Ignore("Unable to get async local values count"); + Assert.AreEqual(localValuesCountAfterFirstCall, localValuesCountAfterSecondCall); } }