From acf3e92e83214892b64d3d933504fc34c9096102 Mon Sep 17 00:00:00 2001 From: Kim Santiago <31145923+kisantia@users.noreply.github.com> Date: Fri, 4 Nov 2022 10:33:25 -0700 Subject: [PATCH] Fix schema compare project test cleanup (#1746) * cleanup .sqlproj in finally * unique folder per test run * fix path --- .../SchemaCompareServiceTests.cs | 100 +++++++++++------- .../SchemaCompare/SchemaCompareTestUtils.cs | 9 +- 2 files changed, 68 insertions(+), 41 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs index 02a14335..1f44b004 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs @@ -171,10 +171,13 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget"); + string? sourceProjectPath = null; + string? targetProjectPath = null; + try { - string sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] sourceScripts = SchemaCompareTestUtils.GetProjectScripts(sourceProjectPath); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); @@ -190,15 +193,15 @@ WITH VALUES SchemaCompareOperation schemaCompareOperation = new(schemaCompareParams, null, null); ValidateSchemaCompareWithExcludeIncludeResults(schemaCompareOperation); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } @@ -254,9 +257,11 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget"); + string? targetProjectPath = null; + try { - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Database, sourceDb.DatabaseName); @@ -270,14 +275,14 @@ WITH VALUES SchemaCompareOperation schemaCompareOperation = new(schemaCompareParams, result.ConnectionInfo, null); ValidateSchemaCompareWithExcludeIncludeResults(schemaCompareOperation); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } @@ -325,11 +330,15 @@ WITH VALUES // create dacpacs from databases SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget"); + + string? sourceDacpacFilePath = null; + string? targetProjectPath = null; + try { - string sourceDacpacFilePath = SchemaCompareTestUtils.CreateDacpac(sourceDb); + sourceDacpacFilePath = SchemaCompareTestUtils.CreateDacpac(sourceDb); - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Dacpac, sourceDacpacFilePath); @@ -344,14 +353,15 @@ WITH VALUES SchemaCompareOperation schemaCompareOperation = new(schemaCompareParams, null, null); ValidateSchemaCompareWithExcludeIncludeResults(schemaCompareOperation); - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath); - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath); + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } @@ -464,9 +474,11 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "SchemaCompareTarget"); + string? sourceProjectPath = null; + try { - string sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); + sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); string[] sourceScripts = SchemaCompareTestUtils.GetProjectScripts(sourceProjectPath); SchemaCompareEndpointInfo sourceInfo = new(); @@ -495,14 +507,14 @@ WITH VALUES }; ValidateSchemaCompareScriptGenerationWithExcludeIncludeResults(schemaCompareOperation, generateScriptParams); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); } } @@ -588,9 +600,11 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "SchemaCompareTarget"); + string? sourceProjectPath = null; + try { - string sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); + sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); string[] sourceScripts = SchemaCompareTestUtils.GetProjectScripts(sourceProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Project, Path.Combine(sourceProjectPath, "SourceProject.sqlproj"), sourceScripts); @@ -633,14 +647,14 @@ WITH VALUES Assert.True(schemaCompareOperation.ComparisonResult.IsValid); Assert.True(schemaCompareOperation.ComparisonResult.IsEqual); Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); } } @@ -723,11 +737,14 @@ WITH VALUES string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SchemaCompareTest"); Directory.CreateDirectory(folderPath); + string? sourceDacpacFilePath = null; + string? targetProjectPath = null; + try { - string sourceDacpacFilePath = SchemaCompareTestUtils.CreateDacpac(sourceDb); + sourceDacpacFilePath = SchemaCompareTestUtils.CreateDacpac(sourceDb); - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Dacpac, sourceDacpacFilePath); @@ -778,15 +795,15 @@ WITH VALUES Assert.True(schemaCompareOperation.ComparisonResult.IsValid); Assert.True(schemaCompareOperation.ComparisonResult.IsEqual); Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath); - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceDacpacFilePath); + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } @@ -801,10 +818,12 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "SchemaCompareTarget"); + string? targetProjectPath = null; + try { - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Database, sourceDb.DatabaseName); @@ -855,14 +874,14 @@ WITH VALUES Assert.True(schemaCompareOperation.ComparisonResult.IsValid); Assert.True(schemaCompareOperation.ComparisonResult.IsEqual); Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } @@ -875,11 +894,14 @@ WITH VALUES SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "SchemaCompareSource"); SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "SchemaCompareTarget"); + string? sourceProjectPath = null; + string? targetProjectPath = null; + try { - string sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); + sourceProjectPath = SchemaCompareTestUtils.CreateProject(sourceDb, "SourceProject"); string[] sourceScripts = SchemaCompareTestUtils.GetProjectScripts(sourceProjectPath); - string targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); + targetProjectPath = SchemaCompareTestUtils.CreateProject(targetDb, "TargetProject"); string[] targetScripts = SchemaCompareTestUtils.GetProjectScripts(targetProjectPath); SchemaCompareEndpointInfo sourceInfo = CreateTestEndpoint(SchemaCompareEndpointType.Project, Path.Combine(sourceProjectPath, "SourceProject.sqlproj"), sourceScripts); @@ -930,15 +952,15 @@ WITH VALUES Assert.True(schemaCompareOperation.ComparisonResult.IsValid); Assert.True(schemaCompareOperation.ComparisonResult.IsEqual); Assert.That(schemaCompareOperation.ComparisonResult.Differences, Is.Empty); - - // cleanup - SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); - SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } finally { sourceDb.Cleanup(); targetDb.Cleanup(); + + // cleanup + SchemaCompareTestUtils.VerifyAndCleanup(sourceProjectPath); + SchemaCompareTestUtils.VerifyAndCleanup(targetProjectPath); } } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs index 0f265ad8..3450386d 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs @@ -24,8 +24,13 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SchemaCompare { private static string sqlProjectsFolder = Path.Combine("..", "..", "..", "SchemaCompare", "SqlProjects"); - internal static void VerifyAndCleanup(string path) + internal static void VerifyAndCleanup(string? path) { + if (path == null) + { + return; + } + // verify it was created... Assert.True(File.Exists(path) || Directory.Exists(path), $"File or directory {path} was expected to exist but did not"); @@ -98,7 +103,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SchemaCompare /// Full path to the .sqlproj internal static string CreateSqlProj(string projectName) { - string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SchemaCompareTest", projectName); + string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SchemaCompareTest", $"{TestContext.CurrentContext?.Test?.Name}_{projectName}_{DateTime.Now.Ticks.ToString()}"); Directory.CreateDirectory(folderPath); string sqlprojFilePath = Path.Combine(folderPath, projectName + ".sqlproj"); File.Copy(Path.Combine(sqlProjectsFolder, "emptyTemplate.sqlproj"), sqlprojFilePath);