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:
Udeesha Gautam
2019-06-27 15:55:26 -07:00
committed by GitHub
parent a4b6c300ac
commit a6450eb180
4 changed files with 59 additions and 8 deletions

View File

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

View File

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