Files
Alex Ma d3c28d358f Revert change to nunit and restore xunit (#2249)
* Revert "Added new test framework (test) (#2247)"

This reverts commit b2120269a7.

* Added assert Fail as a test
2023-09-22 13:07:48 -07:00

149 lines
5.9 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.Runtime.CompilerServices;
using System.Threading.Tasks;
using Microsoft.SqlTools.ServiceLayer.Connection.Contracts;
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Contracts;
using Microsoft.SqlTools.ServiceLayer.Test.Common;
using Xunit;
namespace Microsoft.SqlTools.ServiceLayer.PerfTests
{
public class ObjectExplorerTests
{
[Fact]
[CreateTestDb(TestServerType.Azure)]
public async Task CreateSessionAzure()
{
TestServerType serverType = TestServerType.Azure;
await VerifyCreateSession(serverType);
}
[Fact]
[CreateTestDb(TestServerType.OnPrem)]
public async Task CreateSessionOnPrem()
{
TestServerType serverType = TestServerType.OnPrem;
await VerifyCreateSession(serverType);
}
[Fact]
[CreateTestDb(TestServerType.OnPrem)]
public async Task ExpandDatabasesOnPrem()
{
TestServerType serverType = TestServerType.OnPrem;
await VerifyExpand(serverType, SqlTestDb.MasterDatabaseName);
}
[Fact]
[CreateTestDb(TestServerType.OnPrem)]
public async Task ExpandOneDatabaseOnPrem()
{
TestServerType serverType = TestServerType.OnPrem;
await VerifyExpand(serverType, Common.PerfTestDatabaseName);
}
[Fact]
[CreateTestDb(TestServerType.Azure)]
public async Task ExpandDatabasesAzure()
{
TestServerType serverType = TestServerType.Azure;
await VerifyExpand(serverType, SqlTestDb.MasterDatabaseName);
}
[Fact]
[CreateTestDb(TestServerType.Azure)]
public async Task ExpandOneDatabaseAzure()
{
TestServerType serverType = TestServerType.Azure;
await VerifyExpand(serverType, Common.PerfTestDatabaseName);
}
private async Task VerifyCreateSession(TestServerType serverType, [CallerMemberName] string testName = "")
{
await TestServiceDriverProvider.RunTestIterations(async (timer) =>
{
ConnectParams connectParams = TestServiceProvider.Instance.ConnectionProfileService.GetConnectionParameters(serverType, SqlTestDb.MasterDatabaseName);
using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
{
var result = await testService.CalculateRunTime(() => testService.RequestObjectExplorerCreateSession(connectParams.Connection), timer);
Assert.NotNull(result);
Assert.True(result.Success);
Assert.False(string.IsNullOrEmpty(result.SessionId), "Session id cannot be empty");
await testService.RequestObjectExplorerCloseSession(new ObjectExplorer.Contracts.CloseSessionParams
{
SessionId = result.SessionId
});
await testService.Disconnect(queryTempFile.FilePath);
}
}, testName);
}
private async Task VerifyExpand(TestServerType serverType, string databaseName, [CallerMemberName] string testName = "")
{
await TestServiceDriverProvider.RunTestIterations(async (timer) =>
{
ConnectParams connectParams = TestServiceProvider.Instance.ConnectionProfileService.GetConnectionParameters(serverType, databaseName);
using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
{
var result = await testService.CalculateRunTime(() => testService.RequestObjectExplorerCreateSession(connectParams.Connection), null);
Assert.NotNull(result);
Assert.True(result.Success);
Assert.False(string.IsNullOrEmpty(result.SessionId), "Session id cannot be empty");
await ExpandDatabase(testService, result.SessionId, result.RootNode, timer);
await testService.RequestObjectExplorerCloseSession(new ObjectExplorer.Contracts.CloseSessionParams
{
SessionId = result.SessionId
});
await testService.Disconnect(queryTempFile.FilePath);
}
}, testName);
}
private async Task<bool> ExpandDatabase(TestServiceDriverProvider testService, string sessionId, NodeInfo nodeInfo, TestTimer timer)
{
if (nodeInfo == null) return false;
bool foundNode = nodeInfo.NodePath.Contains("Database") || nodeInfo.NodeType == "Database";
var expandResult = await testService.CalculateRunTime(() => testService.RequestObjectExplorerExpand(new ObjectExplorer.Contracts.ExpandParams
{
SessionId = sessionId,
NodePath = nodeInfo.NodePath
}, 50000), foundNode ? timer : null);
Assert.NotNull(expandResult);
Assert.NotNull(expandResult.Nodes);
Assert.False(expandResult.Nodes == null, "Nodes are not valid");
if (!foundNode)
{
foreach (var node in expandResult.Nodes)
{
if (await ExpandDatabase(testService, sessionId, node, timer))
{
return true;
}
}
return false;
}
else
{
Console.WriteLine("Node Expanded " + nodeInfo.NodePath);
return true;
}
}
}
}