Beispiel #1
0
        public void Run(int numConcurrentWorkers, Action<ClusterBuilder> configurator)
        {
            var settings = new MongoClientSettings();
            settings.ClusterConfigurator = configurator;

            var client = new MongoClient(settings);
#pragma warning disable 618
            var server = client.GetServer();
#pragma warning restore 618

            var db = server.GetDatabase("foo");
            var collection = db.GetCollection<BsonDocument>("bar");

            Console.WriteLine("Press Enter to begin");
            Console.ReadLine();

            Console.WriteLine("Clearing Data");
            ClearData(collection);
            Console.WriteLine("Inserting Seed Data");
            InsertData(collection);

            Console.WriteLine("Running CRUD (errors will show up as + (query error) or * (insert/update error))");
            for (int i = 0; i < numConcurrentWorkers; i++)
            {
                ThreadPool.QueueUserWorkItem(_ => DoWork(collection));
            }

            Console.WriteLine("Press Enter to shutdown");
            Console.ReadLine();

            _cancellationTokenSource.Cancel();

            Console.WriteLine("Press Enter to exit");
            Console.ReadLine();
        }
Beispiel #2
0
        public async Task RunAsync(int numConcurrentWorkers, Action<ClusterBuilder> configurator)
        {
            var settings = new MongoClientSettings();
            settings.ClusterConfigurator = configurator;

            var client = new MongoClient(settings);

            var db = client.GetDatabase("foo");
            var collection = db.GetCollection<BsonDocument>("bar");

            Console.WriteLine("Press Enter to begin");
            Console.ReadLine();

            Console.WriteLine("Clearing Data");
            await ClearData(collection);
            Console.WriteLine("Inserting Seed Data");
            await InsertData(collection);

            Console.WriteLine("Running CRUD (errors will show up as + (query error) or * (insert/update error))");
            var tasks = new List<Task>();
            for (int i = 0; i < numConcurrentWorkers; i++)
            {
                tasks.Add(DoWork(collection));
            }

            Console.WriteLine("Press Enter to shutdown");
            Console.ReadLine();

            _cancellationTokenSource.Cancel();
            Task.WaitAll(tasks.ToArray());
        }
        public void TestApplicationName_too_long()
        {
            var subject = new MongoClientSettings();
            var value = new string('x', 129);

            var exception = Record.Exception(() => subject.ApplicationName = value);

            var argumentException = exception.Should().BeOfType<ArgumentException>().Subject;
            argumentException.ParamName.Should().Be("value");
        }
        public void TestApplicationName()
        {
            var settings = new MongoClientSettings();
            Assert.Equal(null, settings.ApplicationName);

            var applicationName = "app";
            settings.ApplicationName = applicationName;
            Assert.Equal(applicationName, settings.ApplicationName);

            settings.Freeze();
            Assert.Equal(applicationName, settings.ApplicationName);
            Assert.Throws<InvalidOperationException>(() => { settings.ApplicationName = applicationName; });
        }
        public void TestConnectionMode()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(ConnectionMode.Automatic, settings.ConnectionMode);

            var connectionMode = ConnectionMode.Direct;
            settings.ConnectionMode = connectionMode;
            Assert.AreEqual(connectionMode, settings.ConnectionMode);

            settings.Freeze();
            Assert.AreEqual(connectionMode, settings.ConnectionMode);
            Assert.Throws<InvalidOperationException>(() => { settings.ConnectionMode = connectionMode; });
        }
        public void TestConnectTimeout()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.ConnectTimeout, settings.ConnectTimeout);

            var connectTimeout = new TimeSpan(1, 2, 3);
            settings.ConnectTimeout = connectTimeout;
            Assert.AreEqual(connectTimeout, settings.ConnectTimeout);

            settings.Freeze();
            Assert.AreEqual(connectTimeout, settings.ConnectTimeout);
            Assert.Throws<InvalidOperationException>(() => { settings.ConnectTimeout = connectTimeout; });
        }
        public void TestFixtureSetUp()
        {
            __capturedEvents = new EventCapturer()
                .Capture<CommandStartedEvent>()
                .Capture<CommandSucceededEvent>()
                .Capture<CommandFailedEvent>();

            var settings = new MongoClientSettings
            {
                ClusterConfigurator = cb =>
                {
                    cb.Subscribe(__capturedEvents);

                    // never heartbeat...
                    cb.ConfigureServer(ss => ss.With(heartbeatInterval: Timeout.InfiniteTimeSpan));
                }
            };

            __client = new MongoClient(settings);
        }
 // constructors
 public ClusterKey(MongoClientSettings clientSettings)
 {
     _connectionMode = clientSettings.ConnectionMode;
     _connectTimeout = clientSettings.ConnectTimeout;
     _credentials = clientSettings.Credentials.ToList();
     _heartbeatInterval = __defaultHeartbeatInterval; // TODO: add HeartbeatInterval to MongoClientSettings?
     _heartbeatTimeout = __defaultHeartbeatTimeout; // TODO: add HeartbeatTimeout to MongoClientSettings?
     _ipv6 = clientSettings.IPv6;
     _maxConnectionIdleTime = clientSettings.MaxConnectionIdleTime;
     _maxConnectionLifeTime = clientSettings.MaxConnectionLifeTime;
     _maxConnectionPoolSize = clientSettings.MaxConnectionPoolSize;
     _minConnectionPoolSize = clientSettings.MinConnectionPoolSize;
     _receiveBufferSize = __defaultReceiveBufferSize; // TODO: add ReceiveBufferSize to MongoClientSettings?
     _replicaSetName = clientSettings.ReplicaSetName;
     _sendBufferSize = __defaultSendBufferSize; // TODO: add SendBufferSize to MongoClientSettings?
     _servers = clientSettings.Servers.ToList();
     _socketTimeout = clientSettings.SocketTimeout;
     _sslSettings = clientSettings.SslSettings;
     _useSsl = clientSettings.UseSsl;
     _verifySslCertificate = clientSettings.VerifySslCertificate;
     _waitQueueSize = clientSettings.WaitQueueSize;
     _waitQueueTimeout = clientSettings.WaitQueueTimeout;
     _hashCode = CalculateHashCode();
 }
        public void TestServerSelectionTimeout()
        {
            var settings = new MongoClientSettings();
            Assert.Equal(MongoDefaults.ServerSelectionTimeout, settings.ServerSelectionTimeout);

            var serverSelectionTimeout = new TimeSpan(1, 2, 3);
            settings.ServerSelectionTimeout = serverSelectionTimeout;
            Assert.Equal(serverSelectionTimeout, settings.ServerSelectionTimeout);

            settings.Freeze();
            Assert.Equal(serverSelectionTimeout, settings.ServerSelectionTimeout);
            Assert.Throws<InvalidOperationException>(() => { settings.ServerSelectionTimeout = serverSelectionTimeout; });
        }
