From f7c86a80cac191e6b315ce68035613afb6ffe016 Mon Sep 17 00:00:00 2001
From: Kim Santiago <31145923+kisantia@users.noreply.github.com>
Date: Mon, 10 Jun 2019 09:26:42 -0700
Subject: [PATCH] Open dacfx deploy script instead of saving to file path
(#822)
* open dacfx deploy script
* moving test db cleanups into finally blocks
---
.../Contracts/GenerateDeployScriptRequest.cs | 5 -
.../DacFx/DacFxService.cs | 15 +-
.../DacFx/GenerateDeployScriptOperation.cs | 22 +-
.../SchemaCompareGenerateScriptOperation.cs | 28 +-
.../DacFx/DacFxserviceTests.cs | 372 ++++++++++--------
.../SchemaCompareServiceOptionsTests.cs | 4 +-
.../SchemaCompareServiceTests.cs | 6 +-
.../SchemaCompare/SchemaCompareTestUtils.cs | 3 +-
8 files changed, 244 insertions(+), 211 deletions(-)
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateDeployScriptRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateDeployScriptRequest.cs
index d05ef8df..3d7dbbc0 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateDeployScriptRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateDeployScriptRequest.cs
@@ -13,11 +13,6 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx.Contracts
///
public class GenerateDeployScriptParams : DacFxParams
{
- ///
- /// Gets or sets the filepath where to save the generated script
- ///
- public string ScriptFilePath { get; set; }
-
///
/// Gets or sets whether a Deployment Report should be generated during deploy.
///
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs b/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs
index bf311aad..dc83d5b0 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs
@@ -164,11 +164,12 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
{
GenerateDeployScriptOperation operation = new GenerateDeployScriptOperation(parameters, connInfo);
SqlTask sqlTask = null;
- TaskMetadata metadata = TaskMetadata.Create(parameters, SR.GenerateScriptTaskName, operation, ConnectionServiceInstance);
-
- // want to show filepath in task history instead of server and database
- metadata.ServerName = parameters.ScriptFilePath;
- metadata.DatabaseName = string.Empty;
+ TaskMetadata metadata = new TaskMetadata();
+ metadata.TaskOperation = operation;
+ metadata.TaskExecutionMode = parameters.TaskExecutionMode;
+ metadata.ServerName = connInfo.ConnectionDetails.ServerName;
+ metadata.DatabaseName = parameters.DatabaseName;
+ metadata.Name = SR.GenerateScriptTaskName;
sqlTask = SqlTaskManagerInstance.CreateAndRun(metadata);
@@ -275,9 +276,9 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
/// For testing purpose only
///
///
- internal void PerformOperation(DacFxOperation operation)
+ internal void PerformOperation(DacFxOperation operation, TaskExecutionMode taskExecutionMode)
{
- operation.Execute(TaskExecutionMode.Execute);
+ operation.Execute(taskExecutionMode);
}
}
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DacFx/GenerateDeployScriptOperation.cs b/src/Microsoft.SqlTools.ServiceLayer/DacFx/GenerateDeployScriptOperation.cs
index d68cab29..e1fe7f6e 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/DacFx/GenerateDeployScriptOperation.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/DacFx/GenerateDeployScriptOperation.cs
@@ -21,6 +21,8 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
{
public GenerateDeployScriptParams Parameters { get; }
+ public PublishResult Result { get; set; }
+
public GenerateDeployScriptOperation(GenerateDeployScriptParams parameters, ConnectionInfo connInfo) : base(connInfo)
{
Validate.IsNotNull("parameters", parameters);
@@ -34,15 +36,23 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx
publishOptions.GenerateDeploymentReport = this.Parameters.GenerateDeploymentReport;
publishOptions.CancelToken = this.CancellationToken;
publishOptions.DeployOptions = this.GetDefaultDeployOptions();
- publishOptions.DatabaseScriptPath = this.Parameters.ScriptFilePath;
- // master script is only used if the target is Azure SQL db and the script contains all operations that must be done against the master database
- publishOptions.MasterDbScriptPath = Path.Combine(Path.GetDirectoryName(this.Parameters.ScriptFilePath), string.Concat("master_", Path.GetFileName(this.Parameters.ScriptFilePath)));
- PublishResult result = this.DacServices.Script(dacpac, this.Parameters.DatabaseName, publishOptions);
+ this.Result = this.DacServices.Script(dacpac, this.Parameters.DatabaseName, publishOptions);
- if(this.Parameters.GenerateDeploymentReport && !string.IsNullOrEmpty(this.Parameters.DeploymentReportFilePath))
+ // tests don't create a SqlTask, so only add the script when the SqlTask isn't null
+ if (this.SqlTask != null)
{
- File.WriteAllText(this.Parameters.DeploymentReportFilePath, result.DeploymentReport);
+ this.SqlTask.AddScript(SqlTaskStatus.Succeeded, Result.DatabaseScript);
+ if (!string.IsNullOrEmpty(this.Result.MasterDbScript))
+ {
+ // master script is only used if the target is Azure SQL db and the script contains all operations that must be done against the master database
+ this.SqlTask.AddScript(SqlTaskStatus.Succeeded, this.Result.MasterDbScript);
+ }
+ }
+
+ if (this.Parameters.GenerateDeploymentReport && !string.IsNullOrEmpty(this.Parameters.DeploymentReportFilePath))
+ {
+ File.WriteAllText(this.Parameters.DeploymentReportFilePath, this.Result.DeploymentReport);
}
}
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/SchemaCompare/SchemaCompareGenerateScriptOperation.cs b/src/Microsoft.SqlTools.ServiceLayer/SchemaCompare/SchemaCompareGenerateScriptOperation.cs
index 0a5c3d7c..7b09ed98 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/SchemaCompare/SchemaCompareGenerateScriptOperation.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/SchemaCompare/SchemaCompareGenerateScriptOperation.cs
@@ -49,12 +49,6 @@ namespace Microsoft.SqlTools.ServiceLayer.SchemaCompare
}
public void Execute(TaskExecutionMode mode)
- {
- Execute();
- AddScriptToTask();
- }
-
- public void Execute()
{
if (this.CancellationToken.IsCancellationRequested)
{
@@ -64,6 +58,17 @@ namespace Microsoft.SqlTools.ServiceLayer.SchemaCompare
try
{
this.ScriptGenerationResult = this.ComparisonResult.GenerateScript(this.Parameters.TargetDatabaseName);
+
+ // tests don't create a SqlTask, so only add the script when the SqlTask isn't null
+ if (this.SqlTask != null)
+ {
+ this.SqlTask.AddScript(SqlTaskStatus.Succeeded, this.ScriptGenerationResult.Script);
+ if (!string.IsNullOrEmpty(this.ScriptGenerationResult.MasterScript))
+ {
+ // master script is only used if the target is Azure SQL db and the script contains all operations that must be done against the master database
+ this.SqlTask.AddScript(SqlTaskStatus.Succeeded, ScriptGenerationResult.MasterScript);
+ }
+ }
}
catch (Exception e)
{
@@ -73,17 +78,6 @@ namespace Microsoft.SqlTools.ServiceLayer.SchemaCompare
}
}
- // Separated from Execute() since tests don't create SqlTasks
- public void AddScriptToTask()
- {
- this.SqlTask.AddScript(SqlTaskStatus.Succeeded, this.ScriptGenerationResult.Script);
- if (!string.IsNullOrEmpty(this.ScriptGenerationResult.MasterScript))
- {
- // master script is only used if the target is Azure SQL db and the script contains all operations that must be done against the master database
- this.SqlTask.AddScript(SqlTaskStatus.Succeeded, ScriptGenerationResult.MasterScript);
- }
- }
-
// The schema compare public api doesn't currently take a cancellation token so the operation can't be cancelled
public void Cancel()
{
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxserviceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxserviceTests.cs
index 08cbf5a9..8e6a4ee4 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxserviceTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxserviceTests.cs
@@ -57,19 +57,24 @@ CREATE TABLE [dbo].[table3]
string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
Directory.CreateDirectory(folderPath);
- var exportParams = new ExportParams
+ try
{
- DatabaseName = testdb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", testdb.DatabaseName))
- };
+ var exportParams = new ExportParams
+ {
+ DatabaseName = testdb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", testdb.DatabaseName))
+ };
- DacFxService service = new DacFxService();
- ExportOperation operation = new ExportOperation(exportParams, result.ConnectionInfo);
- service.PerformOperation(operation);
+ DacFxService service = new DacFxService();
+ ExportOperation operation = new ExportOperation(exportParams, result.ConnectionInfo);
+ service.PerformOperation(operation, TaskExecutionMode.Execute);
- // cleanup
- VerifyAndCleanup(exportParams.PackageFilePath);
- testdb.Cleanup();
+ VerifyAndCleanup(exportParams.PackageFilePath);
+ }
+ finally
+ {
+ testdb.Cleanup();
+ }
return requestContext;
}
@@ -78,42 +83,47 @@ CREATE TABLE [dbo].[table3]
{
// first export a bacpac
var result = GetLiveAutoCompleteTestObjects();
- var exportRequestContext = new Mock>();
- exportRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
-
- SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxImportTest");
- string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
- Directory.CreateDirectory(folderPath);
-
- var exportParams = new ExportParams
- {
- DatabaseName = sourceDb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", sourceDb.DatabaseName))
- };
-
- DacFxService service = new DacFxService();
- ExportOperation exportOperation = new ExportOperation(exportParams, result.ConnectionInfo);
- service.PerformOperation(exportOperation);
-
- // import the created bacpac
var importRequestContext = new Mock>();
importRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
- var importParams = new ImportParams
+ SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxImportTest");
+ SqlTestDb targetDb = null;
+ string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
+ Directory.CreateDirectory(folderPath);
+
+ try
{
- PackageFilePath = exportParams.PackageFilePath,
- DatabaseName = string.Concat(sourceDb.DatabaseName, "-imported")
- };
+ var exportParams = new ExportParams
+ {
+ DatabaseName = sourceDb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", sourceDb.DatabaseName))
+ };
- ImportOperation importOperation = new ImportOperation(importParams, result.ConnectionInfo);
- service.PerformOperation(importOperation);
- SqlTestDb targetDb = SqlTestDb.CreateFromExisting(importParams.DatabaseName);
+ DacFxService service = new DacFxService();
+ ExportOperation exportOperation = new ExportOperation(exportParams, result.ConnectionInfo);
+ service.PerformOperation(exportOperation, TaskExecutionMode.Execute);
- // cleanup
- VerifyAndCleanup(exportParams.PackageFilePath);
- sourceDb.Cleanup();
- targetDb.Cleanup();
+ // import the created bacpac
+ var importParams = new ImportParams
+ {
+ PackageFilePath = exportParams.PackageFilePath,
+ DatabaseName = string.Concat(sourceDb.DatabaseName, "-imported")
+ };
+ ImportOperation importOperation = new ImportOperation(importParams, result.ConnectionInfo);
+ service.PerformOperation(importOperation, TaskExecutionMode.Execute);
+ targetDb = SqlTestDb.CreateFromExisting(importParams.DatabaseName);
+
+ VerifyAndCleanup(exportParams.PackageFilePath);
+ }
+ finally
+ {
+ sourceDb.Cleanup();
+ if (targetDb != null)
+ {
+ targetDb.Cleanup();
+ }
+ }
return importRequestContext;
}
@@ -127,22 +137,26 @@ CREATE TABLE [dbo].[table3]
string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
Directory.CreateDirectory(folderPath);
- var extractParams = new ExtractParams
+ try
{
- DatabaseName = testdb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", testdb.DatabaseName)),
- ApplicationName = "test",
- ApplicationVersion = "1.0.0.0"
- };
+ var extractParams = new ExtractParams
+ {
+ DatabaseName = testdb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", testdb.DatabaseName)),
+ ApplicationName = "test",
+ ApplicationVersion = "1.0.0.0"
+ };
- DacFxService service = new DacFxService();
- ExtractOperation operation = new ExtractOperation(extractParams, result.ConnectionInfo);
- service.PerformOperation(operation);
-
- // cleanup
- VerifyAndCleanup(extractParams.PackageFilePath);
- testdb.Cleanup();
+ DacFxService service = new DacFxService();
+ ExtractOperation operation = new ExtractOperation(extractParams, result.ConnectionInfo);
+ service.PerformOperation(operation, TaskExecutionMode.Execute);
+ VerifyAndCleanup(extractParams.PackageFilePath);
+ }
+ finally
+ {
+ testdb.Cleanup();
+ }
return requestContext;
}
@@ -150,46 +164,50 @@ CREATE TABLE [dbo].[table3]
{
// first extract a db to have a dacpac to import later
var result = GetLiveAutoCompleteTestObjects();
- var extractRequestContext = new Mock>();
- extractRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
-
- SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxDeployTest");
- string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
- Directory.CreateDirectory(folderPath);
-
- var extractParams = new ExtractParams
- {
- DatabaseName = sourceDb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
- ApplicationName = "test",
- ApplicationVersion = "1.0.0.0"
- };
-
- DacFxService service = new DacFxService();
- ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
- service.PerformOperation(extractOperation);
-
- // deploy the created dacpac
var deployRequestContext = new Mock>();
deployRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
+ SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxDeployTest");
+ SqlTestDb targetDb = null;
+ string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
+ Directory.CreateDirectory(folderPath);
- var deployParams = new DeployParams
+ try
{
- PackageFilePath = extractParams.PackageFilePath,
- DatabaseName = string.Concat(sourceDb.DatabaseName, "-deployed"),
- UpgradeExisting = false
- };
+ var extractParams = new ExtractParams
+ {
+ DatabaseName = sourceDb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
+ ApplicationName = "test",
+ ApplicationVersion = "1.0.0.0"
+ };
- DeployOperation deployOperation = new DeployOperation(deployParams, result.ConnectionInfo);
- service.PerformOperation(deployOperation);
- SqlTestDb targetDb = SqlTestDb.CreateFromExisting(deployParams.DatabaseName);
+ DacFxService service = new DacFxService();
+ ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
+ service.PerformOperation(extractOperation, TaskExecutionMode.Execute);
- // cleanup
- VerifyAndCleanup(extractParams.PackageFilePath);
- sourceDb.Cleanup();
- targetDb.Cleanup();
+ // deploy the created dacpac
+ var deployParams = new DeployParams
+ {
+ PackageFilePath = extractParams.PackageFilePath,
+ DatabaseName = string.Concat(sourceDb.DatabaseName, "-deployed"),
+ UpgradeExisting = false
+ };
+ DeployOperation deployOperation = new DeployOperation(deployParams, result.ConnectionInfo);
+ service.PerformOperation(deployOperation, TaskExecutionMode.Execute);
+ targetDb = SqlTestDb.CreateFromExisting(deployParams.DatabaseName);
+
+ VerifyAndCleanup(extractParams.PackageFilePath);
+ }
+ finally
+ {
+ sourceDb.Cleanup();
+ if (targetDb != null)
+ {
+ targetDb.Cleanup();
+ }
+ }
return deployRequestContext;
}
@@ -203,33 +221,36 @@ CREATE TABLE [dbo].[table3]
string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
Directory.CreateDirectory(folderPath);
- var exportParams = new ExportParams
- {
- DatabaseName = testdb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", testdb.DatabaseName))
- };
-
- DacFxService service = new DacFxService();
- ExportOperation operation = new ExportOperation(exportParams, result.ConnectionInfo);
-
- // set cancellation token to cancel
- operation.Cancel();
- OperationCanceledException expectedException = null;
-
try
{
- service.PerformOperation(operation);
+ var exportParams = new ExportParams
+ {
+ DatabaseName = testdb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.bacpac", testdb.DatabaseName))
+ };
+
+ DacFxService service = new DacFxService();
+ ExportOperation operation = new ExportOperation(exportParams, result.ConnectionInfo);
+
+ // set cancellation token to cancel
+ operation.Cancel();
+ OperationCanceledException expectedException = null;
+
+ try
+ {
+ service.PerformOperation(operation, TaskExecutionMode.Execute);
+ }
+ catch (OperationCanceledException canceledException)
+ {
+ expectedException = canceledException;
+ }
+
+ Assert.NotNull(expectedException);
}
- catch (OperationCanceledException canceledException)
+ finally
{
- expectedException = canceledException;
+ testdb.Cleanup();
}
-
- Assert.NotNull(expectedException);
-
- // cleanup
- testdb.Cleanup();
-
return requestContext;
}
@@ -239,95 +260,106 @@ CREATE TABLE [dbo].[table3]
{
// first extract a dacpac
var result = GetLiveAutoCompleteTestObjects();
- var extractRequestContext = new Mock>();
- extractRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
-
- SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxGenerateScriptTest");
- string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
- Directory.CreateDirectory(folderPath);
-
- var extractParams = new ExtractParams
- {
- DatabaseName = sourceDb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
- ApplicationName = "test",
- ApplicationVersion = "1.0.0.0"
- };
-
- DacFxService service = new DacFxService();
- ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
- service.PerformOperation(extractOperation);
-
- // generate script
var generateScriptRequestContext = new Mock>();
generateScriptRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
+ SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "DacFxGenerateScriptTest");
+ SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, null, "DacFxGenerateScriptTest");
- var generateScriptParams = new GenerateDeployScriptParams
+ string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
+ Directory.CreateDirectory(folderPath);
+
+ try
{
- PackageFilePath = extractParams.PackageFilePath,
- DatabaseName = string.Concat(sourceDb.DatabaseName, "-deployed"),
- ScriptFilePath = Path.Combine(folderPath, string.Concat(sourceDb.DatabaseName, "_", "UpgradeDACScript.sql"))
- };
+ var extractParams = new ExtractParams
+ {
+ DatabaseName = sourceDb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
+ ApplicationName = "test",
+ ApplicationVersion = "1.0.0.0"
+ };
- GenerateDeployScriptOperation generateScriptOperation = new GenerateDeployScriptOperation(generateScriptParams, result.ConnectionInfo);
- service.PerformOperation(generateScriptOperation);
- SqlTestDb targetDb = SqlTestDb.CreateFromExisting(generateScriptParams.DatabaseName);
+ DacFxService service = new DacFxService();
+ ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
+ service.PerformOperation(extractOperation, TaskExecutionMode.Execute);
- // cleanup
- VerifyAndCleanup(generateScriptParams.ScriptFilePath);
- VerifyAndCleanup(extractParams.PackageFilePath);
- sourceDb.Cleanup();
- targetDb.Cleanup();
+ // generate script
+ var generateScriptParams = new GenerateDeployScriptParams
+ {
+ PackageFilePath = extractParams.PackageFilePath,
+ DatabaseName = targetDb.DatabaseName
+ };
+ // Generate script for deploying source dacpac to target db
+ GenerateDeployScriptOperation generateScriptOperation = new GenerateDeployScriptOperation(generateScriptParams, result.ConnectionInfo);
+ service.PerformOperation(generateScriptOperation, TaskExecutionMode.Script);
+
+ // Verify script was generated
+ Assert.NotEmpty(generateScriptOperation.Result.DatabaseScript);
+ Assert.Contains("CREATE TABLE", generateScriptOperation.Result.DatabaseScript);
+
+ VerifyAndCleanup(extractParams.PackageFilePath);
+ }
+ finally
+ {
+ sourceDb.Cleanup();
+ targetDb.Cleanup();
+ }
return generateScriptRequestContext;
}
private async Task>> SendAndValidateGenerateDeployPlanRequest()
{
var result = GetLiveAutoCompleteTestObjects();
- SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "DacFxGenerateDeployPlanTest");
+ var generateDeployPlanRequestContext = new Mock>();
+ generateDeployPlanRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
+ SqlTestDb sourceDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, SourceScript, "DacFxGenerateDeployPlanTest");
+ SqlTestDb targetDb = null;
DacFxService service = new DacFxService();
string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");
Directory.CreateDirectory(folderPath);
- var extractParams = new ExtractParams
+ try
{
- DatabaseName = sourceDb.DatabaseName,
- PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
- ApplicationName = "test",
- ApplicationVersion = "1.0.0.0"
- };
+ var extractParams = new ExtractParams
+ {
+ DatabaseName = sourceDb.DatabaseName,
+ PackageFilePath = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
+ ApplicationName = "test",
+ ApplicationVersion = "1.0.0.0"
+ };
- ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
- service.PerformOperation(extractOperation);
+ ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);
+ service.PerformOperation(extractOperation, TaskExecutionMode.Execute);
- // generate deploy plan for deploying dacpac to targetDb
- var generateDeployPlanRequestContext = new Mock>();
- generateDeployPlanRequestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object()));
+ // generate deploy plan for deploying dacpac to targetDb
+ targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "DacFxGenerateDeployPlanTestTarget");
- SqlTestDb targetDb = await SqlTestDb.CreateNewAsync(TestServerType.OnPrem, false, null, TargetScript, "DacFxGenerateDeployPlanTestTarget");
+ var generateDeployPlanParams = new GenerateDeployPlanParams
+ {
+ PackageFilePath = extractParams.PackageFilePath,
+ DatabaseName = targetDb.DatabaseName,
+ };
- var generateDeployPlanParams = new GenerateDeployPlanParams
+ GenerateDeployPlanOperation generateDeployPlanOperation = new GenerateDeployPlanOperation(generateDeployPlanParams, result.ConnectionInfo);
+ service.PerformOperation(generateDeployPlanOperation, TaskExecutionMode.Execute);
+ string report = generateDeployPlanOperation.DeployReport;
+ Assert.NotNull(report);
+ Assert.Contains("Create", report);
+ Assert.Contains("Drop", report);
+ Assert.Contains("Alter", report);
+
+ VerifyAndCleanup(extractParams.PackageFilePath);
+ }
+ finally
{
- PackageFilePath = extractParams.PackageFilePath,
- DatabaseName = targetDb.DatabaseName,
- };
-
- GenerateDeployPlanOperation generateDeployPlanOperation = new GenerateDeployPlanOperation(generateDeployPlanParams, result.ConnectionInfo);
- service.PerformOperation(generateDeployPlanOperation);
- string report = generateDeployPlanOperation.DeployReport;
- Assert.NotNull(report);
- Assert.Contains("Create", report);
- Assert.Contains("Drop", report);
- Assert.Contains("Alter", report);
-
- // cleanup
- VerifyAndCleanup(extractParams.PackageFilePath);
- sourceDb.Cleanup();
- targetDb.Cleanup();
-
+ sourceDb.Cleanup();
+ if (targetDb != null)
+ {
+ targetDb.Cleanup();
+ }
+ }
return generateDeployPlanRequestContext;
}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceOptionsTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceOptionsTests.cs
index f30b4f2e..7a8ece6c 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceOptionsTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceOptionsTests.cs
@@ -266,7 +266,7 @@ END
};
SchemaCompareGenerateScriptOperation generateScriptOperation1 = new SchemaCompareGenerateScriptOperation(generateScriptParams1, schemaCompareOperation1.ComparisonResult);
- generateScriptOperation1.Execute();
+ generateScriptOperation1.Execute(TaskExecutionMode.Script);
// validate script generation failed because there were no differences
Assert.False(generateScriptOperation1.ScriptGenerationResult.Success);
@@ -293,7 +293,7 @@ END
};
SchemaCompareGenerateScriptOperation generateScriptOperation2 = new SchemaCompareGenerateScriptOperation(generateScriptParams2, schemaCompareOperation2.ComparisonResult);
- generateScriptOperation2.Execute();
+ generateScriptOperation2.Execute(TaskExecutionMode.Script);
// validate script generation succeeded
Assert.True(generateScriptOperation2.ScriptGenerationResult.Success);
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs
index 64bb84ec..2e7d3cf0 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareServiceTests.cs
@@ -448,7 +448,7 @@ CREATE TABLE [dbo].[table3]
Assert.NotNull(schemaCompareOperation.ComparisonResult.Differences);
SchemaCompareGenerateScriptOperation generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
- generateScriptOperation.Execute();
+ generateScriptOperation.Execute(TaskExecutionMode.Script);
Assert.True(generateScriptOperation.ScriptGenerationResult.Success);
string initialScript = generateScriptOperation.ScriptGenerationResult.Script;
@@ -472,7 +472,7 @@ CREATE TABLE [dbo].[table3]
Assert.True(initial == afterExclude, $"Changes should be same again after excluding/including, before {initial}, now {afterExclude}");
generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
- generateScriptOperation.Execute();
+ generateScriptOperation.Execute(TaskExecutionMode.Script);
Assert.True(generateScriptOperation.ScriptGenerationResult.Success);
string afterExcludeScript = generateScriptOperation.ScriptGenerationResult.Script;
@@ -493,7 +493,7 @@ CREATE TABLE [dbo].[table3]
Assert.True(initial == afterInclude, $"Changes should be same again after excluding/including:{initial}, now {afterInclude}");
generateScriptOperation = new SchemaCompareGenerateScriptOperation(generateScriptParams, schemaCompareOperation.ComparisonResult);
- generateScriptOperation.Execute();
+ generateScriptOperation.Execute(TaskExecutionMode.Script);
Assert.True(generateScriptOperation.ScriptGenerationResult.Success);
string afterIncludeScript = generateScriptOperation.ScriptGenerationResult.Script;
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs
index f764304d..9393f311 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/SchemaCompare/SchemaCompareTestUtils.cs
@@ -6,6 +6,7 @@
using Microsoft.SqlTools.ServiceLayer.DacFx;
using Microsoft.SqlTools.ServiceLayer.DacFx.Contracts;
using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility;
+using Microsoft.SqlTools.ServiceLayer.TaskServices;
using Microsoft.SqlTools.ServiceLayer.Test.Common;
using NUnit.Framework;
using System;
@@ -44,7 +45,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SchemaCompare
DacFxService service = new DacFxService();
ExtractOperation operation = new ExtractOperation(extractParams, result.ConnectionInfo);
- service.PerformOperation(operation);
+ service.PerformOperation(operation, TaskExecutionMode.Execute);
return extractParams.PackageFilePath;
}