mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-24 17:24:14 -05:00
Bug/schemacompare publish and script tasks to send back results (#830)
* Fix Schema compare Publish and Script generation task to return back error messages correctly. * Elaborating test a bit more to cover tasks * Validate one task at a time for better clarity * send back only errors not whole messages since task view doesnt have a good way (other than hover text) to show long messages * Fixing the negative test cases
This commit is contained in:
@@ -254,10 +254,19 @@ END
|
||||
};
|
||||
|
||||
SchemaCompareGenerateScriptOperation generateScriptOperation1 = new SchemaCompareGenerateScriptOperation(generateScriptParams1, schemaCompareOperation1.ComparisonResult);
|
||||
generateScriptOperation1.Execute(TaskExecutionMode.Script);
|
||||
|
||||
// validate script generation failed because there were no differences
|
||||
Assert.False(generateScriptOperation1.ScriptGenerationResult.Success);
|
||||
try
|
||||
{
|
||||
generateScriptOperation1.Execute(TaskExecutionMode.Script);
|
||||
Assert.True(false); //fail if it reaches here
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// validate script generation failed because there were no differences
|
||||
Assert.False(generateScriptOperation1.ScriptGenerationResult.Success);
|
||||
Assert.Equal("Performing script generation is not possible for this comparison result.", generateScriptOperation1.ScriptGenerationResult.Message);
|
||||
Assert.Equal("Performing script generation is not possible for this comparison result.", ex.Message);
|
||||
}
|
||||
|
||||
var schemaCompareParams2 = new SchemaCompareParams
|
||||
{
|
||||
@@ -382,7 +391,7 @@ END
|
||||
var schemaCompareRequestContext = new Mock<RequestContext<SchemaCompareOptionsResult>>();
|
||||
schemaCompareRequestContext.Setup(x => x.SendResult(It.IsAny<SchemaCompareOptionsResult>())).Returns(Task.FromResult(new object()));
|
||||
schemaCompareRequestContext.Setup((RequestContext<SchemaCompareOptionsResult> x) => x.SendResult(It.Is<SchemaCompareOptionsResult>((options) => SchemaCompareTestUtils.ValidateOptionsEqualsDefault(options) == true))).Returns(Task.FromResult(new object()));
|
||||
|
||||
|
||||
SchemaCompareGetOptionsParams p = new SchemaCompareGetOptionsParams();
|
||||
await SchemaCompareService.Instance.HandleSchemaCompareGetDefaultOptionsRequest(p, schemaCompareRequestContext.Object);
|
||||
}
|
||||
|
||||
@@ -547,6 +547,7 @@ CREATE TABLE [dbo].[table3]
|
||||
targetInfo.EndpointType = SchemaCompareEndpointType.Database;
|
||||
targetInfo.DatabaseName = targetDb.DatabaseName;
|
||||
targetInfo.OwnerUri = connectionObject.ConnectionInfo.OwnerUri;
|
||||
TaskService.Instance.TaskManager.Reset();
|
||||
|
||||
// Schema compare service call
|
||||
var schemaCompareRequestContext = new Mock<RequestContext<SchemaCompareResult>>();
|
||||
@@ -595,6 +596,7 @@ CREATE TABLE [dbo].[table3]
|
||||
};
|
||||
|
||||
await SchemaCompareService.Instance.HandleSchemaCompareGenerateScriptRequest(generateScriptParams, generateScriptRequestContext.Object);
|
||||
ValidateTask(SR.GenerateScriptTaskName);
|
||||
|
||||
// Publish service call
|
||||
var publishRequestContext = new Mock<RequestContext<ResultStatus>>();
|
||||
@@ -602,14 +604,15 @@ CREATE TABLE [dbo].[table3]
|
||||
|
||||
|
||||
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(targetDb.ConnectionString);
|
||||
var publishParams = new SchemaCompareGenerateScriptParams
|
||||
var publishParams = new SchemaComparePublishChangesParams
|
||||
{
|
||||
OperationId = operationId,
|
||||
TargetDatabaseName = targetDb.DatabaseName,
|
||||
TargetServerName = builder.DataSource,
|
||||
};
|
||||
|
||||
await SchemaCompareService.Instance.HandleSchemaCompareGenerateScriptRequest(publishParams, publishRequestContext.Object);
|
||||
await SchemaCompareService.Instance.HandleSchemaComparePublishChangesRequest(publishParams, publishRequestContext.Object);
|
||||
ValidateTask(SR.PublishChangesTaskName);
|
||||
|
||||
// Include/Exclude service call
|
||||
var excludeRequestContext = new Mock<RequestContext<ResultStatus>>();
|
||||
@@ -650,7 +653,7 @@ CREATE TABLE [dbo].[table3]
|
||||
|
||||
await SchemaCompareService.Instance.HandleSchemaCompareOpenScmpRequest(openScmpParams, openScmpRequestContext.Object);
|
||||
await SchemaCompareService.Instance.CurrentSchemaCompareTask;
|
||||
SchemaCompareTestUtils.VerifyAndCleanup(scmpFilePath);
|
||||
SchemaCompareTestUtils.VerifyAndCleanup(scmpFilePath);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -1021,7 +1024,6 @@ CREATE TABLE [dbo].[table3]
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private bool ValidateScmpRoundtrip(SchemaCompareOpenScmpResult result, string sourceName, string targetName)
|
||||
{
|
||||
Assert.True(true == result.Success, "Result Success is false");
|
||||
@@ -1031,5 +1033,33 @@ CREATE TABLE [dbo].[table3]
|
||||
Assert.True(targetName == result.TargetEndpointInfo.DatabaseName, $"Source Endpoint name does not match. Expected {targetName}, Actual {result.TargetEndpointInfo.DatabaseName}");
|
||||
return true;
|
||||
}
|
||||
|
||||
private void ValidateTask(string expectedTaskName)
|
||||
{
|
||||
int retry = 5;
|
||||
Assert.True(TaskService.Instance.TaskManager.Tasks.Count == 1, $"Expected 1 task but found {TaskService.Instance.TaskManager.Tasks.Count} tasks");
|
||||
while (TaskService.Instance.TaskManager.Tasks.Any() && retry > 0)
|
||||
{
|
||||
if (!TaskService.Instance.TaskManager.HasCompletedTasks())
|
||||
{
|
||||
System.Threading.Thread.Sleep(2000);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (SqlTask sqlTask in TaskService.Instance.TaskManager.Tasks)
|
||||
{
|
||||
if (sqlTask.IsCompleted)
|
||||
{
|
||||
Assert.True(sqlTask.TaskStatus == SqlTaskStatus.Succeeded, $"Task {sqlTask.TaskMetadata.Name} expected to succeed but failed with {sqlTask.TaskStatus.ToString()}");
|
||||
Assert.True(sqlTask.TaskMetadata.Name.Equals(expectedTaskName), $"Unexpected Schema compare task name. Expected : {expectedTaskName}, Actual : {sqlTask.TaskMetadata.Name}");
|
||||
TaskService.Instance.TaskManager.RemoveCompletedTask(sqlTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
retry--;
|
||||
}
|
||||
Assert.Equal(false, TaskService.Instance.TaskManager.Tasks.Any());
|
||||
TaskService.Instance.TaskManager.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user