Beispiel #10
0
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseNServiceBus(hostBuilderContext =>
        {
            var endpointConfiguration = new EndpointConfiguration(EndpointName);

            endpointConfiguration.UseSerialization <SystemJsonSerializer>();

            var transport = endpointConfiguration.UseTransport <RabbitMQTransport>();
            transport.ConnectionString("host=localhost");
            transport.UseConventionalRoutingTopology();

            endpointConfiguration.UsePersistence <LearningPersistence>();

            endpointConfiguration.EnableInstallers();

            endpointConfiguration.AuditProcessedMessagesTo("NsbActivities.Audit");

            endpointConfiguration.PurgeOnStartup(true);

            var recoverability = endpointConfiguration.Recoverability();
            recoverability.Immediate(i => i.NumberOfRetries(1));
            recoverability.Delayed(i => i.NumberOfRetries(0));

            var settings = endpointConfiguration.GetSettings();

            settings.Set(new NServiceBus.Extensions.Diagnostics.InstrumentationOptions
            {
                CaptureMessageBody = true
            });

            // configure endpoint here
            return(endpointConfiguration);
        })
        .ConfigureServices(services =>
        {
            var runner = MongoDbRunner.Start(singleNodeReplSet: true, singleNodeReplSetWaitTimeout: 20);

            services.AddSingleton(runner);
            var urlBuilder = new MongoUrlBuilder(runner.ConnectionString)
            {
                DatabaseName = "dev"
            };
            var mongoUrl            = urlBuilder.ToMongoUrl();
            var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl);
            mongoClientSettings.ClusterConfigurator = cb => cb.Subscribe(new DiagnosticsActivityEventSubscriber(new InstrumentationOptions {
                CaptureCommandText = true
            }));
            var mongoClient = new MongoClient(mongoClientSettings);
            services.AddSingleton(mongoUrl);
            services.AddSingleton(mongoClient);
            services.AddTransient(provider => provider.GetService <MongoClient>().GetDatabase(provider.GetService <MongoUrl>().DatabaseName));
            services.AddHostedService <Mongo2GoService>();
            services.AddOpenTelemetryTracing(builder => builder
                                             .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(EndpointName))
                                             .AddAspNetCoreInstrumentation()
                                             .AddMongoDBInstrumentation()
                                             .AddNServiceBusInstrumentation()
                                             .AddZipkinExporter(o =>
            {
                o.Endpoint = new Uri("http://localhost:9411/api/v2/spans");
            })
                                             .AddJaegerExporter(c =>
            {
                c.AgentHost = "localhost";
                c.AgentPort = 6831;
            }));
        })
        ;
 public void TestDefaults()
 {
     var settings = new MongoClientSettings();
     Assert.AreEqual(ConnectionMode.Automatic, settings.ConnectionMode);
     Assert.AreEqual(MongoDefaults.ConnectTimeout, settings.ConnectTimeout);
     Assert.AreEqual(0, settings.Credentials.Count());
     Assert.AreEqual(MongoDefaults.GuidRepresentation, settings.GuidRepresentation);
     Assert.AreEqual(false, settings.IPv6);
     Assert.AreEqual(MongoDefaults.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
     Assert.AreEqual(MongoDefaults.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
     Assert.AreEqual(MongoDefaults.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
     Assert.AreEqual(MongoDefaults.MinConnectionPoolSize, settings.MinConnectionPoolSize);
     Assert.AreEqual(ReadPreference.Primary, settings.ReadPreference);
     Assert.AreEqual(null, settings.ReplicaSetName);
     Assert.AreEqual(_localHost, settings.Server);
     Assert.AreEqual(_localHost, settings.Servers.First());
     Assert.AreEqual(1, settings.Servers.Count());
     Assert.AreEqual(MongoDefaults.ServerSelectionTimeout, settings.ServerSelectionTimeout);
     Assert.AreEqual(MongoDefaults.SocketTimeout, settings.SocketTimeout);
     Assert.AreEqual(null, settings.SslSettings);
     Assert.AreEqual(false, settings.UseSsl);
     Assert.AreEqual(true, settings.VerifySslCertificate);
     Assert.AreEqual(MongoDefaults.ComputedWaitQueueSize, settings.WaitQueueSize);
     Assert.AreEqual(MongoDefaults.WaitQueueTimeout, settings.WaitQueueTimeout);
     Assert.AreEqual(WriteConcern.Acknowledged, settings.WriteConcern);
 }
        public void TestWriteConcern()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(WriteConcern.Acknowledged, settings.WriteConcern);

            var writeConcern = new WriteConcern();
            settings.WriteConcern = writeConcern;
            Assert.AreSame(writeConcern, settings.WriteConcern);

            settings.Freeze();
            Assert.AreEqual(writeConcern, settings.WriteConcern);
            Assert.Throws<InvalidOperationException>(() => { settings.WriteConcern = writeConcern; });
        }
        public void TestUseSsl()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(false, settings.UseSsl);

            var useSsl = true;
            settings.UseSsl = useSsl;
            Assert.AreEqual(useSsl, settings.UseSsl);

            settings.Freeze();
            Assert.AreEqual(useSsl, settings.UseSsl);
            Assert.Throws<InvalidOperationException>(() => { settings.UseSsl = useSsl; });
        }
        public void TestReplicaSetName()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(null, settings.ReplicaSetName);

            var replicaSetName = "abc";
            settings.ReplicaSetName = replicaSetName;
            Assert.AreSame(replicaSetName, settings.ReplicaSetName);

            settings.Freeze();
            Assert.AreSame(replicaSetName, settings.ReplicaSetName);
            Assert.Throws<InvalidOperationException>(() => { settings.ReplicaSetName = replicaSetName; });
        }
        public void TestIPv6()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(false, settings.IPv6);

            var ipv6 = true;
            settings.IPv6 = ipv6;
            Assert.AreEqual(ipv6, settings.IPv6);

            settings.Freeze();
            Assert.AreEqual(ipv6, settings.IPv6);
            Assert.Throws<InvalidOperationException>(() => { settings.IPv6 = ipv6; });
        }
Beispiel #16
0
 public PlainAuthenticationTests()
 {
     _settings = MongoClientSettings.FromUrl(new MongoUrl(CoreTestConfiguration.ConnectionString.ToString()));
 }
Beispiel #17
0
 public MongoConnectionSettings(MongoClientSettings mongoClientSettings)
 {
     MongoClientSettings = mongoClientSettings;
 }
 /// <summary>
 /// Add a health check for MongoDb database that list all collections from specified database on <paramref name="mongoDatabaseName"/>.
 /// </summary>
 /// <param name="builder">The <see cref="IHealthChecksBuilder"/>.</param>
 /// <param name="mongoClientSettings">The MongoClientSettings to be used.</param>
 /// <param name="mongoDatabaseName">The Database name to check.</param>
 /// <param name="name">The health check name. Optional. If <c>null</c> the type name 'mongodb' will be used for the name.</param>
 /// <param name="failureStatus">
 /// The <see cref="HealthStatus"/> that should be reported when the health check fails. Optional. If <c>null</c> then
 /// the default status of <see cref="HealthStatus.Unhealthy"/> will be reported.
 /// </param>
 /// <param name="tags">A list of tags that can be used to filter sets of health checks. Optional.</param>
 /// <returns>The <see cref="IHealthChecksBuilder"/>.</returns>
 public static IHealthChecksBuilder AddMongoDb(this IHealthChecksBuilder builder, MongoClientSettings mongoClientSettings, string mongoDatabaseName, string name = default, HealthStatus?failureStatus = default, IEnumerable <string> tags = default)
 {
     return(builder.Add(new HealthCheckRegistration(
                            name ?? NAME,
                            sp => new MongoDbHealthCheck(mongoClientSettings, mongoDatabaseName),
                            failureStatus,
                            tags)));
 }
Beispiel #19
0
 /// <summary>
 /// Constructs Job Storage by Mongo client settings, name and options
 /// </summary>
 /// <param name="mongoClientSettings">Client settings for MongoDB</param>
 /// <param name="databaseName">Database name</param>
 /// <param name="storageOptions">Storage options</param>
 public MongoStorage(MongoClientSettings mongoClientSettings, string databaseName, MongoStorageOptions storageOptions)
     : this(new MongoClient(mongoClientSettings), databaseName, storageOptions)
 {
 }
Beispiel #20
0
 public IRepository GetRepository(MongoClientSettings settings, string databaseName)
 {
     return(new MongoRepository(settings, databaseName));
 }
