mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-17 02:51:45 -05:00
Filtering Schema Compare error from warnings (#1212)
* Filtering Schema Compare error from warnings * SchemaCompare added comparison result error message validations to existing tests * Extra semi-colon noticed and removed from the code * Added new test case to validate warning message exclusions from SC result * SC test asserions comment added * Edge case scenario fixed and tests are 100% passed
This commit is contained in:
committed by
GitHub
parent
64a6b6a85c
commit
37b2b26edf
@@ -121,9 +121,13 @@ namespace Microsoft.SqlTools.ServiceLayer.SchemaCompare
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Appending the set of errors that are stopping the schema compare to the ErrorMessage
|
// Appending the set of errors that are stopping the schema compare to the ErrorMessage
|
||||||
var errorsList = ComparisonResult.GetErrors().Select(e => e.Message).Distinct().ToList();
|
// GetErrors return all type of warnings, and error messages. Only filtering the error type messages here
|
||||||
|
var errorsList = ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Error)).Select(e => e.Message).Distinct().ToList();
|
||||||
|
if (errorsList.Count > 0)
|
||||||
|
{
|
||||||
ErrorMessage = string.Join("\n", errorsList);
|
ErrorMessage = string.Join("\n", errorsList);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
ErrorMessage = e.Message;
|
ErrorMessage = e.Message;
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ END
|
|||||||
SchemaCompareOperation schemaCompareOperation1 = new SchemaCompareOperation(schemaCompareParams1, null, null);
|
SchemaCompareOperation schemaCompareOperation1 = new SchemaCompareOperation(schemaCompareParams1, null, null);
|
||||||
schemaCompareOperation1.Execute(TaskExecutionMode.Execute);
|
schemaCompareOperation1.Execute(TaskExecutionMode.Execute);
|
||||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||||
|
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||||
|
|
||||||
var schemaCompareParams2 = new SchemaCompareParams
|
var schemaCompareParams2 = new SchemaCompareParams
|
||||||
{
|
{
|
||||||
@@ -150,6 +151,7 @@ END
|
|||||||
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
||||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath);
|
SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath);
|
||||||
@@ -193,6 +195,7 @@ END
|
|||||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
||||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||||
|
|
||||||
var schemaCompareParams2 = new SchemaCompareParams
|
var schemaCompareParams2 = new SchemaCompareParams
|
||||||
{
|
{
|
||||||
@@ -205,6 +208,7 @@ END
|
|||||||
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
schemaCompareOperation2.Execute(TaskExecutionMode.Execute);
|
||||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -247,6 +251,7 @@ END
|
|||||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation1.ComparisonResult.IsValid);
|
||||||
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
Assert.True(schemaCompareOperation1.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation1.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation1.ErrorMessage);
|
||||||
|
|
||||||
// generate script
|
// generate script
|
||||||
var generateScriptParams1 = new SchemaCompareGenerateScriptParams
|
var generateScriptParams1 = new SchemaCompareGenerateScriptParams
|
||||||
@@ -283,6 +288,7 @@ END
|
|||||||
Assert.True(schemaCompareOperation2.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation2.ComparisonResult.IsValid);
|
||||||
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation2.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation2.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation2.ErrorMessage);
|
||||||
|
|
||||||
// generate script
|
// generate script
|
||||||
var generateScriptParams2 = new SchemaCompareGenerateScriptParams
|
var generateScriptParams2 = new SchemaCompareGenerateScriptParams
|
||||||
|
|||||||
@@ -402,6 +402,8 @@ WITH VALUES
|
|||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||||
|
|
||||||
var enumerator = schemaCompareOperation.ComparisonResult.Differences.GetEnumerator();
|
var enumerator = schemaCompareOperation.ComparisonResult.Differences.GetEnumerator();
|
||||||
enumerator.MoveNext();
|
enumerator.MoveNext();
|
||||||
Assert.True(enumerator.Current.SourceObject.Name.ToString().Equals("[dbo].[table1]"));
|
Assert.True(enumerator.Current.SourceObject.Name.ToString().Equals("[dbo].[table1]"));
|
||||||
@@ -426,6 +428,7 @@ WITH VALUES
|
|||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsEqual);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||||
Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty);
|
Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -736,6 +739,7 @@ WITH VALUES
|
|||||||
}
|
}
|
||||||
|
|
||||||
Assert.Null(schemaCompareOperation.ComparisonResult.Differences);
|
Assert.Null(schemaCompareOperation.ComparisonResult.Differences);
|
||||||
|
Assert.AreEqual("The operation was canceled.", schemaCompareOperation.ErrorMessage);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -851,6 +855,7 @@ WITH VALUES
|
|||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||||
|
|
||||||
// try to exclude
|
// try to exclude
|
||||||
DiffEntry t2Diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.Where(x => x.SourceObject != null && x.SourceObject.Name.Parts[1] == "t2").First(), null);
|
DiffEntry t2Diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.Where(x => x.SourceObject != null && x.SourceObject.Name.Parts[1] == "t2").First(), null);
|
||||||
@@ -914,6 +919,57 @@ WITH VALUES
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Verify the schema compare warning messages being excluded
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public async Task VerifySchemaCompareWarningsBeingExcluded()
|
||||||
|
{
|
||||||
|
var result = SchemaCompareTestUtils.GetLiveAutoCompleteTestObjects();
|
||||||
|
SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "SchemaCompareSource");
|
||||||
|
SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SchemaCompareEndpointInfo sourceInfo = new SchemaCompareEndpointInfo();
|
||||||
|
SchemaCompareEndpointInfo targetInfo = new SchemaCompareEndpointInfo();
|
||||||
|
|
||||||
|
sourceInfo.EndpointType = SchemaCompareEndpointType.Database;
|
||||||
|
sourceInfo.DatabaseName = sourceDb.DatabaseName;
|
||||||
|
targetInfo.EndpointType = SchemaCompareEndpointType.Database;
|
||||||
|
targetInfo.DatabaseName = targetDb.DatabaseName;
|
||||||
|
|
||||||
|
var schemaCompareParams = new SchemaCompareParams
|
||||||
|
{
|
||||||
|
SourceEndpointInfo = sourceInfo,
|
||||||
|
TargetEndpointInfo = targetInfo
|
||||||
|
};
|
||||||
|
|
||||||
|
// Do Schema compare
|
||||||
|
SchemaCompareOperation schemaCompareOperation = new SchemaCompareOperation(schemaCompareParams, result.ConnectionInfo, result.ConnectionInfo);
|
||||||
|
schemaCompareOperation.Execute(TaskExecutionMode.Execute);
|
||||||
|
|
||||||
|
// Expected 'data loss could occur' warning messages while comparing
|
||||||
|
var warnings = schemaCompareOperation.ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Warning)).Select(e => e.Message).Distinct().ToList();
|
||||||
|
var errors = schemaCompareOperation.ComparisonResult.GetErrors().Where(x => x.MessageType.Equals(Microsoft.SqlServer.Dac.DacMessageType.Error)).Select(e => e.Message).Distinct().ToList();
|
||||||
|
|
||||||
|
// Assertions:
|
||||||
|
// Target database have two tables created and will be shown as two differnces
|
||||||
|
Assert.AreEqual(2, schemaCompareOperation.ComparisonResult.Differences.Count());
|
||||||
|
// These two warnings are "data loss could occur" messages for two tables
|
||||||
|
Assert.AreEqual(2, warnings.Count);
|
||||||
|
// SC is successful with no errors, hence error message should be empty
|
||||||
|
Assert.AreEqual(0, errors.Count);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage, "Error message should be empty as the warnings being excluded");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// cleanup
|
||||||
|
sourceDb.Cleanup();
|
||||||
|
targetDb.Cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ValidateSchemaCompareWithExcludeIncludeResults(SchemaCompareOperation schemaCompareOperation)
|
private void ValidateSchemaCompareWithExcludeIncludeResults(SchemaCompareOperation schemaCompareOperation)
|
||||||
{
|
{
|
||||||
schemaCompareOperation.Execute(TaskExecutionMode.Execute);
|
schemaCompareOperation.Execute(TaskExecutionMode.Execute);
|
||||||
@@ -921,6 +977,7 @@ WITH VALUES
|
|||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||||
|
|
||||||
// create Diff Entry from Difference
|
// create Diff Entry from Difference
|
||||||
DiffEntry diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.First(), null);
|
DiffEntry diff = SchemaCompareUtils.CreateDiffEntry(schemaCompareOperation.ComparisonResult.Differences.First(), null);
|
||||||
@@ -963,6 +1020,7 @@ WITH VALUES
|
|||||||
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
Assert.True(schemaCompareOperation.ComparisonResult.IsValid);
|
||||||
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
Assert.False(schemaCompareOperation.ComparisonResult.IsEqual);
|
||||||
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
|
||||||
|
Assert.IsNull(schemaCompareOperation.ErrorMessage);
|
||||||
|
|
||||||
SchemaCompareGenerateScriptOperation generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
|
SchemaCompareGenerateScriptOperation generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
|
||||||
generateScriptOperation.Execute(TaskExecutionMode.Script);
|
generateScriptOperation.Execute(TaskExecutionMode.Script);
|
||||||
|
|||||||
Reference in New Issue
Block a user