-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathCoreExceptionHelper.cs
More file actions
181 lines (159 loc) · 7.75 KB
/
Copy pathCoreExceptionHelper.cs
File metadata and controls
181 lines (159 loc) · 7.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/* Copyright 2018-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using MongoDB.Bson;
using MongoDB.Driver.Core.Clusters;
using MongoDB.Driver.Core.Connections;
using MongoDB.Driver.Core.Servers;
namespace MongoDB.Driver.Core.TestHelpers
{
public static class CoreExceptionHelper
{
public static Exception CreateException(string errorType)
{
switch (errorType)
{
// Exception Types first:
case nameof(IOException):
return new IOException("Fake IOException.");
case nameof(MongoConnectionException):
{
var clusterId = new ClusterId(1);
var serverId = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
var connectionId = new ConnectionId(serverId, 1);
var message = "Fake MongoConnectionException";
var innerException = new Exception();
return new MongoConnectionException(connectionId, message, innerException);
}
case nameof(MongoConnectionClosedException):
{
var clusterId = new ClusterId(1);
var serverId = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
var connectionId = new ConnectionId(serverId, 1);
return new MongoConnectionClosedException(connectionId);
}
case nameof(MongoCursorNotFoundException):
{
var clusterId = new ClusterId(1);
var serverId = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
var connectionId = new ConnectionId(serverId, 1);
var cursorId = 1L;
var query = new BsonDocument();
return new MongoCursorNotFoundException(connectionId, cursorId, query);
}
case nameof(MongoNodeIsRecoveringException):
{
var clusterId = new ClusterId(1);
var serverId = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
var connectionId = new ConnectionId(serverId, 1);
var result = new BsonDocument();
return new MongoNodeIsRecoveringException(connectionId, null, result);
}
case nameof(MongoNotPrimaryException):
{
var clusterId = new ClusterId(1);
var serverId = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
var connectionId = new ConnectionId(serverId, 1);
var result = new BsonDocument();
return new MongoNotPrimaryException(connectionId, null, result);
}
// custom errors next:
case "IOExceptionWithNetworkUnreachableSocketException":
{
var innerException = CreateException("NetworkUnreachableSocketException");
return new IOException("IoExceptionWithNetworkUnreachableException", innerException);
}
case "IOExceptionWithTimedOutSocketException":
{
var innerException = CreateException("TimedOutSocketException");
return new IOException("IOExceptionWithTimedOutSocketException", innerException);
}
case "NetworkUnreachableSocketException":
return new SocketException((int)SocketError.NetworkUnreachable);
case "TimedOutSocketException":
return new SocketException((int)SocketError.TimedOut);
case "ConnectionRefusedSocketException":
return new SocketException((int)SocketError.ConnectionRefused);
case nameof(MongoConnectionPoolPausedException):
return new MongoConnectionPoolPausedException("MongoConnectionPoolPausedException");
default:
throw new ArgumentException("Unknown error type.");
}
}
public static Exception CreateException(Type exceptionType)
{
return CreateException(exceptionType.Name);
}
public static MongoCommandException CreateMongoCommandException(int code = 1, string label = null)
{
return CreateMongoCommandExceptionWithLabels(code, label);
}
public static MongoCommandException CreateMongoCommandExceptionWithLabels(int code = 1, params string[] labels)
{
var clusterId = new ClusterId(1);
var endPoint = new DnsEndPoint("localhost", 27017);
var serverId = new ServerId(clusterId, endPoint);
var connectionId = new ConnectionId(serverId);
var message = "Fake MongoCommandException";
var command = BsonDocument.Parse("{ command : 1 }");
var result = BsonDocument.Parse($"{{ ok: 0, code : {code} }}");
var commandException = new MongoCommandException(connectionId, message, command, result);
foreach (var label in labels)
{
if (label != null)
{
commandException.AddErrorLabel(label);
}
}
return commandException;
}
public static MongoCommandException CreateMongoCommandExceptionWithLabels(BsonDocument result, params string[] labels)
{
var clusterId = new ClusterId(1);
var endPoint = new DnsEndPoint("localhost", 27017);
var serverId = new ServerId(clusterId, endPoint);
var connectionId = new ConnectionId(serverId);
var message = "Fake MongoCommandException";
var command = BsonDocument.Parse("{ command : 1 }");
var commandException = new MongoCommandException(connectionId, message, command, result);
foreach (var label in labels)
{
if (label != null)
{
commandException.AddErrorLabel(label);
}
}
return commandException;
}
public static MongoCommandException CreateMongoWriteConcernException(BsonDocument writeConcernResultDocument, string label = null)
{
var clusterId = new ClusterId(1);
var endPoint = new DnsEndPoint("localhost", 27017);
var serverId = new ServerId(clusterId, endPoint);
var connectionId = new ConnectionId(serverId);
var message = "Fake MongoWriteConcernException";
var writeConcernResult = new WriteConcernResult(writeConcernResultDocument);
var writeConcernException = new MongoWriteConcernException(connectionId, message, writeConcernResult);
if (label != null)
{
writeConcernException.AddErrorLabel(label);
}
return writeConcernException;
}
}
}