mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-17 02:51:45 -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:
@@ -166,7 +166,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TaskServices
|
|||||||
{
|
{
|
||||||
tasks.TryGetValue(taskId, out taskToCancel);
|
tasks.TryGetValue(taskId, out taskToCancel);
|
||||||
}
|
}
|
||||||
if(taskToCancel != null)
|
if (taskToCancel != null)
|
||||||
{
|
{
|
||||||
taskToCancel.Cancel();
|
taskToCancel.Cancel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user