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.Admin;
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery; using Microsoft.SqlTools.ServiceLayer.DisasterRecovery;
using Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts; using Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts;
using System;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Threading; using System.Threading;
@@ -17,6 +18,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
/// </summary> /// </summary>
public class BackupOperationStub : IBackupOperation public class BackupOperationStub : IBackupOperation
{ {
public SemaphoreSlim BackupSemaphore { get; set; }
public BackupOperationStub()
{
this.BackupSemaphore = new SemaphoreSlim(0, 1);
}
/// <summary> /// <summary>
/// Initialize /// Initialize
/// </summary> /// </summary>
@@ -49,7 +58,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
/// </summary> /// </summary>
public void PerformBackup() public void PerformBackup()
{ {
Thread.Sleep(500); this.BackupSemaphore.Wait(TimeSpan.FromSeconds(5));
} }
/// <summary> /// <summary>

View File

@@ -13,14 +13,6 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
public class BackupTests public class BackupTests
{ {
private TaskMetadata taskMetaData = new TaskMetadata
{
ServerName = "server name",
DatabaseName = "database name",
Name = "Backup Database",
IsCancelable = true
};
/// <summary> /// <summary>
/// Create and run a backup task /// Create and run a backup task
/// </summary> /// </summary>
@@ -32,9 +24,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
DisasterRecoveryService service = new DisasterRecoveryService(); DisasterRecoveryService service = new DisasterRecoveryService();
var mockBackupOperation = new Mock<IBackupOperation>(); var mockBackupOperation = new Mock<IBackupOperation>();
this.taskMetaData.Data = mockBackupOperation.Object; TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync);
Assert.NotNull(sqlTask); Assert.NotNull(sqlTask);
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task => Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
{ {
@@ -55,11 +46,11 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
using (SqlTaskManager manager = new SqlTaskManager()) using (SqlTaskManager manager = new SqlTaskManager())
{ {
DisasterRecoveryService service = new DisasterRecoveryService(); DisasterRecoveryService service = new DisasterRecoveryService();
var mockUtility = new Mock<IBackupOperation>(); var mockBackupOperation = new Mock<IBackupOperation>();
this.taskMetaData.Data = mockUtility.Object; TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); SqlTask sqlTask2 = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
Assert.NotNull(sqlTask); Assert.NotNull(sqlTask);
Assert.NotNull(sqlTask2); Assert.NotNull(sqlTask2);
@@ -88,13 +79,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
IBackupOperation backupOperation = new BackupOperationStub(); IBackupOperation backupOperation = new BackupOperationStub();
DisasterRecoveryService service = new DisasterRecoveryService(); DisasterRecoveryService service = new DisasterRecoveryService();
this.taskMetaData.Data = backupOperation; TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
Assert.NotNull(sqlTask); Assert.NotNull(sqlTask);
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task => Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
{ {
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus); Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
Assert.Equal(sqlTask.IsCancelRequested, true); Assert.Equal(sqlTask.IsCancelRequested, true);
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
manager.Reset(); manager.Reset();
}); });
@@ -113,11 +105,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
using (SqlTaskManager manager = new SqlTaskManager()) using (SqlTaskManager manager = new SqlTaskManager())
{ {
IBackupOperation backupOperation = new BackupOperationStub();
DisasterRecoveryService service = new DisasterRecoveryService(); DisasterRecoveryService service = new DisasterRecoveryService();
this.taskMetaData.Data = backupOperation; IBackupOperation backupOperation = new BackupOperationStub();
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); IBackupOperation backupOperation2 = new BackupOperationStub();
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); 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(sqlTask);
Assert.NotNull(sqlTask2); Assert.NotNull(sqlTask2);
@@ -125,6 +120,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus); Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
Assert.Equal(sqlTask.IsCancelRequested, true); Assert.Equal(sqlTask.IsCancelRequested, true);
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
manager.Reset(); manager.Reset();
}); });
@@ -132,12 +128,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
Assert.Equal(SqlTaskStatus.Canceled, sqlTask2.TaskStatus); Assert.Equal(SqlTaskStatus.Canceled, sqlTask2.TaskStatus);
Assert.Equal(sqlTask2.IsCancelRequested, true); Assert.Equal(sqlTask2.IsCancelRequested, true);
((BackupOperationStub)backupOperation2).BackupSemaphore.Release();
manager.Reset(); manager.Reset();
}); });
manager.CancelTask(sqlTask.TaskId); manager.CancelTask(sqlTask.TaskId);
manager.CancelTask(sqlTask2.TaskId); manager.CancelTask(sqlTask2.TaskId);
await Task.WhenAll(taskToVerify, taskToVerify2); await Task.WhenAll(taskToVerify, taskToVerify2);
} }
} }
@@ -152,11 +148,15 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
using (SqlTaskManager manager = new SqlTaskManager()) using (SqlTaskManager manager = new SqlTaskManager())
{ {
IBackupOperation backupOperation = new BackupOperationStub();
DisasterRecoveryService service = new DisasterRecoveryService(); DisasterRecoveryService service = new DisasterRecoveryService();
this.taskMetaData.Data = backupOperation; IBackupOperation backupOperation = new BackupOperationStub();
SqlTask sqlTask = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
SqlTask sqlTask2 = manager.CreateTask(this.taskMetaData, service.BackupTaskAsync); 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(sqlTask);
Assert.NotNull(sqlTask2); Assert.NotNull(sqlTask2);
@@ -164,6 +164,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
{ {
Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus); Assert.Equal(SqlTaskStatus.Canceled, sqlTask.TaskStatus);
Assert.Equal(sqlTask.IsCancelRequested, true); Assert.Equal(sqlTask.IsCancelRequested, true);
((BackupOperationStub)backupOperation).BackupSemaphore.Release();
manager.Reset(); manager.Reset();
}); });
@@ -176,5 +177,19 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
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;
}
} }
} }