Beispiel #21
0
        /// <summary>
        /// Tests database connection parameters.
        /// </summary>
        /// <param name="Form">Settings parameters provided in configuration form.</param>
        /// <param name="Save">If parameters should be saved, if OK.</param>
        /// <param name="Settings">Settings object for the plugin.</param>
        /// <exception cref="Exception">Exception, in case parameters are not correct.</exception>
        public async Task Test(Dictionary <string, object> Form, bool Save, object Settings)
        {
            if (!Form.TryGetValue("HostName", out object Obj) ||
                !(Obj is string HostName) ||
                !Form.TryGetValue("DatabaseName", out Obj) ||
                !(Obj is string DatabaseName) ||
                !Form.TryGetValue("DefaultCollection", out Obj) ||
                !(Obj is string DefaultCollection) ||
                !Form.TryGetValue("UserName", out Obj) ||
                !(Obj is string UserName) ||
                !Form.TryGetValue("Password", out Obj) ||
                !(Obj is string Password) ||
                !Form.TryGetValue("PortNumber", out Obj) ||
                !(Obj is string PortNumberString) ||
                !(Settings is MongoDBSettings MongoDBSettings))
            {
                throw new BadRequestException();
            }

            int?PortNumber;

            if (string.IsNullOrEmpty(PortNumberString))
            {
                PortNumber = null;
            }
            else if (!int.TryParse(PortNumberString, out int i) || i <= 0 || i > 65535)
            {
                throw new BadRequestException("Invalid Port Number.");
            }
            else
            {
                PortNumber = i;
            }

            MongoClientSettings MongoClientSettings = new MongoClientSettings()
            {
                ApplicationName = Gateway.ApplicationName,
                ConnectTimeout  = TimeSpan.FromSeconds(5)
            };

            if (!string.IsNullOrEmpty(HostName))
            {
                if (PortNumber.HasValue)
                {
                    MongoClientSettings.Server = new MongoServerAddress(HostName, PortNumber.Value);
                }
                else
                {
                    MongoClientSettings.Server = new MongoServerAddress(HostName);
                }
            }

            if (!string.IsNullOrEmpty(UserName))
            {
                MongoClientSettings.Credential = MongoCredential.CreateCredential(DatabaseName, UserName, Password);
            }

            MongoClient Client = new MongoClient(MongoClientSettings);

            await Client.StartSessionAsync();

            IMongoDatabase Database = Client.GetDatabase(DatabaseName);

            if (Save)
            {
                MongoDBSettings.Host              = HostName;
                MongoDBSettings.Port              = PortNumber;
                MongoDBSettings.UserName          = UserName;
                MongoDBSettings.Password          = Password;
                MongoDBSettings.Database          = DatabaseName;
                MongoDBSettings.DefaultCollection = DefaultCollection;
            }
        }
        public void TestEquals()
        {
            var settings = new MongoClientSettings();
            var clone = settings.Clone();
            Assert.IsTrue(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectionMode = ConnectionMode.Direct;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db2", "user2", "password2") };
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db", "user2", "password2") };
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.GuidRepresentation = GuidRepresentation.PythonLegacy;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.IPv6 = !settings.IPv6;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionIdleTime = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionLifeTime = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionPoolSize = settings.MaxConnectionPoolSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MinConnectionPoolSize = settings.MinConnectionPoolSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReadPreference = ReadPreference.Secondary;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReplicaSetName = "abc";
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.LocalThreshold = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.Server = new MongoServerAddress("someotherhost");
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ServerSelectionTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.SocketTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.SslSettings = new SslSettings { CheckCertificateRevocation = false };
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.UseSsl = !settings.UseSsl;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.VerifySslCertificate = !settings.VerifySslCertificate;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WaitQueueSize = settings.WaitQueueSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WaitQueueTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WriteConcern = WriteConcern.W2;
            Assert.IsFalse(clone.Equals(settings));
        }
        public void TestFrozenCopy()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(false, settings.IsFrozen);

            var frozenCopy = settings.FrozenCopy();
            Assert.AreEqual(true, frozenCopy.IsFrozen);
            Assert.AreNotSame(settings, frozenCopy);
            Assert.AreEqual(settings, frozenCopy);

            var secondFrozenCopy = frozenCopy.FrozenCopy();
            Assert.AreSame(frozenCopy, secondFrozenCopy);
        }
        public void TestEquals()
        {
            var settings = new MongoClientSettings();
            var clone    = settings.Clone();

            Assert.IsTrue(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectionMode = ConnectionMode.Direct;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone             = settings.Clone();
            clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db2", "user2", "password2") };
            Assert.IsFalse(clone.Equals(settings));

            clone             = settings.Clone();
            clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db", "user2", "password2") };
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.GuidRepresentation = GuidRepresentation.PythonLegacy;
            Assert.IsFalse(clone.Equals(settings));

            clone      = settings.Clone();
            clone.IPv6 = !settings.IPv6;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionIdleTime = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionLifeTime = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionPoolSize = settings.MaxConnectionPoolSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.MinConnectionPoolSize = settings.MinConnectionPoolSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReadPreference = ReadPreference.Secondary;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReplicaSetName = "abc";
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.SecondaryAcceptableLatency = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone        = settings.Clone();
            clone.Server = new MongoServerAddress("someotherhost");
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.SocketTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone             = settings.Clone();
            clone.SslSettings = new SslSettings {
                CheckCertificateRevocation = false
            };
            Assert.IsFalse(clone.Equals(settings));

            clone        = settings.Clone();
            clone.UseSsl = !settings.UseSsl;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.VerifySslCertificate = !settings.VerifySslCertificate;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WaitQueueSize = settings.WaitQueueSize + 1;
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WaitQueueTimeout = new TimeSpan(1, 2, 3);
            Assert.IsFalse(clone.Equals(settings));

            clone = settings.Clone();
            clone.WriteConcern = WriteConcern.W2;
            Assert.IsFalse(clone.Equals(settings));
        }
        public void TestMinConnectionPoolSize()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.MinConnectionPoolSize, settings.MinConnectionPoolSize);

            var minConnectionPoolSize = 123;
            settings.MinConnectionPoolSize = minConnectionPoolSize;
            Assert.AreEqual(minConnectionPoolSize, settings.MinConnectionPoolSize);

            settings.Freeze();
            Assert.AreEqual(minConnectionPoolSize, settings.MinConnectionPoolSize);
            Assert.Throws<InvalidOperationException>(() => { settings.MinConnectionPoolSize = minConnectionPoolSize; });
        }
        public void TestCredentials()
        {
            var settings = new MongoClientSettings();

            Assert.AreEqual(0, settings.Credentials.Count());
        }
        public void TestServersWithTwoServers()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(_localHost, settings.Server);
            Assert.IsTrue(new[] { _localHost }.SequenceEqual(settings.Servers));

            var servers = new MongoServerAddress[]
            {
                new MongoServerAddress("server1"),
                new MongoServerAddress("server2")
            };
            settings.Servers = servers;
            Assert.Throws<InvalidOperationException>(() => { var s = settings.Server; });
            Assert.IsTrue(servers.SequenceEqual(settings.Servers));

            settings.Freeze();
            Assert.Throws<InvalidOperationException>(() => { var s = settings.Server; });
            Assert.IsTrue(servers.SequenceEqual(settings.Servers));
            Assert.Throws<InvalidOperationException>(() => { settings.Servers = servers; });
        }
Beispiel #28
0
 public SunMongoClient(MongoClientSettings settings)
     : base(settings)
 {
 }
        public void TestVerifySslCertificate()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(true, settings.VerifySslCertificate);

            var verifySslCertificate = false;
            settings.VerifySslCertificate = verifySslCertificate;
            Assert.AreEqual(verifySslCertificate, settings.VerifySslCertificate);

            settings.Freeze();
            Assert.AreEqual(verifySslCertificate, settings.VerifySslCertificate);
            Assert.Throws<InvalidOperationException>(() => { settings.VerifySslCertificate = verifySslCertificate; });
        }
Beispiel #30
0
 private MongoDbClient(MongoClientSettings settings, string database)
 {
     Client   = new MongoClient(settings);
     Database = Client.GetDatabase(database);
 }
Beispiel #31
0
        public BDatabaseServiceMongoDB(
            string _MongoClientConfigJson,
            string _MongoPassword,
            string _MongoDatabase,
            Action <string> _ErrorMessageAction = null)
        {
            try
            {
                var _ClientConfigString = _MongoClientConfigJson;
                // Parse the Client Config Json if it's a base64 encoded (for running on local environment with launchSettings.json)
                Span <byte> buffer = new Span <byte>(new byte[_ClientConfigString.Length]);
                if (Convert.TryFromBase64String(_ClientConfigString, buffer, out int bytesParsed))
                {
                    if (bytesParsed > 0)
                    {
                        _ClientConfigString = Encoding.UTF8.GetString(buffer);
                    }
                }

                var _ClientConfigJObject = JObject.Parse(_ClientConfigString);

                var _HostTokens = _ClientConfigJObject.SelectTokens("$...hostname");
                var _Hosts      = new List <string>();
                foreach (var item in _HostTokens)
                {
                    _Hosts.Add(item.ToObject <string>());
                }

                var _PortTokens = _ClientConfigJObject.SelectTokens("$....port");
                var _Ports      = new List <int>();
                foreach (var item in _PortTokens)
                {
                    _Ports.Add(item.ToObject <int>());
                }

                var _ReplicaSetName = _ClientConfigJObject.SelectToken("replicaSets[0]._id").ToObject <string>();
                var _DatabaseName   = _ClientConfigJObject.SelectToken("auth.usersWanted[0].db").ToObject <string>();
                var _UserName       = _ClientConfigJObject.SelectToken("auth.usersWanted[0].user").ToObject <string>();
                var _AuthMechnasim  = _ClientConfigJObject.SelectToken("auth.autoAuthMechanism").ToObject <string>();
                int _MongoDBPort    = 27017;

                var _ServerList = new List <MongoServerAddress>();
                for (int i = 0; i < _Hosts.Count; i++)
                {
                    if (i < _Ports.Count)
                    {
                        _MongoDBPort = _Ports[i];
                    }

                    _ServerList.Add(new MongoServerAddress(_Hosts[i], _MongoDBPort));
                }

                MongoInternalIdentity _InternalIdentity = new MongoInternalIdentity(_DatabaseName, _UserName);
                PasswordEvidence      _PasswordEvidence = new PasswordEvidence(_MongoPassword);
                MongoCredential       _MongoCredential  = new MongoCredential(_AuthMechnasim, _InternalIdentity, _PasswordEvidence);
                //MongoCredential _MongoCredential = MongoCredential.CreateCredential(_DatabaseName, _UserName, _MongoPassword);

                var _ClientSettings = new MongoClientSettings();
                _ClientSettings.Servers        = _ServerList.ToArray();
                _ClientSettings.ConnectionMode = ConnectionMode.ReplicaSet;
                _ClientSettings.ReplicaSetName = _ReplicaSetName;
                _ClientSettings.Credential     = _MongoCredential;
                var Client = new MongoClient(_ClientSettings);
                MongoDB = Client.GetDatabase(_MongoDatabase);
                bInitializationSucceed = MongoDB != null;
            }
            catch (Exception e)
            {
                _ErrorMessageAction?.Invoke($"BDatabaseServiceMongoDB->Constructor: {e.Message} \n Trace: {e.StackTrace}");
                bInitializationSucceed = false;
            }
        }
Beispiel #32
0
 protected virtual MongoClientSettings OnCreateClientSettings()
 {
     return(MongoClientSettings.FromUrl(new MongoUrl(databaseSettings.ConnectionString)));
 }
