mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Add extra delete database functionality to DatabaseHandler (#2168)
* Also fixed connections not being properly closed in Detach operations * Fixed errors being thrown in InitializeObjectView because certain db property fields are not supported against Azure
This commit is contained in:
@@ -439,6 +439,113 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DeleteDatabaseTest()
|
||||
{
|
||||
var connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync("master");
|
||||
using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connectionResult.ConnectionInfo))
|
||||
{
|
||||
var server = new Server(new ServerConnection(sqlConn));
|
||||
|
||||
var testDatabase = ObjectManagementTestUtils.GetTestDatabaseInfo();
|
||||
var objUrn = ObjectManagementTestUtils.GetDatabaseURN(testDatabase.Name);
|
||||
await ObjectManagementTestUtils.DropObject(connectionResult.ConnectionInfo.OwnerUri, objUrn);
|
||||
|
||||
try
|
||||
{
|
||||
// Create database to test with
|
||||
var parametersForCreation = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, "master", true, SqlObjectType.Database, "", "");
|
||||
await ObjectManagementTestUtils.SaveObject(parametersForCreation, testDatabase);
|
||||
Assert.That(DatabaseExists(testDatabase.Name!, server), $"Expected database '{testDatabase.Name}' was not created succesfully");
|
||||
|
||||
var handler = new DatabaseHandler(ConnectionService.Instance);
|
||||
var connectionUri = connectionResult.ConnectionInfo.OwnerUri;
|
||||
|
||||
var deleteParams = new DropDatabaseRequestParams()
|
||||
{
|
||||
ConnectionUri = connectionUri,
|
||||
ObjectUrn = objUrn,
|
||||
DropConnections = false,
|
||||
DeleteBackupHistory = false,
|
||||
GenerateScript = false
|
||||
};
|
||||
var script = handler.Drop(deleteParams);
|
||||
|
||||
Assert.That(script, Is.Empty, "Should only return an empty string if GenerateScript is false");
|
||||
|
||||
server.Databases.Refresh();
|
||||
Assert.That(DatabaseExists(testDatabase.Name!, server), Is.False, $"Database '{testDatabase.Name}' was not deleted succesfully");
|
||||
}
|
||||
finally
|
||||
{
|
||||
DropDatabase(server, testDatabase.Name!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DeleteDatabaseScriptTest()
|
||||
{
|
||||
var connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync("master");
|
||||
using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connectionResult.ConnectionInfo))
|
||||
{
|
||||
var server = new Server(new ServerConnection(sqlConn));
|
||||
|
||||
var testDatabase = ObjectManagementTestUtils.GetTestDatabaseInfo();
|
||||
var objUrn = ObjectManagementTestUtils.GetDatabaseURN(testDatabase.Name);
|
||||
await ObjectManagementTestUtils.DropObject(connectionResult.ConnectionInfo.OwnerUri, objUrn);
|
||||
|
||||
try
|
||||
{
|
||||
// Create database to test with
|
||||
var parametersForCreation = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, "master", true, SqlObjectType.Database, "", "");
|
||||
await ObjectManagementTestUtils.SaveObject(parametersForCreation, testDatabase);
|
||||
|
||||
var handler = new DatabaseHandler(ConnectionService.Instance);
|
||||
var connectionUri = connectionResult.ConnectionInfo.OwnerUri;
|
||||
|
||||
var deleteParams = new DropDatabaseRequestParams()
|
||||
{
|
||||
ConnectionUri = connectionUri,
|
||||
ObjectUrn = objUrn,
|
||||
DropConnections = false,
|
||||
DeleteBackupHistory = false,
|
||||
GenerateScript = true
|
||||
};
|
||||
|
||||
var expectedDeleteScript = $"DROP DATABASE [{testDatabase.Name}]";
|
||||
var expectedAlterScript = $"ALTER DATABASE [{testDatabase.Name}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
|
||||
var expectedBackupScript = $"EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'{testDatabase.Name}'";
|
||||
|
||||
var actualScript = handler.Drop(deleteParams);
|
||||
Assert.That(DatabaseExists(testDatabase.Name!, server), "Database should not have been deleted when just generating a script.");
|
||||
Assert.That(actualScript, Does.Contain(expectedDeleteScript).IgnoreCase);
|
||||
|
||||
// Drop connections only
|
||||
deleteParams.DropConnections = true;
|
||||
actualScript = handler.Drop(deleteParams);
|
||||
Assert.That(actualScript, Does.Contain(expectedDeleteScript).IgnoreCase);
|
||||
Assert.That(actualScript, Does.Contain(expectedAlterScript).IgnoreCase);
|
||||
|
||||
// Delete backup/restore history only
|
||||
deleteParams.DropConnections = false;
|
||||
deleteParams.DeleteBackupHistory = true;
|
||||
actualScript = handler.Drop(deleteParams);
|
||||
Assert.That(actualScript, Does.Contain(expectedBackupScript).IgnoreCase);
|
||||
|
||||
// Both drop and update
|
||||
deleteParams.DropConnections = true;
|
||||
actualScript = handler.Drop(deleteParams);
|
||||
Assert.That(actualScript, Does.Contain(expectedAlterScript).IgnoreCase);
|
||||
Assert.That(actualScript, Does.Contain(expectedBackupScript).IgnoreCase);
|
||||
}
|
||||
finally
|
||||
{
|
||||
DropDatabase(server, testDatabase.Name!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool DatabaseExists(string dbName, Server server)
|
||||
{
|
||||
server.Databases.Refresh();
|
||||
|
||||
Reference in New Issue
Block a user