Beispiel #1
0
        public void SqlLocalDbProvider_As_ISqlLocalDbFactory_GetInstance_Returns_Specified_Instance()
        {
            // Arrange
            Helpers.EnsureLocalDBInstalled();

            ISqlLocalDbProvider target = new SqlLocalDbProvider();
            string instanceName        = Guid.NewGuid().ToString();

            // Act
            SqlLocalDbApi.CreateInstance(instanceName);

            try
            {
                // Assert
                ISqlLocalDbInstance result = target.GetInstance(instanceName);

                Assert.IsNotNull(result, "CreateInstance() returned null.");
                Assert.AreEqual(instanceName, result.Name, "SqlLocalDbInstance.Name is incorrect.");

                ISqlLocalDbInstanceInfo info = result.GetInstanceInfo();

                Assert.IsTrue(info.Exists, "ISqlLocalDbInstanceInfo.Exists is incorrect.");
                Assert.IsFalse(info.IsRunning, "ISqlLocalDbInstanceInfo.IsRunning is incorrect.");

                Assert.IsTrue(Guid.TryParse(result.Name, out Guid unused), "SqlLocalDbInstance.Name is not a valid GUID.");
            }
            finally
            {
                SqlLocalDbApi.DeleteInstance(instanceName);
            }
        }
        /// <summary>
        /// Creates a new open connection to the configured SQLServer instance.
        /// </summary>
        /// <returns>A newly opened SqlConnection.</returns>
        public SqlConnection CreateConnection()
        {
            ProviderConfiguration config =
                (ProviderConfiguration)ConfigurationManager.GetSection("dbTestMonkey/" + ConfigurationSectionName);

            if (string.IsNullOrWhiteSpace(config.ConnectionString) && !config.IsLocalDbInstance)
            {
                string errorMessage =
                    "Configured connection string was empty or whitespace and database has not been configured as localdb. " +
                    "Connection string is required in this instance.";
                throw new InvalidOperationException(errorMessage);
            }

            SqlConnection connection = null;

            if (config.IsLocalDbInstance)
            {
                if (!string.IsNullOrWhiteSpace(config.ConnectionString))
                {
                    connection = new SqlConnection(config.ConnectionString);
                }
                else if (!string.IsNullOrWhiteSpace(config.LocalDbInstanceName))
                {
                    var localDbProvider = new System.Data.SqlLocalDb.SqlLocalDbProvider();

                    connection = localDbProvider.GetInstance(config.LocalDbInstanceName).CreateConnection();
                }
                else
                {
                    throw new InvalidOperationException(
                              "IsLocalDbInstance was true in configuration but no instance name or connection string was configured.");
                }

                connection.Open();
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(config.ConnectionString))
                {
                    connection = new SqlConnection(config.ConnectionString);
                    connection.Open();
                }
                else
                {
                    throw new InvalidOperationException(
                              "IsLocalDbInstance was false in configuration but no connection string was configured.");
                }
            }

            return(connection);
        }
        private void CleanupLocalDbDatabase()
        {
            SqlLocalDbApi.AutomaticallyDeleteInstanceFiles = true;
            SqlLocalDbApi.StopOptions=StopInstanceOptions.KillProcess;

            var localDbProvider = new SqlLocalDbProvider();
            var localDbInstanceInfo = localDbProvider.GetInstances().FirstOrDefault(instance => instance.Name==DatabaseName);
            if (localDbInstanceInfo != null)
            {
                var localDbInstance = localDbProvider.GetInstance(DatabaseName);
                if (!localDbInstance.IsRunning)
                {
                    localDbInstance.Start();
                }
                this.CleanupMsSqlDatabase(localDbInstance.CreateConnectionStringBuilder().ConnectionString);
                SqlLocalDbApi.StopInstance(DatabaseName,TimeSpan.FromSeconds(20.0));
                SqlLocalDbApi.DeleteInstance(DatabaseName);
            }
        }
        public void SqlLocalDbProvider_As_ISqlLocalDbFactory_GetInstance_Returns_Specified_Instance()
        {
            // Arrange
            Helpers.EnsureLocalDBInstalled();

            ISqlLocalDbProvider target = new SqlLocalDbProvider();
            string instanceName = Guid.NewGuid().ToString();

            // Act
            SqlLocalDbApi.CreateInstance(instanceName);

            try
            {
                // Assert
                ISqlLocalDbInstance result = target.GetInstance(instanceName);

                Assert.IsNotNull(result, "CreateInstance() returned null.");
                Assert.AreEqual(instanceName, result.Name, "SqlLocalDbInstance.Name is incorrect.");

                ISqlLocalDbInstanceInfo info = result.GetInstanceInfo();

                Assert.IsTrue(info.Exists, "ISqlLocalDbInstanceInfo.Exists is incorrect.");
                Assert.IsFalse(info.IsRunning, "ISqlLocalDbInstanceInfo.IsRunning is incorrect.");

                Guid guid;
                Assert.IsTrue(Guid.TryParse(result.Name, out guid), "SqlLocalDbInstance.Name is not a valid GUID.");
            }
            finally
            {
                SqlLocalDbApi.DeleteInstance(instanceName);
            }
        }