public void CalculateChecksum_should_not_return_null() { var script = new FileMigrationScript(TestContext.ValidMigrationScriptPath, "2.3.1", "Migration description"); string checksum = script.CalculateChecksum(); Assert.False(string.IsNullOrEmpty(checksum)); }
public void GetAllMigrationMetadata_works() { var migrationScript = new FileMigrationScript(TestContext.ValidMigrationScriptPath, "1.0.0", "desc"); using (var connection = TestUtil.CreateSQLiteWrappedCnx()) { var db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.SQLite, connection); var metadataTable = db.GetMetadataTable("", TestContext.DefaultMetadataTableName); metadataTable.SaveMigration(migrationScript, true); var migrationMetadata = metadataTable.GetAllMigrationMetadata().First(); Assert.Equal(migrationScript.Description, migrationMetadata.Description); Assert.Equal(migrationScript.Name, migrationMetadata.Name); Assert.Equal(migrationScript.CalculateChecksum(), migrationMetadata.Checksum); Assert.Equal(migrationScript.Version, migrationMetadata.Version); Assert.True(migrationMetadata.Success); Assert.Equal(string.Empty, migrationMetadata.InstalledBy); Assert.True(migrationMetadata.Id > 0); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date); } }
public void Run_all_SQLServer_integration_tests_work() { // Open a connection to the SQLServer database var cnn = new SqlConnection($"Server=127.0.0.1;Database={DbName};User Id={_sqlServerFixture.DbUser};Password={_sqlServerFixture.DbPwd};"); cnn.Open(); Assert.True(cnn.State == ConnectionState.Open, "Cannot open a connection to the database."); // Initiate a connection to the database var wcnn = new WrappedConnection(cnn); // Validate DBMS.SQLServer Assert.Equal(DBMS.SQLServer, wcnn.GetDatabaseServerType()); // Init the DatabaseHelper DatabaseHelper db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.SQLServer, wcnn); // Get default schema name string metadataSchemaName = db.GetCurrentSchemaName(); Assert.True(metadataSchemaName == "dbo", "The default SQLServer schema should be 'dbo'."); // Get MetadataTable string metadataTableName = "changelog"; var metadata = db.GetMetadataTable(metadataSchemaName, metadataTableName); // Create MetadataTable Assert.False(metadata.IsExists(), "MetadataTable sould not already exist."); Assert.True(metadata.CreateIfNotExists(), "MetadataTable creation failed."); Assert.True(metadata.IsExists(), "MetadataTable sould exist."); Assert.False(metadata.CreateIfNotExists(), "MetadataTable already exists. Creation should return false."); Assert.True(metadata.GetAllMigrationMetadata().Count() == 0, "No migration metadata should be found."); // Lock MetadataTable metadata.Lock(); // Save EmptySchema metadata metadata.Save(MetadataType.EmptySchema, "0", "Empty schema found.", metadataSchemaName); Assert.False(metadata.CanDropSchema(metadataSchemaName), $"[{metadataSchemaName}] should not be droppable."); Assert.True(metadata.CanEraseSchema(metadataSchemaName), $"[{metadataSchemaName}] should be erasable."); // Add metadata migration var migrationScript = new FileMigrationScript(TestContext.EmptyMigrationScriptPath, "1_3_2", "Migration_description"); metadata.SaveMigration(migrationScript, true); var migrationMetadata = metadata.GetAllMigrationMetadata().FirstOrDefault(); Assert.True(migrationMetadata != null, "One migration metadata should be found."); Assert.True(migrationMetadata.Version == migrationScript.Version, "Metadata version is not the same."); Assert.True(migrationMetadata.Checksum == migrationScript.CalculateChecksum(), "Metadata checksum is not the same."); Assert.True(migrationMetadata.Description == migrationScript.Description, "Metadata descritpion is not the same."); Assert.True(migrationMetadata.Name == migrationScript.Name, "Metadata name is not the same."); Assert.True(migrationMetadata.Success == true, "Metadata success is not true."); Assert.True(migrationMetadata.Id > 0, "Metadata id is not set."); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date, "Installed date is not set."); // Update checksum metadata.UpdateChecksum(migrationMetadata.Id, "Hi !"); Assert.Equal("Hi !", metadata.GetAllMigrationMetadata().First().Checksum); // Assert metadata schema is not empty Schema metadataSchema = new SQLServerSchema(metadataSchemaName, wcnn); Assert.False(metadataSchema.IsEmpty(), $"[{metadataSchemaName}] should not be empty."); // Erase schema metadataSchema.Erase(); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataSchemaName}] should be empty."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should exist."); // Acquisition du lock applicatif while (true) { if (db.TryAcquireApplicationLock()) { break; } Thread.Sleep(TimeSpan.FromSeconds(1)); } Assert.True(db.TryAcquireApplicationLock(), "Cannot acquire application lock."); // Can not acquire lock while it is taken by another connection var cnn2 = new SqlConnection($"Server=127.0.0.1;Database={DbName};User Id={_sqlServerFixture.DbUser};Password={_sqlServerFixture.DbPwd};"); var wcnn2 = new WrappedConnection(cnn2); var db2 = DatabaseHelperFactory.GetDatabaseHelper(DBMS.SQLServer, wcnn2); Assert.False(db2.TryAcquireApplicationLock(), "Application lock could not have been acquired."); // Release the lock db.ReleaseApplicationLock(); db.CloseConnection(); Assert.True(db.WrappedConnection.DbConnection.State == ConnectionState.Closed, "SQL connection should be closed."); }
public void Run_all_Cassandra_integration_tests_work() { // Open a connection to Cassandra var cnn = new CqlConnection($"Contact Points=127.0.0.1;Port={_cassandraFixture.Cassandra.HostPort};Cluster Name={_cassandraFixture.Cassandra.ClusterName}"); cnn.Open(); Assert.True(cnn.State == ConnectionState.Open, "Cannot open a connection to Cassandra."); // Initiate a connection to the database var wcnn = new WrappedConnection(cnn); // Validate DBMS.Cassandra Assert.Equal(DBMS.Cassandra, wcnn.GetDatabaseServerType()); // Init the DatabaseHelper var db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.Cassandra, wcnn); // Create schema string metadataKeyspaceName = "my_metadata_keyspace"; Schema metadataSchema = new CassandraKeyspace(metadataKeyspaceName, CassandraKeyspace.CreateSimpleStrategy(1), wcnn); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should not already exist."); Assert.True(metadataSchema.Create(), $"Creation of the schema [{metadataKeyspaceName}] failed."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should be created."); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataKeyspaceName}] should be empty."); var s = db.GetSchema("my_metadata_keyspace"); // Get MetadataTable string metadataTableName = "change_log"; var metadata = db.GetMetadataTable(metadataKeyspaceName, metadataTableName); // Create MetadataTable Assert.False(metadata.IsExists(), "MetadataTable sould not already exist."); Assert.True(metadata.CreateIfNotExists(), "MetadataTable creation failed."); Assert.True(metadata.IsExists(), "MetadataTable sould exist."); Assert.False(metadata.CreateIfNotExists(), "MetadataTable already exists. Creation should return false."); Assert.True(metadata.GetAllMigrationMetadata().Count() == 0, "No migration metadata should be found."); // Lock MetadataTable metadata.Lock(); // Save NewSchema metadata metadata.Save(MetadataType.NewSchema, "0", "New schema created.", metadataKeyspaceName); Assert.True(metadata.CanDropSchema(metadataKeyspaceName), $"[{metadataKeyspaceName}] should be droppable."); Assert.False(metadata.CanEraseSchema(metadataKeyspaceName), $"[{metadataKeyspaceName}] should not be erasable."); // Add metadata migration var migrationScript = new FileMigrationScript(TestContext.EmptyMigrationScriptPath, "1_3_2", "Migration_description"); metadata.SaveMigration(migrationScript, true); var migrationMetadata = metadata.GetAllMigrationMetadata().FirstOrDefault(); Assert.True(migrationMetadata != null, "One migration metadata should be found."); Assert.True(migrationMetadata.Version == migrationScript.Version, "Metadata version is not the same."); Assert.True(migrationMetadata.Checksum == migrationScript.CalculateChecksum(), "Metadata checksum is not the same."); Assert.True(migrationMetadata.Description == migrationScript.Description, "Metadata descritpion is not the same."); Assert.True(migrationMetadata.Name == migrationScript.Name, "Metadata name is not the same."); Assert.True(migrationMetadata.Success == true, "Metadata success is not true."); Assert.True(migrationMetadata.Id != 0, "Metadata id is not set."); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date, $"Installed date is {migrationMetadata.InstalledOn.Date} whereas UtcNow is {DateTime.UtcNow.Date}."); // Update checksum metadata.UpdateChecksum(migrationMetadata.Id, "Hi !"); Assert.Equal("Hi !", metadata.GetAllMigrationMetadata().First().Checksum); // Assert metadata schema is not empty Assert.False(metadataSchema.IsEmpty(), $"[{metadataKeyspaceName}] should not be empty."); // Erase schema metadataSchema.Erase(); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataKeyspaceName}] should be empty."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should exist."); // Drop schema metadataSchema.Drop(); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should not exist."); }
/// <summary> /// Second part of the integration test. /// </summary> /// <remarks> /// Due to some issues running 2 Cassandra containers, one after the other, /// in the same test context, we merge the integration tests to only use one container. /// My guess, a possible Cassandra driver issue. /// </remarks> public static void Run_all_Cassandra_integration_tests_work(CassandraFixture cassandraContainer) { // Open a connection to Cassandra var cnn = cassandraContainer.CreateDbConnection(); cnn.Open(); Assert.True(cnn.State == ConnectionState.Open, "Cannot open a connection to Cassandra."); // Initiate a connection to the database var wcnn = new WrappedConnection(cnn); // Validate DBMS.Cassandra Assert.Equal(DBMS.Cassandra, wcnn.GetDatabaseServerType()); // Init the DatabaseHelper var db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.Cassandra, wcnn); // Create schema string metadataKeyspaceName = "my_keyspace_2"; Schema metadataSchema = new CassandraKeyspace(metadataKeyspaceName, CassandraKeyspace.CreateSimpleStrategy(1), wcnn); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should not already exist."); Assert.True(metadataSchema.Create(), $"Creation of the schema [{metadataKeyspaceName}] failed."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should be created."); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataKeyspaceName}] should be empty."); var s = db.GetSchema(metadataKeyspaceName); // Get MetadataTable string metadataTableName = "evolve_change_log"; var metadata = db.GetMetadataTable(metadataKeyspaceName, metadataTableName); // Create MetadataTable Assert.False(metadata.IsExists(), "MetadataTable sould not already exist."); Assert.True(metadata.CreateIfNotExists(), "MetadataTable creation failed."); Assert.True(metadata.IsExists(), "MetadataTable sould exist."); Assert.False(metadata.CreateIfNotExists(), "MetadataTable already exists. Creation should return false."); Assert.True(metadata.GetAllMigrationMetadata().Count() == 0, "No migration metadata should be found."); //Lock & Unlock //..Applicaiton level: return true if the cluster lock keyspace/table is not present Assert.True(db.TryAcquireApplicationLock()); wcnn.ExecuteNonQuery("create keyspace cluster_lock with replication = { 'class' : 'SimpleStrategy','replication_factor' : '1' }; "); Assert.True(db.TryAcquireApplicationLock()); //Still true, table is missing wcnn.ExecuteNonQuery("create table cluster_lock.lock (locked int, primary key(locked))"); Assert.True(db.TryAcquireApplicationLock()); //Still true, lock is not present wcnn.ExecuteNonQuery("insert into cluster_lock.lock (locked) values (1) using TTL 3600"); Assert.False(db.TryAcquireApplicationLock()); wcnn.ExecuteNonQuery("drop keyspace cluster_lock"); Assert.True(db.TryAcquireApplicationLock()); Assert.True(db.ReleaseApplicationLock()); Assert.True(db.ReleaseApplicationLock()); //..Table level: lock implemented with LWT on evolve metadata table Assert.True(metadata.TryLock()); Assert.False(metadata.TryLock()); Assert.True(metadata.ReleaseLock()); Assert.False(metadata.ReleaseLock()); // Save NewSchema metadata metadata.Save(MetadataType.NewSchema, "0", "New schema created.", metadataKeyspaceName); Assert.True(metadata.CanDropSchema(metadataKeyspaceName), $"[{metadataKeyspaceName}] should be droppable."); Assert.False(metadata.CanEraseSchema(metadataKeyspaceName), $"[{metadataKeyspaceName}] should not be erasable."); // Add metadata migration var migrationScript = new FileMigrationScript(TestContext.Cassandra.EmptyMigrationScriptPath, "1_3_2", "Migration_description"); metadata.SaveMigration(migrationScript, true); var migrationMetadata = metadata.GetAllMigrationMetadata().FirstOrDefault(); Assert.True(migrationMetadata != null, "One migration metadata should be found."); Assert.True(migrationMetadata.Version == migrationScript.Version, "Metadata version is not the same."); Assert.True(migrationMetadata.Checksum == migrationScript.CalculateChecksum(), "Metadata checksum is not the same."); Assert.True(migrationMetadata.Description == migrationScript.Description, "Metadata descritpion is not the same."); Assert.True(migrationMetadata.Name == migrationScript.Name, "Metadata name is not the same."); Assert.True(migrationMetadata.Success == true, "Metadata success is not true."); Assert.True(migrationMetadata.Id != 0, "Metadata id is not set."); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date, $"Installed date is {migrationMetadata.InstalledOn.Date} whereas UtcNow is {DateTime.UtcNow.Date}."); // Update checksum metadata.UpdateChecksum(migrationMetadata.Id, "Hi !"); Assert.Equal("Hi !", metadata.GetAllMigrationMetadata().First().Checksum); // Assert metadata schema is not empty Assert.False(metadataSchema.IsEmpty(), $"[{metadataKeyspaceName}] should not be empty."); // Erase schema metadataSchema.Erase(); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataKeyspaceName}] should be empty."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should exist."); // Drop schema metadataSchema.Drop(); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataKeyspaceName}] should not exist."); }
public void Run_all_MySQL_integration_tests_work() { // Open a connection to the MySQL database var cnn = new MySqlConnection($"Server=127.0.0.1;Port={_mySQLFixture.HostPort};Database={_mySQLFixture.DbName};Uid={_mySQLFixture.DbUser};Pwd={_mySQLFixture.DbPwd};"); cnn.Open(); Assert.True(cnn.State == ConnectionState.Open, "Cannot open a connection to the database."); // Initiate a connection to the database var wcnn = new WrappedConnection(cnn); // Validate DBMS.MySQL_MariaDB Assert.Equal(DBMS.MySQL_MariaDB, wcnn.GetDatabaseServerType()); // Init the DatabaseHelper DatabaseHelper db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.MySQL_MariaDB, wcnn); // Get default schema name Assert.True(db.GetCurrentSchemaName() == _mySQLFixture.DbName, $"The default MySQL schema should be '{_mySQLFixture.DbName}'."); // Create schema string metadataSchemaName = "My metadata schema"; Schema metadataSchema = new MySQLSchema(metadataSchemaName, wcnn); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should not already exist."); Assert.True(metadataSchema.Create(), $"Creation of the schema [{metadataSchemaName}] failed."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should be created."); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataSchemaName}] should be empty."); // Get MetadataTable string metadataTableName = "change log"; var metadata = db.GetMetadataTable(metadataSchemaName, metadataTableName); // Create MetadataTable Assert.False(metadata.IsExists(), "MetadataTable sould not already exist."); Assert.True(metadata.CreateIfNotExists(), "MetadataTable creation failed."); Assert.True(metadata.IsExists(), "MetadataTable sould exist."); Assert.False(metadata.CreateIfNotExists(), "MetadataTable already exists. Creation should return false."); Assert.True(metadata.GetAllMigrationMetadata().Count() == 0, "No migration metadata should be found."); // Lock MetadataTable metadata.Lock(); // Save NewSchema metadata metadata.Save(MetadataType.NewSchema, "0", "New schema created.", metadataSchemaName); Assert.True(metadata.CanDropSchema(metadataSchemaName), $"[{metadataSchemaName}] should be droppable."); Assert.False(metadata.CanEraseSchema(metadataSchemaName), $"[{metadataSchemaName}] should not be erasable."); // Add metadata migration var migrationScript = new FileMigrationScript(TestContext.EmptyMigrationScriptPath, "1_3_2", "Migration_description"); metadata.SaveMigration(migrationScript, true); var migrationMetadata = metadata.GetAllMigrationMetadata().FirstOrDefault(); Assert.True(migrationMetadata != null, "One migration metadata should be found."); Assert.True(migrationMetadata.Version == migrationScript.Version, "Metadata version is not the same."); Assert.True(migrationMetadata.Checksum == migrationScript.CalculateChecksum(), "Metadata checksum is not the same."); Assert.True(migrationMetadata.Description == migrationScript.Description, "Metadata descritpion is not the same."); Assert.True(migrationMetadata.Name == migrationScript.Name, "Metadata name is not the same."); Assert.True(migrationMetadata.Success == true, "Metadata success is not true."); Assert.True(migrationMetadata.Id > 0, "Metadata id is not set."); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date, $"Installed date is {migrationMetadata.InstalledOn.Date} whereas UtcNow is {DateTime.UtcNow.Date}."); // Update checksum metadata.UpdateChecksum(migrationMetadata.Id, "Hi !"); Assert.Equal("Hi !", metadata.GetAllMigrationMetadata().First().Checksum); // Assert metadata schema is not empty Assert.False(metadataSchema.IsEmpty(), $"[{metadataSchemaName}] should not be empty."); // Erase schema metadataSchema.Erase(); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataSchemaName}] should be empty."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should exist."); // Drop schema metadataSchema.Drop(); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should not exist."); }
public void Run_all_PostgreSQL_integration_tests_work() { // Open a connection to the PostgreSQL database var cnn = _pgContainer.CreateDbConnection(); cnn.Open(); Assert.True(cnn.State == ConnectionState.Open, "Cannot open a connection to the database."); // Initiate a connection to the database var wcnn = new WrappedConnection(cnn); // Validate DBMS.PostgreSQL Assert.Equal(DBMS.PostgreSQL, wcnn.GetDatabaseServerType()); // Init the DatabaseHelper DatabaseHelper db = DatabaseHelperFactory.GetDatabaseHelper(DBMS.PostgreSQL, wcnn); // Test default schema name Assert.True(db.GetCurrentSchemaName() == "public", "The default PostgreSQL schema should be 'public'."); // Create schema string metadataSchemaName = "My metadata schema"; Schema metadataSchema = new PostgreSQLSchema(metadataSchemaName, wcnn); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should not already exist."); Assert.True(metadataSchema.Create(), $"Creation of the schema [{metadataSchemaName}] failed."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should be created."); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataSchemaName}] should be empty."); // Get MetadataTable string metadataTableName = "changelog"; var metadata = db.GetMetadataTable(metadataSchemaName, metadataTableName); // Create MetadataTable Assert.False(metadata.IsExists(), "MetadataTable sould not already exist."); Assert.True(metadata.CreateIfNotExists(), "MetadataTable creation failed."); Assert.True(metadata.IsExists(), "MetadataTable sould exist."); Assert.False(metadata.CreateIfNotExists(), "MetadataTable already exists. Creation should return false."); Assert.True(metadata.GetAllMigrationMetadata().Count() == 0, "No migration metadata should be found."); // TryLock/ReleaseLock MetadataTable Assert.True(metadata.TryLock()); Assert.True(metadata.ReleaseLock()); // Save NewSchema metadata metadata.Save(MetadataType.NewSchema, "0", "New schema created.", metadataSchemaName); Assert.True(metadata.CanDropSchema(metadataSchemaName), $"[{metadataSchemaName}] should be droppable."); Assert.False(metadata.CanEraseSchema(metadataSchemaName), $"[{metadataSchemaName}] should not be erasable."); // Add metadata migration var migrationScript = new FileMigrationScript(TestContext.PostgreSQL.EmptyMigrationScriptPath, "1_3_2", "Migration_description"); metadata.SaveMigration(migrationScript, true); var migrationMetadata = metadata.GetAllMigrationMetadata().FirstOrDefault(); Assert.True(migrationMetadata != null, "One migration metadata should be found."); Assert.True(migrationMetadata.Version == migrationScript.Version, "Metadata version is not the same."); Assert.True(migrationMetadata.Checksum == migrationScript.CalculateChecksum(), "Metadata checksum is not the same."); Assert.True(migrationMetadata.Description == migrationScript.Description, "Metadata descritpion is not the same."); Assert.True(migrationMetadata.Name == migrationScript.Name, "Metadata name is not the same."); Assert.True(migrationMetadata.Success == true, "Metadata success is not true."); Assert.True(migrationMetadata.Id > 0, "Metadata id is not set."); Assert.True(migrationMetadata.InstalledOn.Date == DateTime.UtcNow.Date, $"Metadata InstalledOn date {migrationMetadata.InstalledOn} must be equals to {DateTime.UtcNow.Date}."); // Update checksum metadata.UpdateChecksum(migrationMetadata.Id, "Hi !"); Assert.Equal("Hi !", metadata.GetAllMigrationMetadata().First().Checksum); // Assert metadata schema is not empty Assert.False(metadataSchema.IsEmpty(), $"[{metadataSchemaName}] should not be empty."); // Erase schema metadataSchema.Erase(); Assert.True(metadataSchema.IsEmpty(), $"The schema [{metadataSchemaName}] should be empty."); Assert.True(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should exist."); // Drop schema metadataSchema.Drop(); Assert.False(metadataSchema.IsExists(), $"The schema [{metadataSchemaName}] should not exist."); // Acquisition du lock applicatif while (true) { if (db.TryAcquireApplicationLock()) { break; } Thread.Sleep(TimeSpan.FromSeconds(1)); } Assert.True(db.TryAcquireApplicationLock(), "Cannot acquire application lock."); // Can not acquire lock while it is taken by another connection var cnn2 = _pgContainer.CreateDbConnection(); var wcnn2 = new WrappedConnection(cnn2); var db2 = DatabaseHelperFactory.GetDatabaseHelper(DBMS.PostgreSQL, wcnn2); Assert.False(db2.TryAcquireApplicationLock(), "Application lock could not have been acquired."); // Release the lock db.ReleaseApplicationLock(); db.CloseConnection(); Assert.True(db.WrappedConnection.DbConnection.State == ConnectionState.Closed, "SQL connection should be closed."); }