mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 17:23:27 -05:00
* unify requests-wip * wip * unify api * fix test * add credential handler * fix credential handler issue. * generic type update * fix scripting for user
143 lines
7.7 KiB
C#
143 lines
7.7 KiB
C#
//
|
|
// Copyright (c) Microsoft. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
//
|
|
|
|
#nullable disable
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.SqlServer.Management.Smo;
|
|
using Microsoft.SqlTools.Hosting.Protocol;
|
|
using Microsoft.SqlTools.ServiceLayer.Connection;
|
|
using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility;
|
|
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts;
|
|
using Microsoft.SqlTools.ServiceLayer.QueryExecution;
|
|
using Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage;
|
|
using Microsoft.SqlTools.ServiceLayer.SqlContext;
|
|
using Microsoft.SqlTools.ServiceLayer.Test.Common;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using static Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility.LiveConnectionHelper;
|
|
|
|
namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|
{
|
|
public class ObjectManagementServiceTests
|
|
{
|
|
private const string TableQuery = @"CREATE TABLE testTable1_RenamingTable (c1 int)";
|
|
private const string OwnerUri = "testDB";
|
|
private SqlTestDb testDb;
|
|
private Mock<RequestContext<RenameRequestResponse>> requestContextMock;
|
|
|
|
[SetUp]
|
|
public async Task TestInitialize()
|
|
{
|
|
this.testDb = await SqlTestDb.CreateNewAsync(serverType: TestServerType.OnPrem, query: TableQuery, dbNamePrefix: "RenameTest");
|
|
requestContextMock = new Mock<RequestContext<RenameRequestResponse>>();
|
|
TestConnectionResult connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync(testDb.DatabaseName, OwnerUri, ConnectionType.Default);
|
|
}
|
|
|
|
[TearDown]
|
|
public async Task TearDownTestDatabase()
|
|
{
|
|
await SqlTestDb.DropDatabase(testDb.DatabaseName);
|
|
}
|
|
|
|
[Test]
|
|
public async Task TestRenameTable()
|
|
{
|
|
//arrange & act
|
|
await ObjectManagementTestUtils.Service.HandleRenameRequest(this.InitRequestParams("RenamingTable", String.Format("Server/Database[@Name='{0}']/Table[@Name='testTable1_RenamingTable' and @Schema='dbo']", testDb.DatabaseName)), requestContextMock.Object);
|
|
|
|
//assert
|
|
requestContextMock.Verify(x => x.SendResult(It.IsAny<RenameRequestResponse>()));
|
|
|
|
Query queryRenameObject = ExecuteQuery("SELECT * FROM " + testDb.DatabaseName + ".sys.tables WHERE name='RenamingTable'");
|
|
Assert.That(queryRenameObject.HasExecuted, Is.True, "The query to check for the renamed table was not executed");
|
|
Assert.That(queryRenameObject.HasErrored, Is.False, "There were errors on the execution of the query to check for the renamed table");
|
|
Assert.That(queryRenameObject.Batches[0].ResultSets[0].RowCount, Is.EqualTo(1), "Did not find the table with the new name after the rename operation");
|
|
|
|
Query queryOldObject = ExecuteQuery("SELECT * FROM " + testDb.DatabaseName + ".sys.tables WHERE name='testTable1_RenamingTable'");
|
|
Assert.That(queryOldObject.HasExecuted, Is.True, "The query to check for the old table was not executed");
|
|
Assert.That(queryOldObject.HasErrored, Is.False, "There were errors on the execution of the query to check for the old table");
|
|
Assert.That(queryOldObject.Batches[0].ResultSets[0].RowCount, Is.EqualTo(0), "Did find the old table which should have been renamed");
|
|
}
|
|
|
|
[Test]
|
|
public async Task TestRenameColumn()
|
|
{
|
|
//arrange & act
|
|
await ObjectManagementTestUtils.Service.HandleRenameRequest(this.InitRequestParams("RenameColumn", String.Format("Server/Database[@Name='{0}']/Table[@Name='testTable1_RenamingTable' and @Schema='dbo']/Column[@Name='C1']", testDb.DatabaseName)), requestContextMock.Object);
|
|
|
|
//assert
|
|
requestContextMock.Verify(x => x.SendResult(It.IsAny<RenameRequestResponse>()));
|
|
|
|
Query queryRenameObject = ExecuteQuery("SELECT * FROM " + testDb.DatabaseName + ".sys.columns WHERE name='RenameColumn'");
|
|
Assert.That(queryRenameObject.HasExecuted, Is.True, "The query to check for the renamed column was not executed");
|
|
Assert.That(queryRenameObject.HasErrored, Is.False, "There were errors on the execution of the query to check for the renamed column");
|
|
Assert.That(queryRenameObject.Batches[0].ResultSets[0].RowCount, Is.EqualTo(1), "Did not find the column with the new name after the rename operation");
|
|
|
|
Query queryOldObject = ExecuteQuery("SELECT * FROM " + testDb.DatabaseName + ".sys.columns WHERE name='C1'");
|
|
Assert.That(queryOldObject.HasExecuted, Is.True, "The query to check for the old column was not executed");
|
|
Assert.That(queryOldObject.HasErrored, Is.False, "There were errors on the execution of the query to check for the old column");
|
|
Assert.That(queryOldObject.Batches[0].ResultSets[0].RowCount, Is.EqualTo(0), "Did find the old column which should have been renamed");
|
|
}
|
|
|
|
[Test]
|
|
public async Task TestRenameColumnNotExisting()
|
|
{
|
|
Assert.That(async () =>
|
|
{
|
|
await ObjectManagementTestUtils.Service.HandleRenameRequest(this.InitRequestParams("RenameColumn", String.Format("Server/Database[@Name='{0}']/Table[@Name='testTable1_RenamingTable' and @Schema='dbo']/Column[@Name='C1_NOT']", testDb.DatabaseName)), requestContextMock.Object);
|
|
}, Throws.Exception.TypeOf<FailedOperationException>(), "Did find the column, which should not have existed");
|
|
}
|
|
|
|
[Test]
|
|
public async Task TestRenameTableNotExisting()
|
|
{
|
|
Assert.That(async () =>
|
|
{
|
|
await ObjectManagementTestUtils.Service.HandleRenameRequest(this.InitRequestParams("RenamingTable", String.Format("Server/Database[@Name='{0}']/Table[@Name='testTable1_Not' and @Schema='dbo']", testDb.DatabaseName)), requestContextMock.Object);
|
|
}, Throws.Exception.TypeOf<FailedOperationException>(), "Did find the table, which should not have existed");
|
|
}
|
|
|
|
[Test]
|
|
public async Task TestConnectionNotFound()
|
|
{
|
|
var testRenameRequestParams = new RenameRequestParams
|
|
{
|
|
NewName = "RenamingTable",
|
|
ConnectionUri = "NOT_EXISTING",
|
|
ObjectUrn = String.Format("Server/Database[@Name='{0}']/Table[@Name='testTable1_Not' and @Schema='dbo']", testDb.DatabaseName),
|
|
};
|
|
Assert.That(async () =>
|
|
{
|
|
await ObjectManagementTestUtils.Service.HandleRenameRequest(testRenameRequestParams, requestContextMock.Object);
|
|
|
|
}, Throws.Exception.TypeOf<Exception>(), "Did find the connection, which should not have existed");
|
|
}
|
|
|
|
private RenameRequestParams InitRequestParams(string newName, string UrnOfObject)
|
|
{
|
|
return new RenameRequestParams
|
|
{
|
|
NewName = newName,
|
|
ConnectionUri = OwnerUri,
|
|
ObjectUrn = UrnOfObject,
|
|
};
|
|
}
|
|
|
|
private Query ExecuteQuery(string queryText)
|
|
{
|
|
TestConnectionResult conResult = LiveConnectionHelper.InitLiveConnectionInfo();
|
|
ConnectionInfo connInfo = conResult.ConnectionInfo;
|
|
IFileStreamFactory fileStreamFactory = MemoryFileSystem.GetFileStreamFactory(new ConcurrentDictionary<string, byte[]>());
|
|
|
|
QueryExecutionSettings settings = new QueryExecutionSettings() { IsSqlCmdMode = false };
|
|
Query query = new Query(queryText, connInfo, settings, fileStreamFactory);
|
|
query.Execute();
|
|
query.ExecutionTask.Wait();
|
|
return query;
|
|
}
|
|
}
|
|
} |