Skip to content

Commit 1552f71

Browse files
committed
CSHARP-2260: MongoNodeIsRecoveringException message should include actual error code and codeName.
1 parent 28956e5 commit 1552f71

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

src/MongoDB.Driver.Core/MongoNodeIsRecoveringException.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ namespace MongoDB.Driver
3232
#endif
3333
public class MongoNodeIsRecoveringException : MongoServerException
3434
{
35+
#region static
36+
// private static methods
37+
private static string CreateMessage(BsonDocument result)
38+
{
39+
var code = result.GetValue("code", -1).ToInt32();
40+
var codeName = result.GetValue("codeName", null)?.AsString;
41+
42+
if (codeName == null)
43+
{
44+
return $"Server returned node is recovering error (code = {code}).";
45+
}
46+
else
47+
{
48+
return $"Server returned node is recovering error (code = {code}, codeName = \"{codeName}\").";
49+
}
50+
}
51+
#endregion
52+
3553
// fields
3654
private readonly BsonDocument _result;
3755

@@ -42,7 +60,7 @@ public class MongoNodeIsRecoveringException : MongoServerException
4260
/// <param name="connectionId">The connection identifier.</param>
4361
/// <param name="result">The result.</param>
4462
public MongoNodeIsRecoveringException(ConnectionId connectionId, BsonDocument result)
45-
: base(connectionId, "Server returned node is recovering error.")
63+
: base(connectionId, CreateMessage(result))
4664
{
4765
_result = Ensure.IsNotNull(result, nameof(result));
4866
}

tests/MongoDB.Driver.Core.Tests/MongoNodeIsRecoveringExceptionTests.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,38 @@ public class MongoNodeIsRecoveringExceptionTests
3636
[Fact]
3737
public void constructor_should_initialize_subject()
3838
{
39-
var subject = new MongoNodeIsRecoveringException(_connectionId, _serverResult);
39+
var result = new MongoNodeIsRecoveringException(_connectionId, _serverResult);
40+
41+
result.ConnectionId.Should().BeSameAs(_connectionId);
42+
result.InnerException.Should().BeNull();
43+
result.Message.Should().Be("Server returned node is recovering error (code = -1).");
44+
result.Result.Should().BeSameAs(_serverResult);
45+
}
46+
47+
[Fact]
48+
public void constructor_should_initialize_subject_when_result_contains_code()
49+
{
50+
var serverResult = BsonDocument.Parse("{ ok : 0, code : 1234 }");
51+
52+
var result = new MongoNodeIsRecoveringException(_connectionId, serverResult);
53+
54+
result.ConnectionId.Should().BeSameAs(_connectionId);
55+
result.InnerException.Should().BeNull();
56+
result.Message.Should().Be("Server returned node is recovering error (code = 1234).");
57+
result.Result.Should().BeSameAs(serverResult);
58+
}
59+
60+
[Fact]
61+
public void constructor_should_initialize_subject_when_result_contains_code_and_codeName()
62+
{
63+
var serverResult = BsonDocument.Parse("{ ok : 0, code : 1234, codeName : 'some name' }");
64+
65+
var result = new MongoNodeIsRecoveringException(_connectionId, serverResult);
4066

41-
subject.ConnectionId.Should().BeSameAs(_connectionId);
42-
subject.InnerException.Should().BeNull();
43-
subject.Message.Should().Be("Server returned node is recovering error.");
44-
subject.Result.Should().Be(_serverResult);
67+
result.ConnectionId.Should().BeSameAs(_connectionId);
68+
result.InnerException.Should().BeNull();
69+
result.Message.Should().Be("Server returned node is recovering error (code = 1234, codeName = \"some name\").");
70+
result.Result.Should().BeSameAs(serverResult);
4571
}
4672

4773
#if NET45

0 commit comments

Comments
 (0)