forked from mongodb/mongo-csharp-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConnectionStringTestRunner.cs
More file actions
115 lines (101 loc) · 4.08 KB
/
ConnectionStringTestRunner.cs
File metadata and controls
115 lines (101 loc) · 4.08 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
/* Copyright 2015-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 FluentAssertions;
using MongoDB.Bson;
using MongoDB.Bson.TestHelpers.JsonDrivenTests;
using MongoDB.Bson.TestHelpers.XunitExtensions;
using MongoDB.Driver.Core.Configuration;
using Xunit;
namespace MongoDB.Driver.Tests.Specifications.read_write_concern.tests
{
public class ConnectionStringTestRunner
{
[Theory]
[ClassData(typeof(TestCaseFactory))]
public void RunTestDefinition(JsonDrivenTestCase testCase)
{
var definition = testCase.Test;
JsonDrivenHelper.EnsureAllFieldsAreValid(definition, "description", "uri", "valid", "warning", "readConcern", "writeConcern");
ConnectionString connectionString = null;
Exception parseException = null;
try
{
connectionString = new ConnectionString((string)definition["uri"]);
}
catch (Exception ex)
{
parseException = ex;
}
if (parseException == null)
{
AssertValid(connectionString, definition);
}
else
{
AssertInvalid(parseException, definition);
}
}
private void AssertValid(ConnectionString connectionString, BsonDocument definition)
{
if (!definition["valid"].ToBoolean())
{
throw new AssertionException($"The connection string '{definition["uri"]}' should be invalid.");
}
BsonValue readConcernValue;
if (definition.TryGetValue("readConcern", out readConcernValue))
{
var readConcern = ReadConcern.FromBsonDocument((BsonDocument)readConcernValue);
connectionString.ReadConcernLevel.Should().Be(readConcern.Level);
}
BsonValue writeConcernValue;
if (definition.TryGetValue("writeConcern", out writeConcernValue))
{
var writeConcern =
WriteConcern.FromBsonDocument(MassageWriteConcernDocument((BsonDocument)writeConcernValue));
connectionString.W.Should().Be(writeConcern.W);
connectionString.WTimeout.Should().Be(writeConcern.WTimeout);
connectionString.Journal.Should().Be(writeConcern.Journal);
connectionString.FSync.Should().Be(writeConcern.FSync);
}
}
private void AssertInvalid(Exception ex, BsonDocument definition)
{
// we will assume warnings are allowed to be errors...
if (definition["valid"].ToBoolean() && !definition["warning"].ToBoolean())
{
throw new AssertionException($"The connection string '{definition["uri"]}' should be valid.", ex);
}
}
private BsonDocument MassageWriteConcernDocument(BsonDocument writeConcern)
{
if (writeConcern.Contains("wtimeoutMS"))
{
writeConcern["wtimeout"] = writeConcern["wtimeoutMS"];
writeConcern.Remove("wtimeoutMS");
}
if (writeConcern.Contains("journal"))
{
writeConcern["j"] = writeConcern["journal"];
writeConcern.Remove("journal");
}
return writeConcern;
}
private class TestCaseFactory : JsonDrivenTestCaseFactory
{
protected override string PathPrefix => "MongoDB.Driver.Tests.Specifications.read_write_concern.tests.connection_string.";
}
}
}