Beispiel #33
0
        private ClusterKey CreateSubject(string notEqualFieldName = null)
        {
            var connectionMode     = ConnectionMode.Direct;
            var connectTimeout     = TimeSpan.FromSeconds(1);
            var credentials        = new[] { MongoCredential.CreateMongoCRCredential("source", "username", "password") };
            var guidRepresentation = GuidRepresentation.Standard;
            var ipv6                   = false;
            var localThreshold         = TimeSpan.FromMilliseconds(20);
            var maxConnectionIdleTime  = TimeSpan.FromSeconds(2);
            var maxConnectionLifeTime  = TimeSpan.FromSeconds(3);
            var maxConnectionPoolSize  = 50;
            var minConnectionPoolSize  = 5;
            var replicaSetName         = "abc";
            var servers                = new[] { new MongoServerAddress("localhost") };
            var serverSelectionTimeout = TimeSpan.FromSeconds(6);
            var socketTimeout          = TimeSpan.FromSeconds(4);
            var sslSettings            = new SslSettings
            {
                CheckCertificateRevocation = true,
                EnabledSslProtocols        = SslProtocols.Tls
            };
            var useSsl = false;
            var verifySslCertificate = false;
            var waitQueueSize        = 20;
            var waitQueueTimeout     = TimeSpan.FromSeconds(5);

            switch (notEqualFieldName)
            {
            case "ConnectionMode": connectionMode = ConnectionMode.ReplicaSet; break;

            case "ConnectTimeout": connectTimeout = TimeSpan.FromSeconds(99); break;

            case "Credentials": credentials = new[] { MongoCredential.CreateMongoCRCredential("different", "different", "different") }; break;

            case "IPv6": ipv6 = !ipv6; break;

            case "LocalThreshold": localThreshold = TimeSpan.FromMilliseconds(99); break;

            case "MaxConnectionIdleTime": maxConnectionIdleTime = TimeSpan.FromSeconds(99); break;

            case "MaxConnectionLifeTime": maxConnectionLifeTime = TimeSpan.FromSeconds(99); break;

            case "MaxConnectionPoolSize": maxConnectionPoolSize = 99; break;

            case "MinConnectionPoolSize": minConnectionPoolSize = 99; break;

            case "ReplicaSetName": replicaSetName = "different"; break;

            case "Servers": servers = new[] { new MongoServerAddress("different") }; break;

            case "ServerSelectionTimeout": serverSelectionTimeout = TimeSpan.FromSeconds(98); break;

            case "SocketTimeout": socketTimeout = TimeSpan.FromSeconds(99); break;

            case "SslSettings": sslSettings.CheckCertificateRevocation = !sslSettings.CheckCertificateRevocation; break;

            case "UseSsl": useSsl = !useSsl; break;

            case "VerifySslCertificate": verifySslCertificate = !verifySslCertificate; break;

            case "WaitQueueSize": waitQueueSize = 99; break;

            case "WaitQueueTimeout": waitQueueTimeout = TimeSpan.FromSeconds(99); break;
            }

            var clientSettings = new MongoClientSettings
            {
                ConnectionMode     = connectionMode,
                ConnectTimeout     = connectTimeout,
                Credentials        = credentials,
                GuidRepresentation = guidRepresentation,
                IPv6 = ipv6,
                MaxConnectionIdleTime = maxConnectionIdleTime,
                MaxConnectionLifeTime = maxConnectionLifeTime,
                MaxConnectionPoolSize = maxConnectionPoolSize,
                MinConnectionPoolSize = minConnectionPoolSize,
                ReplicaSetName        = replicaSetName,
                LocalThreshold        = localThreshold,
                Servers = servers,
                ServerSelectionTimeout = serverSelectionTimeout,
                SocketTimeout          = socketTimeout,
                SslSettings            = sslSettings,
                UseSsl = useSsl,
                VerifySslCertificate = verifySslCertificate,
                WaitQueueSize        = waitQueueSize,
                WaitQueueTimeout     = waitQueueTimeout
            };

            return(clientSettings.ToClusterKey());
        }
