public void TemporarySqlLocalDbInstance_Constructor_Creates_Temporary_Instance_With_Specified_Provider_And_Does_Not_Delete_Instance_Files()
        {
            // Arrange
            var mock = new Mock <SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            string             instanceName = "MyTempInstance" + Guid.NewGuid().ToString();
            SqlLocalDbProvider provider     = mock.Object;
            bool deleteFiles = false;

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider, deleteFiles))
            {
                // Assert
                Mock.Get(provider).Verify((p) => p.CreateInstance(instanceName), Times.Once());

                Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                // Check the instance was created
                AssertExistence(instanceName, exists: true);

                // The instance is not running if there is no pipe open
                Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                Assert.AreEqual(deleteFiles, target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
            }

            // The instance should have been deleted
            AssertExistence(instanceName, exists: false);
            AssertFileExistence(instanceName, shouldFilesExist: true);
        }
Example #2
0
        public void TemporarySqlLocalDbInstance_Create_Creates_Temporary_Instance_With_Random_Name()
        {
            string instanceName;

            // Act
            using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
            {
                // Assert
                Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                instanceName = target.Instance.Name;

                Assert.IsTrue(Guid.TryParse(instanceName, out Guid unused), "The random instance name is not a valid GUID.");

                // Check the instance was created
                AssertExistence(instanceName, exists: true);

                // The instance is not running if there is no pipe open
                Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                Assert.IsFalse(target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
            }

            // The instance should have been deleted
            AssertExistence(instanceName, exists: false);
            AssertFileExistence(instanceName, shouldFilesExist: true);

            // Verify that the same random name isn't used again
            using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
            {
                Assert.AreNotEqual(instanceName, target.Instance.Name, "The same random name was used to generate a temporary instance.");
            }
        }
        public void TemporarySqlLocalDbInstance_Dispose_Does_Not_Throw_If_Instance_Cannot_Be_Stopped_Due_To_Sql_LocalDb_Error()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            var mock = new Mock <SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            // Set up the CreateInstance() method to create an SQL LocalDB
            // instance but that then throws an exception when stopped.
            mock.Setup((p) => p.CreateInstance(instanceName))
            .Returns(
                () =>
            {
                SqlLocalDbApi.CreateInstance(instanceName);
                return(new SqlLocalDbInstanceThatCannotBeStopped(instanceName));
            })
            .Verifiable();

            ISqlLocalDbProvider provider = mock.Object;

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
            {
            }

            // Assert
            mock.Verify();

            // Tidy up as the stop intentionally failed, meaning delete would also have failed
            SqlLocalDbApi.StopInstance(instanceName);
            SqlLocalDbApi.DeleteInstance(instanceName);
        }
        public void TestFixtureSetUp()
        {
            if (!SqlLocalDbApi.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.databaseName = "SqlServerClientManagerTests" + Guid.NewGuid().ToString("N");

            // Configure dapper to support datetime2
            SqlMapper.AddTypeMap(typeof(DateTime), DbType.DateTime2);

            // Create test instance
            this.instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            // Seed test data
            using (var connection = this.instance.CreateConnection())
            {
                connection.Open();

                try
                {
                    connection.Execute("CREATE DATABASE " + this.databaseName);
                    connection.Execute("USE " + this.databaseName);
                    connection.Execute("CREATE TABLE Clients (ClientId VARCHAR(255) NOT NULL PRIMARY KEY, ClientSecret VARCHAR(MAX) NOT NULL, RedirectUri VARCHAR(255) NOT NULL, Name NVARCHAR(255) NOT NULL, LastUsed DATETIME2, Enabled bit)");
                    connection.Execute("INSERT INTO Clients (ClientId, ClientSecret, RedirectUri, Name, Enabled) VALUES ('NUnit', '10000:gW7zpVeugKl8IFu7TcpPskcgQjy4185eAwBk9fFlZK6JNd1I45tLyCYtJrzWzE+kVCUP7lMSY8o808EjUgfavBzYU/ZtWypcdCdCJ0BMfMcf8Mk+XIYQCQLiFpt9Rjrf5mAY86NuveUtd1yBdPjxX5neMXEtquNYhu9I6iyzcN4=:Lk2ZkpmTDkNtO/tsB/GskMppdAX2bXehP+ED4oLis0AAv3Q1VeI8KL0SxIIWdxjKH0NJKZ6qniRFkfZKZRS2hS4SB8oyB34u/jyUlmv+RZGZSt9nJ9FYJn1percd/yFA7sSQOpkGljJ6OTwdthe0Bw0A/8qlKHbO2y2M5BFgYHY=', 'http://localhost', 'NUnit Test', 1)");
                    connection.Execute("INSERT INTO Clients (ClientId, ClientSecret, RedirectUri, Name) VALUES ('NUnit2', '10000:gW7zpVeugKl8IFu7TcpPskcgQjy4185eAwBk9fFlZK6JNd1I45tLyCYtJrzWzE+kVCUP7lMSY8o808EjUgfavBzYU/ZtWypcdCdCJ0BMfMcf8Mk+XIYQCQLiFpt9Rjrf5mAY86NuveUtd1yBdPjxX5neMXEtquNYhu9I6iyzcN4=:Lk2ZkpmTDkNtO/tsB/GskMppdAX2bXehP+ED4oLis0AAv3Q1VeI8KL0SxIIWdxjKH0NJKZ6qniRFkfZKZRS2hS4SB8oyB34u/jyUlmv+RZGZSt9nJ9FYJn1percd/yFA7sSQOpkGljJ6OTwdthe0Bw0A/8qlKHbO2y2M5BFgYHY=', 'http://localhost', 'NUnit2 Test')");
                }
                finally
                {
                    connection.Close();
                }
            }
        }
        public void TestFixtureSetUp()
        {
            var localDb = new SqlLocalDbApiWrapper();

            if (!localDb.IsLocalDBInstalled())
            {
                throw new Exception("LocalDB is not installed!");
            }

            this.instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            // Initialize database
            var strategy = new DropCreateDatabaseAlways<SentinelContext>();
            Database.SetInitializer(strategy);

            var builder = this.instance.CreateConnectionStringBuilder();

            // Update the connection string to specify the name of the database
            // and its physical location to the current application directory
            builder.SetInitialCatalogName("SentinelAuth");
            builder.SetPhysicalFileName(@".\SentinelAuth.mdf");

            this.connectionString = builder.ConnectionString;

            using (var context = new SentinelContext(this.connectionString))
            {
                context.Database.Initialize(true);
            }
        }
        public void TemporarySqlLocalDbInstance_Constructor_Creates_Temporary_Instance()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName))
            {
                // Assert
                Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                // Check the instance was created
                AssertExistence(instanceName, exists: true);

                // The instance is not running if there is no pipe open
                Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                Assert.IsFalse(target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
            }

            // The instance should have been deleted
            AssertExistence(instanceName, exists: false);
            AssertFileExistence(instanceName, shouldFilesExist: true);
        }
