Skip to content

Commit ec00a97

Browse files
committed
CSHARP-3515: Sporadic tests failures: TestGuidRefId
1 parent f389eb5 commit ec00a97

File tree

3 files changed

+49
-23
lines changed

3 files changed

+49
-23
lines changed

tests/MongoDB.Bson.TestHelpers/GuidMode.cs

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515

1616
using System.Collections.Generic;
17-
using System.Linq;
17+
using MongoDB.Bson.IO;
1818
using Xunit.Abstractions;
1919

2020
namespace MongoDB.Bson.TestHelpers
@@ -36,24 +36,6 @@ public class GuidMode : IXunitSerializable
3636
// public static properties
3737
public static IReadOnlyList<GuidMode> All => __all;
3838

39-
public static GuidMode Current
40-
{
41-
get
42-
{
43-
#pragma warning disable 618
44-
var currentMode = BsonDefaults.GuidRepresentationMode;
45-
if (currentMode == GuidRepresentationMode.V2)
46-
{
47-
return new GuidMode(currentMode, BsonDefaults.GuidRepresentation);
48-
}
49-
else
50-
{
51-
return new GuidMode(currentMode);
52-
}
53-
#pragma warning restore 618
54-
}
55-
}
56-
5739
// public static methods
5840
public static void Set(GuidRepresentationMode guidRepresentationMode, GuidRepresentation guidRepresentation = GuidRepresentation.Unspecified)
5941
{
@@ -62,9 +44,17 @@ public static void Set(GuidRepresentationMode guidRepresentationMode, GuidRepres
6244
}
6345
#endregion
6446

47+
// private fields
48+
private BsonBinaryReaderSettings _defaultBsonBinaryReaderSettings;
49+
private BsonBinaryWriterSettings _defaultBsonBinaryWriterSettings;
50+
private BsonDocumentReaderSettings _defaultBsonDocumentReaderSettings;
51+
private BsonDocumentWriterSettings _defaultBsonDocumentWriterSettings;
52+
private JsonReaderSettings _defaultJsonReaderSettings;
53+
private JsonWriterSettings _defaultJsonWriterSettings;
6554
private GuidRepresentationMode _guidRepresentationMode;
6655
private GuidRepresentation _guidRepresentation;
6756

57+
// constructors
6858
public GuidMode()
6959
{
7060
_guidRepresentationMode = GuidRepresentationMode.V2;
@@ -77,10 +67,34 @@ public GuidMode(GuidRepresentationMode guidRepresentationMode, GuidRepresentatio
7767
_guidRepresentation = guidRepresentation;
7868
}
7969

70+
// public properties
8071
public GuidRepresentationMode GuidRepresentationMode => _guidRepresentationMode;
8172

8273
public GuidRepresentation GuidRepresentation => _guidRepresentation;
8374

75+
// public methods
76+
public static GuidMode CaptureCurrentSettings()
77+
{
78+
#pragma warning disable 618
79+
GuidMode settings;
80+
if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
81+
{
82+
settings = new GuidMode(BsonDefaults.GuidRepresentationMode, BsonDefaults.GuidRepresentation);
83+
}
84+
else
85+
{
86+
settings = new GuidMode(BsonDefaults.GuidRepresentationMode);
87+
}
88+
settings._defaultBsonBinaryReaderSettings = BsonBinaryReaderSettings.Defaults;
89+
settings._defaultBsonBinaryWriterSettings = BsonBinaryWriterSettings.Defaults;
90+
settings._defaultBsonDocumentReaderSettings = BsonDocumentReaderSettings.Defaults;
91+
settings._defaultBsonDocumentWriterSettings = BsonDocumentWriterSettings.Defaults;
92+
settings._defaultJsonReaderSettings = JsonReaderSettings.Defaults;
93+
settings._defaultJsonWriterSettings = JsonWriterSettings.Defaults;
94+
return settings;
95+
#pragma warning restore 618
96+
}
97+
8498
public void Deserialize(IXunitSerializationInfo info)
8599
{
86100
_guidRepresentationMode = info.GetValue<GuidRepresentationMode>(nameof(_guidRepresentationMode));
@@ -107,6 +121,12 @@ public void Set()
107121
{
108122
BsonDefaults.GuidRepresentation = _guidRepresentation;
109123
}
124+
BsonBinaryReaderSettings.Defaults = _defaultBsonBinaryReaderSettings;
125+
BsonBinaryWriterSettings.Defaults = _defaultBsonBinaryWriterSettings;
126+
BsonDocumentReaderSettings.Defaults = _defaultBsonDocumentReaderSettings;
127+
BsonDocumentWriterSettings.Defaults = _defaultBsonDocumentWriterSettings;
128+
JsonReaderSettings.Defaults = _defaultJsonReaderSettings;
129+
JsonWriterSettings.Defaults = _defaultJsonWriterSettings;
110130
#pragma warning restore 618
111131
}
112132

tests/MongoDB.Bson.TestHelpers/ResetGuidModeAfterTestAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class ResetGuidModeAfterTestAttribute : BeforeAfterTestAttribute
2424

2525
public override void Before(MethodInfo methodUnderTest)
2626
{
27-
_originalSettings = GuidMode.Current;
27+
_originalSettings = GuidMode.CaptureCurrentSettings();
2828
base.Before(methodUnderTest);
2929
}
3030

tests/MongoDB.Driver.Tests/MongoDBRefTests.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
using FluentAssertions;
1919
using MongoDB.Bson;
2020
using MongoDB.Bson.Serialization;
21-
using MongoDB.Driver;
21+
using MongoDB.Bson.TestHelpers;
22+
using MongoDB.Bson.TestHelpers.XunitExtensions;
2223
using Xunit;
2324

2425
namespace MongoDB.Driver.Tests
@@ -158,9 +159,14 @@ public void TestEqualsWithoutDatabase()
158159
Assert.Equal(a1.GetHashCode(), a2.GetHashCode());
159160
}
160161

161-
[Fact]
162-
public void TestGuidRefId()
162+
[Theory]
163+
[ParameterAttributeData]
164+
[ResetGuidModeAfterTest]
165+
public void TestGuidRefId(
166+
[ClassValues(typeof(GuidModeValues))] GuidMode mode)
163167
{
168+
mode.Set();
169+
164170
#pragma warning disable 618
165171
var guid = Guid.NewGuid();
166172
if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2 && BsonDefaults.GuidRepresentation == GuidRepresentation.Unspecified ||

0 commit comments

Comments
 (0)