Beispiel #34
0
        private async void btnFillMongoDb_Click(object sender, EventArgs e)
        {
            this.btnFillMongoDb.Enabled = false;

            const string TeamUri = "http://stats.nba.com/stats/commonteamroster?";

            try
            {
                // === Move === //
                const string User   = "******";
                const string Pass   = "******";
                const string DbHost = "ds029565.mlab.com";
                const int    DbPort = 29565;
                const string DbName = "appharbor_5cwg75nh";

                var credentials = MongoCredential.CreateCredential(DbName, User, Pass);
                var settings    = new MongoClientSettings
                {
                    Server      = new MongoServerAddress(DbHost, DbPort),
                    Credentials = new List <MongoCredential> {
                        credentials
                    }
                };

                var client = new MongoClient(settings);
                var db     = client.GetDatabase(DbName);
                // === Move === //

                var xmlDoc = XDocument.Load("../../teams-by-season.xml");

                var seasonIdsFromXml = xmlDoc.XPathSelectElements("/seasons/season")
                                       .Select(el => el.Attribute("id").Value);

                var seasons = new HashSet <Season>();
                var seasonsToAddInMongoDb = new HashSet <Season>();

                // get just season Id's to reduce network traffic
                var collectionSeasons = db.GetCollection <Season>("Seasons");
                var fieldsSeasons     = Builders <Season> .Projection.Include(s => s.SeasonId);

                var seasonIdsInMongoDb = collectionSeasons.Find(s => true)
                                         .Project <Season>(fieldsSeasons)
                                         .ToList()
                                         .Select(s => s.SeasonId);

                foreach (var seasonId in seasonIdsFromXml)
                {
                    var teams = xmlDoc.XPathSelectElements($"/seasons/season[@id='{seasonId}']/teams/team")
                                .Select(el => new Team(
                                            int.Parse(el.Attribute("id").Value),
                                            el.Element("name").Value,
                                            el.Attribute("abbreviation").Value,
                                            el.Element("logo-src").Value,
                                            el.Element("headcoach").Value,
                                            int.Parse(el.Attribute("founded").Value),
                                            el.Element("arena").Value,
                                            el.Attribute("city").Value,
                                            el.Attribute("country").Value))
                                .ToList();

                    seasons.Add(new Season(seasonId, teams));

                    if (!seasonIdsInMongoDb.Contains(seasonId))
                    {
                        seasonsToAddInMongoDb.Add(new Season(seasonId, teams));
                    }
                }

                if (seasons.Count == 0)
                {
                    this.btnFillMongoDb.Enabled = true;

                    // MongoDB already contains this seasons
                    return;
                }

                if (seasonsToAddInMongoDb.Count > 0)
                {
                    await FillMongoDB.FillDatabase(
                        seasonsToAddInMongoDb.Select(x => x.ToBsonDocument <Season>()), "Seasons");
                }

                foreach (var seasonId in seasonIdsFromXml)
                {
                    var players = new HashSet <Player>();
                    var coaches = new HashSet <Coach>();

                    var teams   = seasons.First(x => x.SeasonId == seasonId).Teams;
                    var options = new Dictionary <string, string>();

                    var tasks = new HashSet <Task <TeamInfo> >();

                    foreach (var team in teams)
                    {
                        string uriString = $"{TeamUri}TeamID={team.TeamId}&Season={seasonId}";

                        // random delay to simulate human requests and prevent blocking of
                        // our IP address from server
                        int milisecondsToDelay = RandomProvider.Instance.Next(0, teams.Count() * 10);

                        tasks.Add(GetJsonObjFromNetworkFileAsync <TeamInfo>(uriString, Encoding.UTF8, options, milisecondsToDelay));
                    }

                    await Task.Run(async() =>
                    {
                        // get just player Id's to reduce network traffic
                        var collectionPlayers = db.GetCollection <Player>("Players");
                        //var conditionPlayers = Builders<Player>.Filter.Eq(p => p.TeamId, currentTeamId);
                        var fieldsPlayers = Builders <Player> .Projection.Include(p => p.PlayerId);

                        var playerIdsInMongoDb = collectionPlayers.Find(p => true)//.Find(conditionPlayers)
                                                 .Project <Player>(fieldsPlayers)
                                                 .ToList()
                                                 .Select(p => p.PlayerId);

                        // get just coach Id's to reduce network traffic
                        var collectionCoaches = db.GetCollection <Coach>("Coaches");
                        //var conditionCoaches = Builders<Coach>.Filter.Eq(c => c.TeamId, currentTeamId);
                        var fieldsCoaches = Builders <Coach> .Projection.Include(c => c.CoachId);

                        var coachIdsInMongoDb = collectionCoaches.Find(c => true)//conditionCoaches)
                                                .Project <Coach>(fieldsCoaches)
                                                .ToList()
                                                .Select(c => c.CoachId);

                        foreach (var teamInfo in await Task.WhenAll(tasks))
                        {
                            if (teamInfo == null)
                            {
                                MessageBox.Show("TeamInfo url does not response with JSON file.");
                                return;
                            }

                            // we need this when use conditionPlayers and conditionCoaches
                            //var currentTeamId = (int)(long)teamInfo.ResultSets[0].RowSet[0][0];

                            foreach (var resultSet in teamInfo.ResultSets)
                            {
                                if (resultSet.Name == "CommonTeamRoster")
                                {
                                    foreach (var row in resultSet.RowSet) // players
                                    {
                                        var playerId = (int)(long)row[12];

                                        if (!playerIdsInMongoDb.Contains(playerId))
                                        {
                                            string uriString = $"http://stats.nba.com/stats/commonplayerinfo?PlayerID={playerId}";

                                            // random delay to simulate human requests and prevent blocking of
                                            // our IP address from server
                                            int milisecondsToDelay = RandomProvider.Instance.Next(0, 20);

                                            var playerInfo = await GetJsonObjFromNetworkFileAsync <PlayerInfo>(uriString, Encoding.UTF8, options, milisecondsToDelay);

                                            var personId                  = playerInfo.ResultSets[0].RowSet[0][0];
                                            var firstName                 = playerInfo.ResultSets[0].RowSet[0][1];
                                            var lastName                  = playerInfo.ResultSets[0].RowSet[0][2];
                                            var displayFirstLastName      = playerInfo.ResultSets[0].RowSet[0][3];
                                            var displayLastCommaFirstName = playerInfo.ResultSets[0].RowSet[0][4];
                                            var displayFiLastName         = playerInfo.ResultSets[0].RowSet[0][5];
                                            DateTime birthDate            = (DateTime)playerInfo.ResultSets[0].RowSet[0][6];
                                            var school           = playerInfo.ResultSets[0].RowSet[0][7];
                                            var country          = playerInfo.ResultSets[0].RowSet[0][8];
                                            var lastAffiliation  = playerInfo.ResultSets[0].RowSet[0][9];
                                            var height           = playerInfo.ResultSets[0].RowSet[0][10];
                                            var weight           = playerInfo.ResultSets[0].RowSet[0][11];
                                            var seasonExp        = playerInfo.ResultSets[0].RowSet[0][12];
                                            var jersey           = playerInfo.ResultSets[0].RowSet[0][13];
                                            var position         = playerInfo.ResultSets[0].RowSet[0][14];
                                            var rosterStatus     = playerInfo.ResultSets[0].RowSet[0][15];
                                            var teamId           = playerInfo.ResultSets[0].RowSet[0][16];
                                            var teamName         = playerInfo.ResultSets[0].RowSet[0][17];
                                            var teamAbbreviation = playerInfo.ResultSets[0].RowSet[0][18];
                                            var teamCode         = playerInfo.ResultSets[0].RowSet[0][19];
                                            var teamCity         = playerInfo.ResultSets[0].RowSet[0][20];
                                            var playerCode       = playerInfo.ResultSets[0].RowSet[0][21];
                                            var fromYear         = playerInfo.ResultSets[0].RowSet[0][22];
                                            var toYear           = playerInfo.ResultSets[0].RowSet[0][23];
                                            var dLeagueFlag      = playerInfo.ResultSets[0].RowSet[0][24];
                                            var gamesPlayedFlag  = playerInfo.ResultSets[0].RowSet[0][25];

                                            // fill pointsPerGame with fake data
                                            var seasonPointsPerGame        = new Dictionary <string, double>();
                                            seasonPointsPerGame[seasonId]  = (double)RandomProvider.Instance.Next(0, 5000) / 100;
                                            seasonPointsPerGame["2015-16"] = (double)RandomProvider.Instance.Next(0, 5000) / 100;

                                            players.Add(new Player(
                                                            (int)(long)personId,
                                                            (string)firstName,
                                                            (string)lastName,
                                                            (string)displayFirstLastName,
                                                            (string)displayLastCommaFirstName,
                                                            (string)displayFiLastName,
                                                            (DateTime)birthDate,
                                                            (string)school,
                                                            (string)country,
                                                            (string)lastAffiliation,
                                                            (string)height,
                                                            (string)weight,
                                                            (int)(long)seasonExp,
                                                            (string)jersey,
                                                            (string)position,
                                                            (string)rosterStatus,
                                                            (int)(long)teamId,
                                                            (string)teamName,
                                                            (string)teamAbbreviation,
                                                            (string)teamCode,
                                                            (string)teamCity,
                                                            (string)playerCode,
                                                            (int)(long)fromYear,
                                                            (int)(long)toYear,
                                                            (string)dLeagueFlag,
                                                            (string)gamesPlayedFlag,
                                                            seasonPointsPerGame
                                                            ));
                                        }
                                    }
                                }
                                else if (resultSet.Name == "Coaches")
                                {
                                    foreach (var row in resultSet.RowSet)
                                    {
                                        var coachId = row[2];

                                        if (!coachIdsInMongoDb.Contains((string)coachId))
                                        {
                                            var teamId = row[0];
                                            var season = row[1];
                                            //var coachId = row[2];
                                            var firstName    = row[3];
                                            var lastName     = row[4];
                                            var coachName    = row[5];
                                            var coachCode    = row[6];
                                            var isAssistant  = row[7];
                                            var coachType    = row[8];
                                            var school       = row[9];
                                            var sortSequence = row[10];

                                            coaches.Add(new Coach(
                                                            (int)(long)teamId,
                                                            (string)season,
                                                            (string)coachId,
                                                            (string)firstName,
                                                            (string)lastName,
                                                            (string)coachName,
                                                            (string)coachCode,
                                                            (int)(double)isAssistant,
                                                            (string)coachType,
                                                            (string)school,
                                                            (int?)(double?)sortSequence
                                                            ));
                                        }
                                    }
                                }
                            }
                        }

                        await FillMongoDB.FillDatabase(
                            players.Select(x => x.ToBsonDocument()), "Players");

                        await FillMongoDB.FillDatabase(
                            coaches.Select(x => x.ToBsonDocument()), "Coaches");
                    });
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            this.btnFillMongoDb.Enabled = true;
        }
        public void TestServersWithOneServer()
        {
            var settings = new MongoClientSettings();
            Assert.Equal(_localHost, settings.Server);
            Assert.True(new[] { _localHost }.SequenceEqual(settings.Servers));

            var server = new MongoServerAddress("server");
            var servers = new[] { server };
            settings.Servers = servers;
            Assert.Equal(server, settings.Server);
            Assert.True(servers.SequenceEqual(settings.Servers));

            settings.Freeze();
            Assert.Equal(server, settings.Server);
            Assert.True(servers.SequenceEqual(settings.Servers));
            Assert.Throws<InvalidOperationException>(() => { settings.Server = server; });
        }
Beispiel #36
0
 public JsonDrivenRunAdminCommandTest(IMongoClient mongoClient, IJsonDrivenTestRunner testRunner, Dictionary <string, object> objectMap)
     : base(testRunner, objectMap)
 {
     _mongoClientSettings = mongoClient.Settings.Clone();
     _mongoClientSettings.ClusterConfigurator = null;
 }
        public void TestWaitQueueTimeout()
        {
            var settings = new MongoClientSettings();
            Assert.Equal(MongoDefaults.WaitQueueTimeout, settings.WaitQueueTimeout);

            var waitQueueTimeout = new TimeSpan(1, 2, 3);
            settings.WaitQueueTimeout = waitQueueTimeout;
            Assert.Equal(waitQueueTimeout, settings.WaitQueueTimeout);

            settings.Freeze();
            Assert.Equal(waitQueueTimeout, settings.WaitQueueTimeout);
            Assert.Throws<InvalidOperationException>(() => { settings.WaitQueueTimeout = waitQueueTimeout; });
        }
 public TBMongoDatabase(string databaseName, string connectionString)
 {
     _settings    = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
     DatabaseName = databaseName;
 }
        public void TestFreeze()
        {
            var settings = new MongoClientSettings();

            Assert.IsFalse(settings.IsFrozen);
            var hashCode = settings.GetHashCode();
            var stringRepresentation = settings.ToString();

            settings.Freeze();
            Assert.IsTrue(settings.IsFrozen);
            Assert.AreEqual(hashCode, settings.GetHashCode());
            Assert.AreEqual(stringRepresentation, settings.ToString());
        }
 /// <summary>
 /// Constructs Job Storage by Mongo client settings and name
 /// </summary>
 /// <param name="mongoClientSettings">Client settings for MongoDB</param>
 /// <param name="databaseName">Database name</param>
 public MongoStorage(MongoClientSettings mongoClientSettings, string databaseName)
     : this(mongoClientSettings, databaseName, new MongoStorageOptions())
 {
 }
        public void TestGuidRepresentation()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.GuidRepresentation, settings.GuidRepresentation);

            var guidRepresentation = GuidRepresentation.PythonLegacy;
            settings.GuidRepresentation = guidRepresentation;
            Assert.AreEqual(guidRepresentation, settings.GuidRepresentation);

            settings.Freeze();
            Assert.AreEqual(guidRepresentation, settings.GuidRepresentation);
            Assert.Throws<InvalidOperationException>(() => { settings.GuidRepresentation = guidRepresentation; });
        }