Example #7
0
        public SqlServerTests()
        {
            _instance = TemporarySqlLocalDbInstance.Create(deleteFiles: true);

            _connection = _instance.CreateConnection();
            _connection.Open();

            _database = new Database(_connection);

            _database.Execute("create database [SqlServerTests]");
        }
        public void TemporarySqlLocalDbInstance_GetInstanceInfo_Returns_ISqlLocalDbInstanceInfo()
        {
            // Arrange
            using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
            {
                // Act
                ISqlLocalDbInstanceInfo result = target.GetInstanceInfo();

                // Assert
                Assert.IsNotNull(result, "GetInstanceInfo() returned null.");
            }
        }
        public void TemporarySqlLocalDbInstance_CreateConnectionStringBuilder_Creates_SqlConnectionStringBuilder()
        {
            // Arrange
            using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
            {
                // Act
                SqlConnectionStringBuilder result = target.CreateConnectionStringBuilder();

                // Assert
                Assert.IsNotNull(result, "CreateConnectionStringBuilder() returned null.");
            }
        }
 public void TemporarySqlLocalDbInstance_CreateConnection_Creates_Connection()
 {
     // Arrange
     using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
     {
         // Act
         using (SqlConnection result = target.CreateConnection())
         {
             // Assert
             Assert.IsNotNull(result, "CreateConnection() returned null.");
         }
     }
 }
        private static void AssertThrowsObjectDisposedException(Action <TemporarySqlLocalDbInstance> action)
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                target.Dispose();

                // Act
                action(target);
            }
        }
        public void TemporarySqlLocalDbInstance_Unshare_Invokes_Wrapped_Instance()
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                // Act
                target.Unshare();

                // Assert
                Mock.Get(instance).Verify((p) => p.Unshare(), Times.Once());
            }
        }
        public void TemporarySqlLocalDbInstance_Constructor_Throws_If_Provider_Is_Null()
        {
            // Arrange
            string instanceName          = Guid.NewGuid().ToString();
            ISqlLocalDbProvider provider = null;

            // Act and Assert
            throw ErrorAssert.Throws <ArgumentNullException>(
                      () =>
            {
                using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
                {
                }
            },
                      "provider");
        }
        public void TemporarySqlLocalDbInstance_Share_Invokes_Wrapped_Instance()
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                string sharedName = Guid.NewGuid().ToString();

                // Act
                target.Share(sharedName);

                // Assert
                Mock.Get(instance).Verify((p) => p.Share(sharedName), Times.Once());
            }
        }
        public void TemporarySqlLocalDbInstance_Constructor_Throws_If_InstanceName_Is_Null()
        {
            // Arrange
            string instanceName          = null;
            ISqlLocalDbProvider provider = Mock.Of <ISqlLocalDbProvider>();

            // Act and Assert
            throw ErrorAssert.Throws <ArgumentNullException>(
                      () =>
            {
                using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
                {
                }
            },
                      "instanceName");
        }
        public void TemporarySqlLocalDbInstance_Create_Creates_Temporary_Instance_With_Random_Name_And_Deletes_If_SqlLocalDbApi_AutomaticallyDeleteInstanceFiles_Is_True()
        {
            // Arrange
            Helpers.InvokeInNewAppDomain(
                () =>
            {
                SqlLocalDbApi.AutomaticallyDeleteInstanceFiles = true;
                SqlLocalDbApi.StopOptions = StopInstanceOptions.NoWait;

                string instanceName;

                // Act
                using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
                {
                    // Assert
                    Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                    instanceName = target.Instance.Name;

                    Guid notUsed;
                    Assert.IsTrue(Guid.TryParse(instanceName, out notUsed), "The random instance name is not a valid GUID.");

                    // Check the instance was created
                    AssertExistence(instanceName, exists: true);

                    // The instance is not running if there is no pipe open
                    Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                    Assert.IsTrue(target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                    Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                    Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
                }

                // The instance should have been deleted
                AssertExistence(instanceName, exists: false);
                AssertFileExistence(instanceName, shouldFilesExist: false);

                // Verify that the same random name isn't used again
                using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create())
                {
                    Assert.AreNotEqual(instanceName, target.Instance.Name, "The same random name was used to generate a temporary instance.");
                }
            });
        }
        public void TemporarySqlLocalDbInstance_Constructor_Attempts_To_Delete_Instance_If_Instance_Cannot_Be_Started()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            var mock = new Mock <SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            // Set up the CreateInstance() method to create an SQL LocalDB
            // instance but that then throws an exception when started.
            mock.Setup((p) => p.CreateInstance(instanceName))
            .Returns(
                () =>
            {
                SqlLocalDbApi.CreateInstance(instanceName);
                return(new SqlLocalDbInstanceThatCannotBeStarted(instanceName));
            })
            .Verifiable();

            ISqlLocalDbProvider provider = mock.Object;
            bool deleteFiles             = false;

            // Act
            InvalidOperationException error = ErrorAssert.Throws <InvalidOperationException>(
                () =>
            {
                using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider, deleteFiles))
                {
                }
            });

            mock.Verify();

            ISqlLocalDbInstanceInfo instanceInfo = SqlLocalDbApi.GetInstanceInfo(instanceName);

            Assert.IsFalse(instanceInfo.Exists, "The temporary instance was not deleted.");

            throw error;
        }
        public void TemporarySqlLocalDbInstance_Constructor_Attempts_To_Delete_Instance_If_Instance_Cannot_Be_Started()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            var mock = new Mock<SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            // Set up the CreateInstance() method to create an SQL LocalDB
            // instance but that then throws an exception when started.
            mock.Setup((p) => p.CreateInstance(instanceName))
                .Returns(
                    () =>
                    {
                        SqlLocalDbApi.CreateInstance(instanceName);
                        return new SqlLocalDbInstanceThatCannotBeStarted(instanceName);
                    })
                .Verifiable();

            ISqlLocalDbProvider provider = mock.Object;
            bool deleteFiles = false;

            // Act
            InvalidOperationException error = ErrorAssert.Throws<InvalidOperationException>(
                () =>
                {
                    using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider, deleteFiles))
                    {
                    }
                });

            mock.Verify();

            ISqlLocalDbInstanceInfo instanceInfo = SqlLocalDbApi.GetInstanceInfo(instanceName);

            Assert.IsFalse(instanceInfo.Exists, "The temporary instance was not deleted.");

            throw error;
        }
        public void TemporarySqlLocalDbInstance_Create_With_DeleteFiles_Parameter_Creates_Temporary_Instance_With_Random_Name_And_Deletes_Files_When_Disposed()
        {
            // Arrange
            Helpers.InvokeInNewAppDomain(
                () =>
            {
                // Set the property to false to ensure that the parameter is used to control deletion not the property
                SqlLocalDbApi.AutomaticallyDeleteInstanceFiles = false;
                SqlLocalDbApi.StopOptions = StopInstanceOptions.NoWait;

                string instanceName;
                bool deleteFiles = true;

                // Act
                using (TemporarySqlLocalDbInstance target = TemporarySqlLocalDbInstance.Create(deleteFiles))
                {
                    // Assert
                    Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                    instanceName = target.Instance.Name;

                    Guid notUsed;
                    Assert.IsTrue(Guid.TryParse(instanceName, out notUsed), "The random instance name is not a valid GUID.");

                    // Check the instance was created
                    AssertExistence(instanceName, exists: true);

                    // The instance is not running if there is no pipe open
                    Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                    Assert.IsTrue(target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                    Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                    Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
                }

                // The instance should have been deleted
                AssertExistence(instanceName, exists: false);
                AssertFileExistence(instanceName, shouldFilesExist: false);
            });
        }
        public void TemporarySqlLocalDbInstance_Constructor_Creates_Temporary_Instance()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName))
            {
                // Assert
                Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                // Check the instance was created
                AssertExistence(instanceName, exists: true);

                // The instance is not running if there is no pipe open
                Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                Assert.IsFalse(target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
            }

            // The instance should have been deleted
            AssertExistence(instanceName, exists: false);
            AssertFileExistence(instanceName, shouldFilesExist: true);
        }
        private static void AssertThrowsObjectDisposedException(Action<TemporarySqlLocalDbInstance> action)
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                target.Dispose();

                // Act
                action(target);
            }
        }
        public void TemporarySqlLocalDbInstance_Unshare_Invokes_Wrapped_Instance()
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                // Act
                target.Unshare();

                // Assert
                Mock.Get(instance).Verify((p) => p.Unshare(), Times.Once());
            }
        }
        public void TemporarySqlLocalDbInstance_Share_Invokes_Wrapped_Instance()
        {
            // Arrange
            ISqlLocalDbInstance instance = CreateMockInstance();

            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instance))
            {
                string sharedName = Guid.NewGuid().ToString();

                // Act
                target.Share(sharedName);

                // Assert
                Mock.Get(instance).Verify((p) => p.Share(sharedName), Times.Once());
            }
        }
        public void TemporarySqlLocalDbInstance_Dispose_Does_Not_Throw_If_Instance_Cannot_Be_Stopped_Due_To_Sql_LocalDb_Error()
        {
            // Arrange
            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();

            var mock = new Mock<SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            // Set up the CreateInstance() method to create an SQL LocalDB
            // instance but that then throws an exception when stopped.
            mock.Setup((p) => p.CreateInstance(instanceName))
                .Returns(
                    () =>
                    {
                        SqlLocalDbApi.CreateInstance(instanceName);
                        return new SqlLocalDbInstanceThatCannotBeStopped(instanceName);
                    })
                .Verifiable();

            ISqlLocalDbProvider provider = mock.Object;

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
            {
            }

            // Assert
            mock.Verify();

            // Tidy up as the stop intentionally failed, meaning delete would also have failed
            SqlLocalDbApi.StopInstance(instanceName);
            SqlLocalDbApi.DeleteInstance(instanceName);
        }
        public void TemporarySqlLocalDbInstance_Constructor_Throws_If_Provider_Is_Null()
        {
            // Arrange
            string instanceName = Guid.NewGuid().ToString();
            ISqlLocalDbProvider provider = null;

            // Act and Assert
            throw ErrorAssert.Throws<ArgumentNullException>(
                () =>
                {
                    using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
                    {
                    }
                },
                "provider");
        }
        public void TemporarySqlLocalDbInstance_Constructor_Throws_If_InstanceName_Is_Null()
        {
            // Arrange
            string instanceName = null;
            ISqlLocalDbProvider provider = Mock.Of<ISqlLocalDbProvider>();

            // Act and Assert
            throw ErrorAssert.Throws<ArgumentNullException>(
                () =>
                {
                    using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider))
                    {
                    }
                },
                "instanceName");
        }
        public void TemporarySqlLocalDbInstance_Constructor_Creates_Temporary_Instance_With_Specified_Provider_And_Does_Not_Delete_Instance_Files()
        {
            // Arrange
            var mock = new Mock<SqlLocalDbProvider>()
            {
                CallBase = true,
            };

            string instanceName = "MyTempInstance" + Guid.NewGuid().ToString();
            SqlLocalDbProvider provider = mock.Object;
            bool deleteFiles = false;

            // Act
            using (TemporarySqlLocalDbInstance target = new TemporarySqlLocalDbInstance(instanceName, provider, deleteFiles))
            {
                // Assert
                Mock.Get(provider).Verify((p) => p.CreateInstance(instanceName), Times.Once());

                Assert.IsNotNull(target.Instance, "TemporarySqlLocalDbInstance.Instance is null.");

                // Check the instance was created
                AssertExistence(instanceName, exists: true);

                // The instance is not running if there is no pipe open
                Assert.IsFalse(string.IsNullOrEmpty(target.Instance.NamedPipe), "The temporary SQL LocalDB instance has not been started.");

                Assert.AreEqual(deleteFiles, target.DeleteFiles, "TemporarySqlLocalDbInstance.DeleteFiles is incorrect.");
                Assert.AreEqual(target.Instance.Name, target.Name, "TemporarySqlLocalDbInstance.Name is incorrect.");
                Assert.AreEqual(target.Instance.NamedPipe, target.NamedPipe, "TemporarySqlLocalDbInstance.NamedPipe is incorrect.");
            }

            // The instance should have been deleted
            AssertExistence(instanceName, exists: false);
            AssertFileExistence(instanceName, shouldFilesExist: true);
        }