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:
Kate Shin
2017-07-05 22:12:41 -07:00
committed by GitHub
parent bcd20af05e
commit b6c8eac8fc
3 changed files with 53 additions and 29 deletions

View File

@@ -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>

View File

@@ -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;
}
}
}