Beispiel #42
0
        static void Main(string[] args)
        {
            using (var docker = new MongoDockerFixture())
            {
                var testsDb       = "tests-db";
                var carCollection = "Car";
                // Init MongoDB
                var client = new MongoClient(MongoClientSettings.FromConnectionString($"mongodb://localhost:{docker.HostPort}"));
                var db     = client.GetDatabase(testsDb);

                db.DropCollection(carCollection);

                // Insert old and new version of cars into MongoDB
                var cars = new List <BsonDocument>
                {
                    new BsonDocument {
                        { "Dors", 3 }, { "Type", "Cabrio" }, { "UnnecessaryField", "" }
                    },
                    new BsonDocument {
                        { "Dors", 5 }, { "Type", "Combi" }, { "UnnecessaryField", "" }
                    },
                    new BsonDocument {
                        { "Doors", 3 }, { "Type", "Truck" }, { "UnnecessaryField", "" }, { "Version", "0.0.1" }
                    },
                    new BsonDocument {
                        { "Doors", 5 }, { "Type", "Van" }, { "Version", "0.1.1" }
                    }
                };

                var bsonCollection = db.GetCollection <BsonDocument>(carCollection);

                bsonCollection.InsertManyAsync(cars).Wait();

                // Init MongoMigration
                MongoMigrationClient.Initialize(client, new LightInjectAdapter(new LightInject.ServiceContainer()));

                Console.WriteLine("Migrate from:");
                cars.ForEach(c => Console.WriteLine(c.ToBsonDocument() + "\n"));

                // Migrate old version to current version by reading collection
                var typedCollection = db.GetCollection <Car>("Car");
                var result          = typedCollection.FindAsync(_ => true).Result.ToListAsync().Result;

                Console.WriteLine("To:");
                result.ForEach(r => Console.WriteLine(r.ToBsonDocument() + "\n"));

                // Create new car and add it with current version number into MongoDB
                var id   = ObjectId.GenerateNewId();
                var type = "Test" + id;
                var car  = new Car {
                    Doors = 2, Type = type
                };

                typedCollection.InsertOne(car);
                var test = typedCollection.FindAsync(Builders <Car> .Filter.Eq(c => c.Type, type)).Result.Single();

                var aggregate = typedCollection.Aggregate()
                                .Match(new BsonDocument {
                    { "Dors", 3 }
                });
                var results = aggregate.ToListAsync().Result;

                Console.WriteLine("New Car was created with version: " + test.Version);
                Console.WriteLine("\n");

                Console.WriteLine("\n");
                Console.WriteLine("Press any Key to exit...");
                Console.Read();

                db.DropCollection(carCollection);
            }
        }
        public void TestMaxConnectionLifeTime()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);

            var maxConnectionLifeTime = new TimeSpan(1, 2, 3);
            settings.MaxConnectionLifeTime = maxConnectionLifeTime;
            Assert.AreEqual(maxConnectionLifeTime, settings.MaxConnectionLifeTime);

            settings.Freeze();
            Assert.AreEqual(maxConnectionLifeTime, settings.MaxConnectionLifeTime);
            Assert.Throws<InvalidOperationException>(() => { settings.MaxConnectionLifeTime = maxConnectionLifeTime; });
        }
Beispiel #44
0
        public MongoDbSslProcessManagerFinder(string connectionString, string databaseName)
        {
            var    connectionParts = connectionString.Split(',');
            string nodes           = string.Empty;
            string username        = string.Empty;
            string password        = string.Empty;
            string certPath        = string.Empty;
            string userdb          = string.Empty;
            string cert            = string.Empty;
            string certPassword    = string.Empty;

            foreach (string connectionPart in connectionParts)
            {
                var nameValue = connectionPart.Split('=');
                switch (nameValue[0].ToLower())
                {
                case "nodes":
                    nodes = nameValue[1];
                    break;

                case "userdb":
                    userdb = nameValue[1];
                    break;

                case "username":
                    username = nameValue[1];
                    break;

                case "password":
                    password = nameValue[1];
                    break;

                case "certpath":
                    certPath = nameValue[1];
                    break;

                case "cert":
                    cert = nameValue[1];
                    break;

                case "certpassword":
                    certPassword = nameValue[1];
                    break;
                }
            }

            var mongoNodes = nodes.Split(';');

            List <X509Certificate> certs = null;

            if (!string.IsNullOrEmpty(certPath))
            {
                if (string.IsNullOrEmpty(certPassword))
                {
                    certs = new List <X509Certificate>
                    {
                        new X509Certificate2(certPath)
                    };
                }
                else
                {
                    certs = new List <X509Certificate>
                    {
                        new X509Certificate2(certPath, certPassword)
                    };
                }
            }

            if (!string.IsNullOrEmpty(cert))
            {
                if (string.IsNullOrEmpty(certPassword))
                {
                    certs = new List <X509Certificate>
                    {
                        new X509Certificate2(Convert.FromBase64String(cert))
                    };
                }
                else
                {
                    certs = new List <X509Certificate>
                    {
                        new X509Certificate2(Convert.FromBase64String(cert), certPassword)
                    };
                }
            }

            List <MongoCredential> credentials = null;

            if (!string.IsNullOrEmpty(username))
            {
                string db = "admin";

                if (!string.IsNullOrEmpty(userdb))
                {
                    db = userdb;
                }

                credentials = new List <MongoCredential>
                {
                    MongoCredential.CreateCredential(db, username, password)
                };
            }

            var settings = new MongoClientSettings
            {
                UseSsl         = true,
                Credentials    = credentials,
                ConnectionMode = ConnectionMode.Automatic,
                Servers        = mongoNodes.Select(x => new MongoServerAddress(x)),
                SslSettings    = new SslSettings
                {
                    ClientCertificates = certs,
                    ClientCertificateSelectionCallback = (sender, host, certificates, certificate, issuers) => certificates[0],
                    CheckCertificateRevocation         = false
                }
            };

            var         client = new MongoClient(settings);
            MongoServer server = client.GetServer();

            _mongoDatabase = server.GetDatabase(databaseName);
        }
        public void TestReadPreference()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(ReadPreference.Primary, settings.ReadPreference);

            var readPreference = ReadPreference.Primary;
            settings.ReadPreference = readPreference;
            Assert.AreSame(readPreference, settings.ReadPreference);

            settings.Freeze();
            Assert.AreEqual(readPreference, settings.ReadPreference);
            Assert.Throws<InvalidOperationException>(() => { settings.ReadPreference = readPreference; });
        }
Beispiel #46
0
 /// <summary>
 /// MongoDB database provider.
 /// </summary>
 /// <param name="Settings">Connection settings.</param>
 /// <param name="DatabaseName">Name of database.</param>
 /// <param name="DefaultCollectionName">Name of default collection.</param>
 public MongoDBProvider(MongoClientSettings Settings, string DatabaseName, string DefaultCollectionName)
 {
     this.Init(Settings, DatabaseName, DefaultCollectionName);
 }
        public void TestLocalThreshold()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.LocalThreshold, settings.LocalThreshold);

            var localThreshold = new TimeSpan(1, 2, 3);
            settings.LocalThreshold = localThreshold;
            Assert.AreEqual(localThreshold, settings.LocalThreshold);

            settings.Freeze();
            Assert.AreEqual(localThreshold, settings.LocalThreshold);
            Assert.Throws<InvalidOperationException>(() => { settings.LocalThreshold = localThreshold; });
        }
 public void InitMongoDbConnection(MongoClientSettings settings)
 {
     _mongoClient = new MongoClient(settings);
 }
        public void TestSslSettings()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(null, settings.SslSettings);

            var sslSettings = new SslSettings { CheckCertificateRevocation = false };
            settings.SslSettings = sslSettings;
            Assert.AreEqual(sslSettings, settings.SslSettings);

            settings.Freeze();
            Assert.AreEqual(sslSettings, settings.SslSettings);
            Assert.Throws<InvalidOperationException>(() => { settings.SslSettings = sslSettings; });
        }
Beispiel #50
0
        static async Task MainAsync()

        {
            // EXAMPLE PULLED FROM THE DOCS: https://mongodb.github.io/mongo-csharp-driver/2.8/reference/driver/authentication/

            // does not work

            var client_cert = new X509Certificate2("client-certificate.pfx", "password");



            var docsExampleVersionOfSettings = new MongoClientSettings

            {
                Credentials = new[]

                {  // i just pulled this DN (username for x509) from openssl using: openssl pkcs12 -info -in client-certificate.pfx
                    MongoCredential.CreateMongoX509Credential("OU=TestClientCertificateOrgUnit, O=TestClientCertificateOrg, L=TestClientCertificateLocality, ST=TestClientCertificateState")
                }, // note that this DN also matches the DN/subject printed out using cert.ToString()

                SslSettings = new SslSettings

                {
                    ClientCertificates = new[] { client_cert },
                },

                UseSsl = true
            };



            // working example starting with a connection string, and avoiding the Credential part of the setting object entirely

            var connectionString = "mongodb://localmongo1/?authMechanism=MONGODB-X509&tls=true";

            var connectionStringPlusObjectSettings = MongoClientSettings.FromConnectionString(connectionString);

            var cert = new X509Certificate2("client-certificate.pfx", "password");

            Console.WriteLine(cert.ToString());

            Console.WriteLine(cert.PrivateKey != null ? "contains private key" : "does not contain private key"); // verify that there's a private key in the cert, docs tell us we need this

            var sslSettings = new SslSettings {
                ClientCertificates = new List <X509Certificate>()

                {
                    new X509Certificate2("client-certificate.pfx", "password")
                }
            };

            connectionStringPlusObjectSettings.AllowInsecureTls = true; // for testing using self-signed certs, use this option to skip validation. DO NOT USE THIS OPTION FOR PRODUCTION USES

            connectionStringPlusObjectSettings.SslSettings = sslSettings;



            // just to demonstrate the difference between what mongod uses (order + spacing) vs openssl/c# version of the string:

            var from_mongod_logs_str = "OU=TestClientCertificateOrgUnit,O=TestClientCertificateOrg,L=TestClientCertificateLocality,ST=TestClientCertificateState";

            var from_openssl_str = "ST = TestClientCertificateState, L = TestClientCertificateLocality, O = TestClientCertificateOrg, OU = TestClientCertificateOrgUnit";

            var from_csharp_str = "OU=TestClientCertificateOrgUnit, O=TestClientCertificateOrg, L=TestClientCertificateLocality, S=TestClientCertificateState";

            // note that C# adds extra spaces and uses S instead of ST; openssl adds even more extra spaces and puts values in a completely different order.



            // suggested example to replace the existing docs example. Should work as long as the certificate is valid!

            var settingObjectOnlySettings = new MongoClientSettings

            {
                Credential = MongoCredential.CreateMongoX509Credential(null),

                SslSettings = new SslSettings

                {
                    ClientCertificates = new List <X509Certificate>()

                    {
                        new X509Certificate2("client-certificate.pfx", "password")
                    },
                },

                UseTls = true,

                Server = new MongoServerAddress("localmongo1", 27017),

                AllowInsecureTls = true // for testing using self-signed certs, use this option to skip validation. DO NOT USE THIS OPTION FOR PRODUCTION USES
            };



            var client = new MongoClient(settingObjectOnlySettings); // suggested fixed example

            //var client = new MongoClient(connectionStringPlusObjectSettings); // x509 auth activated via connection string

            //var client = new MongoClient(docsExampleVersionOfSettings); // example from the docs, in case you want to play around with it



            // just doing a quick read + insert to verify the usability of this connection

            var database = client.GetDatabase("test");

            var collection = database.GetCollection <BsonDocument>("stuff");



            var allItemsInCollection = await collection.Find(new BsonDocument()).ToListAsync();

            Console.WriteLine(allItemsInCollection.Count);



            var entity = new BsonDocument {
                { "count", allItemsInCollection.Count }
            };

            collection.InsertOne(entity);

            Console.WriteLine("wrote " + entity + " to DB");



            /*
             *
             *  Driver suggestions:
             *
             *  https://api.mongodb.com/csharp/2.2/html/T_MongoDB_Driver_MongoCredential.htm
             *
             *     - the X509Credential arguments are missing for some reason from the API docs MongoCredential page (above)
             *
             *  https://mongodb.github.io/mongo-csharp-driver/2.8/reference/driver/authentication/
             *
             *     - the x.509 auth portion of this page has 3 problems:
             *
             *           1) Credentials is deprecated, replaced by Credential
             *
             *           2) useSsl is deprecated, should be  useTls
             *
             *           3) the value of Credential (created by MongoCredential.CreateMongoX509Credential(connectionStr)) must
             *
             *              match the DN of the certificate EXACTLY as interpreted by mongodb. Unfortunately this means it must
             *
             *              match spacing that openSSL/C# do not necessarily include when one prints out a pfx file with commands
             *
             *              like ``openssl pkcs12 -info -in client-certificate.pfx``.
             *
             *
             *
             *           Two solutions to #3 for our documentation:
             *
             *           1) set connectionStr to null and this snippet will work just fine
             *
             *           2) set the authentication mechanism to x509 in a connection string, then import
             *
             *              that connection string into a settings object using MongoClientSettings.FromConnectionString,
             *
             *              then add the certificate to the SslSettings. This lets you avoid setting a Credential entirely
             *
             *
             *
             *   Personally I would simply recommend removing/deprecating the argument
             *
             *   from CreateMongoX509Credential entirely, as it was only a source of
             *
             *   pain for me when trying to use X.509 with the drivers.
             *
             *
             *
             */
        }
