public void Constructor_BindsOptions()
        {
            // arrange
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:options:someKey"]         = "someValue",
                ["mongodb:client:options:someOtherKey"]    = "someOtherValue",
                ["mongodb:client:options:stillAnotherKey"] = "stillAnotherValue",
                ["mongodb:client:options:yetOneMoreKey"]   = "yetOneMoreValue"
            };

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            // act
            var sconfig = new MongoDbConnectorOptions(config);

            // assert
            Assert.Equal("someValue", sconfig.Options["someKey"]);
            Assert.Equal("someOtherValue", sconfig.Options["someOtherKey"]);
            Assert.Equal("stillAnotherValue", sconfig.Options["stillAnotherKey"]);
            Assert.Equal("yetOneMoreValue", sconfig.Options["yetOneMoreKey"]);
        }
        public void ConnectionString_Overridden_By_EnterpriseMongoInCloudFoundryConfig()
        {
            // arrange
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:ConnectionString"] = "notEvenValidConnectionString-iHopeYouKnowBestWhatWorksForYou!"
            };

            // add environment variables as Cloud Foundry would
            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", MongoDbTestHelpers.SingleServer_Enterprise_VCAP);

            // add settings to config
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            configurationBuilder.AddEnvironmentVariables();
            configurationBuilder.AddCloudFoundry();
            var config = configurationBuilder.Build();

            // act
            var sconfig = new MongoDbConnectorOptions(config);

            // assert
            Assert.NotEqual(appsettings["mongodb:client:ConnectionString"], sconfig.ToString());

            // NOTE: for this test, we don't expect VCAP_SERVICES to be parsed,
            //          this test is only here to demonstrate that when a binding is present,
            //          a pre-supplied connectionString is not returned
        }
Example #3
0
        /// <summary>
        /// Adds MongoDb classes (MongoClient, IMongoClient and MongoUrl) to your Autofac Container
        /// </summary>
        /// <param name="container">Your Autofac Container Builder</param>
        /// <param name="config">Application configuration</param>
        /// <param name="serviceName">Cloud Foundry service name binding</param>
        /// <returns>the RegistrationBuilder for (optional) additional configuration</returns>
        public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterMongoDbConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            MongoDbServiceInfo info = serviceName == null
                ? config.GetSingletonServiceInfo <MongoDbServiceInfo>()
                : config.GetRequiredServiceInfo <MongoDbServiceInfo>(serviceName);

            var mongoOptions  = new MongoDbConnectorOptions(config);
            var clientFactory = new MongoDbConnectorFactory(info, mongoOptions, MongoDbTypeLocator.MongoClient);
            var urlFactory    = new MongoDbConnectorFactory(info, mongoOptions, MongoDbTypeLocator.MongoUrl);

            container.Register(c => urlFactory.Create(null)).As(MongoDbTypeLocator.MongoUrl);
            container.Register(c => new MongoDbHealthContributor(clientFactory, c.ResolveOptional <ILogger <MongoDbHealthContributor> >())).As <IHealthContributor>();

            return(container.Register(c => clientFactory.Create(null)).As(MongoDbTypeLocator.IMongoClient, MongoDbTypeLocator.MongoClient));
        }
        public void ConnectionString_Overridden_By_A9sinCloudFoundryConfig()
        {
            // arrange
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:ConnectionString"] = "notEvenValidConnectionString-iHopeYouKnowBestWhatWorksForYou!"
            };

            // add environment variables as Cloud Foundry would
            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", MongoDbTestHelpers.SingleBinding_a9s_SingleServer_VCAP);

            // add settings to config
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            configurationBuilder.AddEnvironmentVariables();
            configurationBuilder.AddCloudFoundry();
            var config = configurationBuilder.Build();

            // act
            var sconfig = new MongoDbConnectorOptions(config);

            // assert
            Assert.NotEqual(appsettings["mongodb:client:ConnectionString"], sconfig.ToString());
        }
Example #5
0
        public void Constructor_ThrowsIfConfigNull()
        {
            MongoDbConnectorOptions config = null;
            MongoDbServiceInfo      si     = null;

            var ex = Assert.Throws <ArgumentNullException>(() => new MongoDbConnectorFactory(si, config, MongoDbTypeLocator.MongoClient));

            Assert.Contains(nameof(config), ex.Message);
        }
        public void Is_Connected_Returns_Up_Status()
        {
            var mongoDbConfig = new MongoDbConnectorOptions();
            var sInfo         = new MongoDbServiceInfo("MyId", "mongodb://localhost:27017");
            var logrFactory   = new LoggerFactory();
            var connFactory   = new MongoDbConnectorFactory(sInfo, mongoDbConfig, mongoDbImplementationType);
            var h             = new MongoDbHealthContributor(connFactory, logrFactory.CreateLogger <MongoDbHealthContributor>());

            var status = h.Health();

            Assert.Equal(HealthStatus.UP, status.Status);
        }
        public void Not_Connected_Returns_Down_Status()
        {
            var mongoDbConfig = new MongoDbConnectorOptions();
            var sInfo         = new MongoDbServiceInfo("MyId", "mongodb://localhost:27018");
            var logrFactory   = new LoggerFactory();
            var connFactory   = new MongoDbConnectorFactory(sInfo, mongoDbConfig, mongoDbImplementationType);
            var h             = new MongoDbHealthContributor(connFactory, logrFactory.CreateLogger <MongoDbHealthContributor>(), 1);

            var status = h.Health();

            Assert.Equal(HealthStatus.DOWN, status.Status);
            Assert.Equal("Failed to open MongoDb connection!", status.Description);
        }
