mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-26 09:35:38 -05:00
Fix CancelMultipleBackup test failure (#399)
* Fix cancelMultipleBackup test failure Please enter the commit message for your changes. Lines starting * Add semaphore to backup stub operation * remove spaces
This commit is contained in:
@@ -7,6 +7,7 @@ using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlTools.ServiceLayer.Admin;
|
||||
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery;
|
||||
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts;
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Threading;
|
||||
|
||||
@@ -17,6 +18,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
/// </summary>
|
||||
public class BackupOperationStub : IBackupOperation
|
||||
{
|
||||
public SemaphoreSlim BackupSemaphore { get; set; }
|
||||
|
||||
public BackupOperationStub()
|
||||
{
|
||||
this.BackupSemaphore = new SemaphoreSlim(0, 1);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initialize
|
||||
/// </summary>
|
||||
@@ -49,7 +58,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
/// </summary>
|
||||
public void PerformBackup()
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
this.BackupSemaphore.Wait(TimeSpan.FromSeconds(5));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -13,14 +13,6 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
public class BackupTests
|
||||
{
|
||||
private TaskMetadata taskMetaData = new TaskMetadata
|
||||
{
|
||||
ServerName = "server name",
|
||||
DatabaseName = "database name",
|
||||
Name = "Backup Database",
|
||||
IsCancelable = true
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Create and run a backup task
|
||||
/// </summary>
|
||||
@@ -32,9 +24,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
this.taskMetaData.Data = mockBackupOperation.Object;
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
|
||||
{
|
||||
@@ -55,11 +46,11 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
var mockUtility = new Mock<IBackupOperation>();
|
||||
this.taskMetaData.Data = mockUtility.Object;
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -88,13 +79,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
this.taskMetaData.Data = backupOperation;
|
||||
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
|
||||
{
|
||||
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
|
||||
Assert.Equal(sqlTask.IsCancelRequested, true);
|
||||
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
|
||||
manager.Reset();
|
||||
});
|
||||
|
||||
@@ -113,11 +105,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
this.taskMetaData.Data = backupOperation;
|
||||
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
IBackupOperation backupOperation2 = new BackupOperationStub();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
TaskMetadata taskMetaData2 = this.CreateTaskMetaData(backupOperation2);
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData2, service.BackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -125,6 +120,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
|
||||
Assert.Equal(sqlTask.IsCancelRequested, true);
|
||||
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
|
||||
manager.Reset();
|
||||
});
|
||||
|
||||
@@ -132,12 +128,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
Assert.Equal(SqlTaskStatus.Canceled, sqlTask2.TaskStatus);
|
||||
Assert.Equal(sqlTask2.IsCancelRequested, true);
|
||||
((BackupOperationStub)backupOperation2).BackupSemaphore.Release();
|
||||
manager.Reset();
|
||||
});
|
||||
|
||||
manager.CancelTask(sqlTask.TaskId);
|
||||
manager.CancelTask(sqlTask2.TaskId);
|
||||
|
||||
await Task.WhenAll(taskToVerify, taskToVerify2);
|
||||
}
|
||||
}
|
||||
@@ -152,11 +148,15 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
this.taskMetaData.Data = backupOperation;
|
||||
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData2 = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData2, service.BackupTaskAsync);
|
||||
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -164,6 +164,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
|
||||
Assert.Equal(sqlTask.IsCancelRequested, true);
|
||||
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
|
||||
manager.Reset();
|
||||
});
|
||||
|
||||
@@ -173,8 +174,22 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
});
|
||||
|
||||
manager.CancelTask(sqlTask.TaskId);
|
||||
await Task.WhenAll(taskToVerify, taskToVerify2);
|
||||
await Task.WhenAll(taskToVerify, taskToVerify2);
|
||||
}
|
||||
}
|
||||
|
||||
private TaskMetadata CreateTaskMetaData(object data)
|
||||
{
|
||||
TaskMetadata taskMetaData = new TaskMetadata
|
||||
{
|
||||
ServerName = "server name",
|
||||
DatabaseName = "database name",
|
||||
Name = "backup database",
|
||||
IsCancelable = true,
|
||||
Data = data
|
||||
};
|
||||
|
||||
return taskMetaData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user