Beispiel #51
0
 public ExtentXReporter(MongoClientSettings settings)
 {
     LoadDefaultConfig();
     _mongoClient = new MongoClient(settings);
 }
Beispiel #52
0
        public void ConfigureServices(IServiceCollection services)
        {
            _logger.LogInformation("Configuring services");
            LoadAndValidateSettings(services);
            if (Environment.IsEnvironment(EnviromentDevVS))
            {
                _logger.LogInformation("Starting Mongo2Go");
                _runner = Mongo2Go.MongoDbRunner.StartForDebugging();
                MongoClientSettings settings = new MongoClientSettings
                {
                    GuidRepresentation = GuidRepresentation.Standard
                };
                services.AddSingleton(new MongoClient(settings).GetDatabase(_swapifyDbSettings.DatabaseName));
            }
            else
            {
                services.Configure <SwapifyDatabaseSettings>(Configuration.GetSection(nameof(SwapifyDatabaseSettings)));
                var settings = new MongoClientSettings
                {
                    Server             = new MongoServerAddress("mongodb", 27017),
                    GuidRepresentation = GuidRepresentation.Standard
                };
                services.AddSingleton(new MongoClient(settings).GetDatabase(_swapifyDbSettings.DatabaseName));
                services.AddSingleton <ISwapifyDatabaseSettings>(sp => sp.GetRequiredService <IOptions <SwapifyDatabaseSettings> >().Value);
            }
            if (Environment.IsProduction())
            {
                services.AddCors(options =>
                {
                    options.AddPolicy("SwapifyCorsPolicy",
                                      builder =>
                    {
                        builder.WithOrigins("https://swapify.fri.uniza.sk",
                                            "http://swapify.fri.uniza.sk",
                                            "https://*swapify.fri.uniza.sk",
                                            "http://*swapify.fri.uniza.sk")
                        .SetIsOriginAllowedToAllowWildcardSubdomains()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                    });
                    options.AddPolicy("AllowCredentials",
                                      builder =>
                    {
                        builder.WithOrigins("https://swapify.fri.uniza.sk",
                                            "http://swapify.fri.uniza.sk",
                                            "https://*swapify.fri.uniza.sk",
                                            "http://*swapify.fri.uniza.sk")
                        .AllowCredentials();
                    });
                });
            }
            else
            {
                services.AddCors(options =>
                {
                    options.AddPolicy("SwapifyCorsPolicy",
                                      builder =>
                    {
                        builder.WithOrigins("http://localhost",
                                            "https://localhost",
                                            "http://localhost:3000",
                                            "https://localhost:3000")
                        .SetIsOriginAllowedToAllowWildcardSubdomains()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                    });
                    options.AddPolicy("AllowCredentials",
                                      builder =>
                    {
                        builder.WithOrigins("http://localhost",
                                            "https://localhost",
                                            "http://localhost:3000",
                                            "https://localhost:3000")
                        .AllowCredentials();
                    });
                });
            }
            services.ConfigureMongoDbIdentity <User, MongoIdentityRole, Guid>(ConfigureIdentity());
            services.AddScoped <IUserService, UserService>();
            services.AddSingleton <ICourseService, CourseService>();
            services.AddSingleton <ISchoolScheduleProxy, SchoolScheduleProxy>();
            services.AddSingleton <ISchoolCourseProxy, SchoolCourseProxy>();
            services.AddSingleton <IEmailService, EmailService>();
            services.AddSingleton <IBlockChangesService, BlockChangesService>();
            services.AddSingleton <IStudentService, StudentService>();
            services.AddSingleton <INotificationService, NotificationService>();
            services.AddSingleton <ICalendarService, CalendarService>();
            services.AddControllersWithViews();
            if (!Environment.IsEnvironment(EnviromentDevVS))
            {
                services.AddSpaStaticFiles(configuration =>
                {
                    configuration.RootPath = _pathSettings.WwwRootPath;
                });
            }

            services.AddMvcCore().AddApiExplorer();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Swapify API", Version = "v1"
                });
            });
            ConfigureAuthorization(services);
        }
        public void TestWaitQueueSize()
        {
            var settings = new MongoClientSettings();
            Assert.AreEqual(MongoDefaults.ComputedWaitQueueSize, settings.WaitQueueSize);

            var waitQueueSize = 123;
            settings.WaitQueueSize = waitQueueSize;
            Assert.AreEqual(waitQueueSize, settings.WaitQueueSize);

            settings.Freeze();
            Assert.AreEqual(waitQueueSize, settings.WaitQueueSize);
            Assert.Throws<InvalidOperationException>(() => { settings.WaitQueueSize = waitQueueSize; });
        }