Example #8
0
        public void Create_ReturnsMongoDbConnection()
        {
            var config = new MongoDbConnectorOptions()
            {
                Server   = "localhost",
                Port     = 27016,
                Password = "******",
                Username = "******",
            };
            var si         = new MongoDbServiceInfo("MyId", "mongodb://localhost:27017");
            var factory    = new MongoDbConnectorFactory(si, config, MongoDbTypeLocator.MongoClient);
            var connection = factory.Create(null);

            Assert.NotNull(connection);
        }
Example #9
0
        public void ConnectionString_Returned_AsConfigured()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:ConnectionString"] = "notEvenValidConnectionString-iHopeYouKnowBestWhatWorksForYou!"
            };
            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new MongoDbConnectorOptions(config);

            Assert.Equal(appsettings["mongodb:client:ConnectionString"], sconfig.ToString());
        }
        public Connection Get(IConfiguration configuration, string serviceName)
        {
            var info = serviceName == null
               ? configuration.GetSingletonServiceInfo <MongoDbServiceInfo>()
               : configuration.GetRequiredServiceInfo <MongoDbServiceInfo>(serviceName);

            var mongoConfig = new MongoDbConnectorOptions(configuration);
            var configurer  = new MongoDbProviderConfigurer();

            return(new Connection
            {
                ConnectionString = configurer.Configure(info, mongoConfig),
                Name = "MongoDb" + serviceName?.Insert(0, "-")
            });
        }
Example #11
0
        public void Configure_NoServiceInfo_ReturnsExpected()
        {
            MongoDbConnectorOptions config = new MongoDbConnectorOptions()
            {
                Server   = "localhost",
                Port     = 1234,
                Username = "******",
                Password = "******",
                Database = "database"
            };

            MongoDbProviderConfigurer configurer = new MongoDbProviderConfigurer();
            var opts = configurer.Configure(null, config);

            Assert.Equal("mongodb://*****:*****@localhost:1234/database", opts);
        }
Example #12
0
        public void Options_Included_InConnectionString()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:options:someKey"]      = "someValue",
                ["mongodb:client:options:someOtherKey"] = "someOtherValue"
            };

            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new MongoDbConnectorOptions(config);

            Assert.Equal("mongodb://localhost:27017?someKey=someValue&someOtherKey=someOtherValue", sconfig.ToString());
        }
        public void UpdateConfiguration_WithNullMongoDbServiceInfo_ReturnsExpected()
        {
            var configurer = new MongoDbProviderConfigurer();
            var config = new MongoDbConnectorOptions()
            {
                Server = "localhost",
                Port = 1234,
                Username = "******",
                Password = "******",
                Database = "database"
            };
            configurer.UpdateConfiguration(null, config);

            Assert.Equal("localhost", config.Server);
            Assert.Equal(1234, config.Port);
            Assert.Equal("username", config.Username);
            Assert.Equal("password", config.Password);
            Assert.Equal("database", config.Database);
            Assert.Null(config.ConnectionString);
        }
Example #14
0
        public void UpdateConfiguration_WithMongoDbServiceInfo_ReturnsExpected()
        {
            MongoDbProviderConfigurer configurer = new MongoDbProviderConfigurer();
            MongoDbConnectorOptions   config     = new MongoDbConnectorOptions()
            {
                Server   = "localhost",
                Port     = 1234,
                Username = "******",
                Password = "******",
                Database = "database"
            };
            MongoDbServiceInfo si = new MongoDbServiceInfo("MyId", "mongodb://*****:*****@192.168.0.90:27017/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355");

            configurer.UpdateConfiguration(si, config);

            Assert.Equal("192.168.0.90", config.Server);
            Assert.Equal(27017, config.Port);
            Assert.Equal("Dd6O1BPXUHdrmzbP", config.Username);
            Assert.Equal("7E1LxXnlH2hhlPVt", config.Password);
            Assert.Equal("cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", config.Database);
        }
        public void Constructor_BindsValues()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["mongodb:client:server"]   = "localhost",
                ["mongodb:client:port"]     = "1234",
                ["mongodb:client:password"] = "******",
                ["mongodb:client:username"] = "******"
            };

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new MongoDbConnectorOptions(config);

            Assert.Equal("localhost", sconfig.Server);
            Assert.Equal(1234, sconfig.Port);
            Assert.Equal("password", sconfig.Password);
            Assert.Equal("username", sconfig.Username);
            Assert.Null(sconfig.ConnectionString);
        }
Example #16
0
        public void Configure_ServiceInfoOveridesConfig_ReturnsExpected()
        {
            MongoDbConnectorOptions config = new MongoDbConnectorOptions()
            {
                Server   = "localhost",
                Port     = 1234,
                Username = "******",
                Password = "******",
                Database = "database"
            };

            MongoDbProviderConfigurer configurer = new MongoDbProviderConfigurer();
            MongoDbServiceInfo        si         = new MongoDbServiceInfo("MyId", "mongodb://*****:*****@192.168.0.90:27017/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355");

            var opts = configurer.Configure(si, config);

            Assert.Equal("mongodb://*****:*****@192.168.0.90:27017/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", opts);
            Assert.DoesNotContain("localhost", opts);
            Assert.DoesNotContain("1234", opts);
            Assert.DoesNotContain("username", opts);
            Assert.DoesNotContain("password", opts);
            Assert.DoesNotContain("database", opts);
        }