mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-27 17:24:26 -05:00
Integrate generate script with task service (#426)
* Support generate script for backup * change * update task service data contract for Generate Script * more changes * update test * add comments * Add missing files * update stub backup operation for testing * pr comments * remove empty space * Fix tests * Add unit/integration tests and isCancelable to TaskInfo * address pr comments * pr comments - fix tests * fix minor issue * fix minor issues * remove unused variable
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 Microsoft.SqlTools.ServiceLayer.TaskServices;
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Threading;
|
||||
@@ -25,6 +26,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
this.BackupSemaphore = new SemaphoreSlim(0, 1);
|
||||
}
|
||||
|
||||
public string ScriptContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initialize
|
||||
@@ -56,7 +58,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
/// <summary>
|
||||
/// Execute backup
|
||||
/// </summary>
|
||||
public void PerformBackup()
|
||||
public void Execute(TaskExecutionMode mode)
|
||||
{
|
||||
this.BackupSemaphore.Wait(TimeSpan.FromSeconds(5));
|
||||
}
|
||||
@@ -64,7 +66,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
/// <summary>
|
||||
/// Cancel backup
|
||||
/// </summary>
|
||||
public void CancelBackup()
|
||||
public void Cancel()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
|
||||
{
|
||||
@@ -35,7 +35,32 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
await taskToVerify;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Generate script for backup task
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task VerifyScriptBackupTask()
|
||||
{
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
taskMetaData.TaskExecutionMode = TaskExecutionMode.Script;
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
|
||||
{
|
||||
Assert.Equal(SqlTaskStatus.Succeeded, sqlTask.TaskStatus);
|
||||
});
|
||||
|
||||
await taskToVerify;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create and run multiple backup tasks
|
||||
/// </summary>
|
||||
@@ -49,8 +74,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -77,10 +102,10 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
{
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(Task =>
|
||||
{
|
||||
@@ -110,8 +135,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
TaskMetadata taskMetaData2 = this.CreateTaskMetaData(backupOperation2);
|
||||
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData2, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData2, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -149,11 +174,11 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
|
||||
DisasterRecoveryService service = new DisasterRecoveryService();
|
||||
IBackupOperation backupOperation = new BackupOperationStub();
|
||||
TaskMetadata taskMetaData = this.CreateTaskMetaData(backupOperation);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.BackupTaskAsync);
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
|
||||
var mockBackupOperation = new Mock<IBackupOperation>();
|
||||
TaskMetadata taskMetaData2 = this.CreateTaskMetaData(mockBackupOperation.Object);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData2, service.BackupTaskAsync);
|
||||
SqlTask sqlTask2 = manager.CreateTask(taskMetaData, service.PerformBackupTaskAsync, service.CancelBackupTaskAsync);
|
||||
|
||||
Assert.NotNull(sqlTask);
|
||||
Assert.NotNull(sqlTask2);
|
||||
|
||||
@@ -23,6 +23,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.TaskServices
|
||||
Failed = true;
|
||||
}
|
||||
|
||||
public TaskScript TaskScript { get; set; }
|
||||
|
||||
public TaskResult TaskResult { get; set; }
|
||||
|
||||
public bool IsStopped { get; set; }
|
||||
@@ -62,5 +64,21 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.TaskServices
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
public async Task<TaskResult> FunctionToScript(SqlTask sqlTask)
|
||||
{
|
||||
return await Task.Factory.StartNew(() =>
|
||||
{
|
||||
sqlTask.AddMessage("start scripting", SqlTaskStatus.InProgress, true);
|
||||
TaskScript = sqlTask.AddScript(SqlTaskStatus.Succeeded, "script generated!");
|
||||
sqlTask.AddMessage("done", SqlTaskStatus.Succeeded);
|
||||
|
||||
return new TaskResult
|
||||
{
|
||||
TaskStatus = SqlTaskStatus.Succeeded,
|
||||
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,5 +147,26 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.TaskServices
|
||||
operation.FailTheOperation();
|
||||
await taskToVerify;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task RunScriptShouldReturnScriptContent()
|
||||
{
|
||||
SqlTaskStatus expectedStatus = SqlTaskStatus.Succeeded;
|
||||
DatabaseOperationStub operation = new DatabaseOperationStub();
|
||||
operation.TaskResult = new TaskResult
|
||||
{
|
||||
TaskStatus = expectedStatus
|
||||
};
|
||||
SqlTask sqlTask = new SqlTask(new TaskMetadata(), operation.FunctionToScript, null);
|
||||
Assert.Equal(sqlTask.TaskStatus, SqlTaskStatus.NotStarted);
|
||||
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(task => {
|
||||
Assert.Equal(sqlTask.TaskStatus, expectedStatus);
|
||||
Assert.Equal(sqlTask.IsCompleted, true);
|
||||
Assert.NotNull(operation.TaskScript);
|
||||
Assert.True(!string.IsNullOrEmpty(operation.TaskScript.Script));
|
||||
});
|
||||
await taskToVerify;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,5 +86,40 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.TaskServices
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task VerifyScriptTask()
|
||||
{
|
||||
using (SqlTaskManager manager = new SqlTaskManager())
|
||||
{
|
||||
DatabaseOperationStub operation = new DatabaseOperationStub();
|
||||
operation.TaskResult = new TaskResult
|
||||
{
|
||||
TaskStatus = SqlTaskStatus.Succeeded
|
||||
};
|
||||
SqlTask sqlTask = manager.CreateTask(taskMetaData, operation.FunctionToScript);
|
||||
|
||||
bool scriptAddedEventRaised = false;
|
||||
string script = null;
|
||||
sqlTask.ScriptAdded += (object sender, TaskEventArgs<TaskScript> e) =>
|
||||
{
|
||||
scriptAddedEventRaised = true;
|
||||
script = e.TaskData.Script;
|
||||
};
|
||||
|
||||
Assert.NotNull(sqlTask);
|
||||
|
||||
Task taskToVerify = sqlTask.RunAsync().ContinueWith(task =>
|
||||
{
|
||||
Assert.True(scriptAddedEventRaised);
|
||||
Assert.True(!string.IsNullOrEmpty(script));
|
||||
Assert.True(manager.HasCompletedTasks());
|
||||
manager.RemoveCompletedTask(sqlTask);
|
||||
});
|
||||
operation.Stop();
|
||||
await taskToVerify;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user