Beispiel #54
0
        public void TestFromUrl()
        {
            // set everything to non default values to test that all settings are converted
            var connectionString =
                "mongodb://*****:*****@somehost/?appname=app1;authSource=db;authMechanismProperties=CANONICALIZE_HOST_NAME:true;" +
                "compressors=zlib,snappy;zlibCompressionLevel=9;connect=direct;connectTimeout=123;ipv6=true;heartbeatInterval=1m;heartbeatTimeout=2m;localThreshold=128;" +
                "maxIdleTime=124;maxLifeTime=125;maxPoolSize=126;minPoolSize=127;readConcernLevel=majority;" +
                "readPreference=secondary;readPreferenceTags=a:1,b:2;readPreferenceTags=c:3,d:4;retryReads=false;retryWrites=true;socketTimeout=129;" +
                "serverSelectionTimeout=20s;tls=true;tlsInsecure=true;waitqueuesize=130;waitQueueTimeout=131;" +
                "w=1;fsync=true;journal=true;w=2;wtimeout=131;gssapiServiceName=other";

#pragma warning disable 618
            if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
            {
                connectionString += ";uuidRepresentation=pythonLegacy";
            }
#pragma warning restore 618
            var builder = new MongoUrlBuilder(connectionString);
            var url     = builder.ToMongoUrl();

            var settings = MongoClientSettings.FromUrl(url);
            Assert.Equal(url.AllowInsecureTls, settings.AllowInsecureTls);
            Assert.Equal(url.ApplicationName, settings.ApplicationName);
            Assert.Equal(url.Compressors, settings.Compressors);
            Assert.Equal(url.ConnectionMode, settings.ConnectionMode);
            Assert.Equal(url.ConnectTimeout, settings.ConnectTimeout);
#pragma warning disable 618
            Assert.Equal(1, settings.Credentials.Count());
#pragma warning restore
            Assert.Equal(url.Username, settings.Credential.Username);
            Assert.Equal(url.AuthenticationMechanism, settings.Credential.Mechanism);
            Assert.Equal("other", settings.Credential.GetMechanismProperty <string>("SERVICE_NAME", "mongodb"));
            Assert.Equal(true, settings.Credential.GetMechanismProperty <bool>("CANONICALIZE_HOST_NAME", false));
            Assert.Equal(url.AuthenticationSource, settings.Credential.Source);
            Assert.Equal(new PasswordEvidence(url.Password), settings.Credential.Evidence);
#pragma warning disable 618
            if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
            {
                Assert.Equal(url.GuidRepresentation, settings.GuidRepresentation);
            }
#pragma warning restore 618
            Assert.Equal(url.HeartbeatInterval, settings.HeartbeatInterval);
            Assert.Equal(url.HeartbeatTimeout, settings.HeartbeatTimeout);
            Assert.Equal(url.IPv6, settings.IPv6);
            Assert.Equal(url.LocalThreshold, settings.LocalThreshold);
            Assert.Equal(url.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
            Assert.Equal(url.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
            Assert.Equal(url.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
            Assert.Equal(url.MinConnectionPoolSize, settings.MinConnectionPoolSize);
            Assert.Equal(url.ReadConcernLevel, settings.ReadConcern.Level);
            Assert.Equal(url.ReadPreference, settings.ReadPreference);
            Assert.Equal(url.ReplicaSetName, settings.ReplicaSetName);
            Assert.Equal(url.RetryReads, settings.RetryReads);
            Assert.Equal(url.RetryWrites, settings.RetryWrites);
            Assert.Equal(url.Scheme, settings.Scheme);
            Assert.True(url.Servers.SequenceEqual(settings.Servers));
            Assert.Equal(url.ServerSelectionTimeout, settings.ServerSelectionTimeout);
            Assert.Equal(url.SocketTimeout, settings.SocketTimeout);
#pragma warning disable 618
            settings.SslSettings.Should().BeNull();
            Assert.Equal(url.UseSsl, settings.UseSsl);
#pragma warning restore 618
            Assert.Equal(url.UseTls, settings.UseTls);
#pragma warning disable 618
            Assert.Equal(url.VerifySslCertificate, settings.VerifySslCertificate);
#pragma warning restore 618

#pragma warning disable 618
            Assert.Equal(url.ComputedWaitQueueSize, settings.WaitQueueSize);
#pragma warning restore 618
            Assert.Equal(url.WaitQueueTimeout, settings.WaitQueueTimeout);
            Assert.Equal(url.GetWriteConcern(true), settings.WriteConcern);
        }
        public void ToClusterKey_should_copy_relevant_values()
        {
            var credentials = new[] { MongoCredential.CreateMongoCRCredential("source", "username", "password") };
            var servers = new[] { new MongoServerAddress("localhost") };
            var sslSettings = new SslSettings
            {
                CheckCertificateRevocation = true,
                EnabledSslProtocols = SslProtocols.Ssl3
            };

            var subject = new MongoClientSettings
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectTimeout = TimeSpan.FromSeconds(1),
                Credentials = credentials,
                GuidRepresentation = GuidRepresentation.Standard,
                IPv6 = true,
                MaxConnectionIdleTime = TimeSpan.FromSeconds(2),
                MaxConnectionLifeTime = TimeSpan.FromSeconds(3),
                MaxConnectionPoolSize = 10,
                MinConnectionPoolSize = 5,
                ReplicaSetName = "rs",
                LocalThreshold = TimeSpan.FromMilliseconds(20),
                Servers = servers,
                ServerSelectionTimeout = TimeSpan.FromSeconds(6),
                SocketTimeout = TimeSpan.FromSeconds(4),
                SslSettings = sslSettings,
                UseSsl = true,
                VerifySslCertificate = true,
                WaitQueueSize = 20,
                WaitQueueTimeout = TimeSpan.FromSeconds(5)
            };

            var result = subject.ToClusterKey();

            result.ConnectionMode.Should().Be(subject.ConnectionMode);
            result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
            result.Credentials.Should().Equal(subject.Credentials);
            result.IPv6.Should().Be(subject.IPv6);
            result.MaxConnectionIdleTime.Should().Be(subject.MaxConnectionIdleTime);
            result.MaxConnectionLifeTime.Should().Be(subject.MaxConnectionLifeTime);
            result.MaxConnectionPoolSize.Should().Be(subject.MaxConnectionPoolSize);
            result.MinConnectionPoolSize.Should().Be(subject.MinConnectionPoolSize);
            result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
            result.LocalThreshold.Should().Be(subject.LocalThreshold);
            result.Servers.Should().Equal(subject.Servers);
            result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
            result.SocketTimeout.Should().Be(subject.SocketTimeout);
            result.SslSettings.Should().Be(subject.SslSettings);
            result.UseSsl.Should().Be(subject.UseSsl);
            result.VerifySslCertificate.Should().Be(subject.VerifySslCertificate);
            result.WaitQueueSize.Should().Be(subject.WaitQueueSize);
            result.WaitQueueTimeout.Should().Be(subject.WaitQueueTimeout);
        }
 public void Setup()
 {
     _settings = MongoClientSettings.FromUrl(new MongoUrl(CoreTestConfiguration.ConnectionString.ToString()));
 }
 public void TestCredentials()
 {
     var settings = new MongoClientSettings();
     Assert.AreEqual(0, settings.Credentials.Count());
 }
Beispiel #58
0
 public MongoDbHealthCheck(MongoClientSettings clientSettings, string databaseName = default)
 {
     _specifiedDatabase   = databaseName;
     _mongoClientSettings = clientSettings;
 }
Beispiel #59
0
        public void TestEquals()
        {
            var settings = new MongoClientSettings();
            var clone    = settings.Clone();

            Assert.True(clone.Equals(settings));

            clone = settings.Clone();
            clone.AllowInsecureTls = !settings.AllowInsecureTls;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ApplicationName = "app2";
            Assert.False(clone.Equals(settings));

            clone             = settings.Clone();
            clone.Compressors = new[] { new CompressorConfiguration(CompressorType.Zlib) };
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectionMode = ConnectionMode.Direct;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ConnectTimeout = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
#pragma warning disable 618
            clone.Credential = MongoCredential.CreateMongoCRCredential("db2", "user2", "password2");
#pragma warning restore 618
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
#pragma warning disable 618
            clone.Credential = MongoCredential.CreateMongoCRCredential("db", "user2", "password2");
#pragma warning restore 618
            Assert.False(clone.Equals(settings));

#pragma warning disable 618
            if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
            {
                clone = settings.Clone();
                var unequalGuidRepresentation = clone.GuidRepresentation != GuidRepresentation.PythonLegacy ? GuidRepresentation.PythonLegacy : GuidRepresentation.CSharpLegacy;
                clone.GuidRepresentation = unequalGuidRepresentation;
                Assert.False(clone.Equals(settings));
            }
#pragma warning restore 618

            clone = settings.Clone();
            clone.HeartbeatInterval = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.HeartbeatTimeout = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone      = settings.Clone();
            clone.IPv6 = !settings.IPv6;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.LocalThreshold = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionIdleTime = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionLifeTime = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.MaxConnectionPoolSize = settings.MaxConnectionPoolSize + 1;
            Assert.False(clone.Equals(settings));

            clone             = settings.Clone();
            clone.ReadConcern = ReadConcern.Majority;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.MinConnectionPoolSize = settings.MinConnectionPoolSize + 1;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReadPreference = ReadPreference.Secondary;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ReplicaSetName = "abc";
            Assert.False(clone.Equals(settings));

            clone            = settings.Clone();
            clone.RetryReads = false;
            Assert.False(clone.Equals(settings));

            clone             = settings.Clone();
            clone.RetryWrites = false;
            Assert.False(clone.Equals(settings));

            clone        = settings.Clone();
            clone.Scheme = ConnectionStringScheme.MongoDBPlusSrv;
            Assert.False(clone.Equals(settings));

            clone        = settings.Clone();
            clone.Server = new MongoServerAddress("someotherhost");
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.ServerSelectionTimeout = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.SocketTimeout = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone             = settings.Clone();
            clone.SslSettings = new SslSettings {
                CheckCertificateRevocation = false
            };
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
#pragma warning disable 618
            clone.UseSsl = !settings.UseSsl;
#pragma warning restore 618
            Assert.False(clone.Equals(settings));

            clone        = settings.Clone();
            clone.UseTls = !settings.UseTls;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
#pragma warning disable 618
            clone.VerifySslCertificate = !settings.VerifySslCertificate;
#pragma warning restore 618
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
#pragma warning disable 618
            clone.WaitQueueSize = settings.WaitQueueSize + 1;
#pragma warning restore 618
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.WaitQueueTimeout = new TimeSpan(1, 2, 3);
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.WriteConcern = WriteConcern.W2;
            Assert.False(clone.Equals(settings));

            clone = settings.Clone();
            clone.SdamLogFilename = "garbage";
            Assert.False(clone.Equals(settings));
        }
Beispiel #60
0
 /// <summary>
 /// Initializes the MongoDB connection with an advanced set of parameters.
 /// </summary>
 /// <param name="settings">A MongoClientSettings object</param>
 /// <param name="database">Name of the database</param>
 public DB(MongoClientSettings settings, string database)
 {
     Initialize(settings, database);
 }