3647 Kusto Refresh Logic (#1067)

* 3647 Renamed ParentMetadata to DatabaseMetadata in FolderMetadata.cs. Removed Refresh function from IDataSource and DataSourceBase since it's not used outside of KustoDataSource. Added unit tests for ServerNode.cs. Removed unused constructor from TreeNode and unused AddChild function.

* 3647 Refactored KustoDataSource. Moved Set logic for DatabaseMetadata and columns into separate functions

* 3647 Reverted Rename of ParentMetadata in FolderMetadata. Reverted removal of Refresh function from DataSourceBase and IDatasource

* 3647 Renamed SmoModel directories to DataSourceModel in Kusto projects.

* 3647 Removed reference to Kusto.ServiceLayer in SqlTools.ServiceLayer
This commit is contained in:
Justin M
2020-09-08 08:01:39 -07:00
committed by GitHub
parent 479e5242ff
commit cd1e4f5ec5
12 changed files with 266 additions and 103 deletions

View File

@@ -0,0 +1,160 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Microsoft.Kusto.ServiceLayer.Connection.Contracts;
using Microsoft.Kusto.ServiceLayer.DataSource;
using Microsoft.Kusto.ServiceLayer.DataSource.Metadata;
using Microsoft.Kusto.ServiceLayer.ObjectExplorer.DataSourceModel;
using Microsoft.Kusto.ServiceLayer.ObjectExplorer.Nodes;
using Microsoft.Kusto.ServiceLayer.Utility;
using Microsoft.SqlTools.Extensibility;
using Moq;
using NUnit.Framework;
namespace Microsoft.Kusto.ServiceLayer.UnitTests.ObjectExplorer.DataSourceModel
{
public class ServerNodeTests
{
[Test]
public void ServerNode_ThrowsException_NullConnectionParam()
{
ConnectionCompleteParams param = null;
var serviceProviderMock = new Mock<IMultiServiceProvider>();
Assert.Throws<ArgumentNullException>(() => new ServerNode(param, serviceProviderMock.Object, null, new DatabaseMetadata()));
}
[Test]
public void ServerNode_ThrowsException_NullConnectionSummary()
{
var param = new ConnectionCompleteParams
{
ConnectionSummary = null
};
var serviceProviderMock = new Mock<IMultiServiceProvider>();
Assert.Throws<ArgumentNullException>(() => new ServerNode(param, serviceProviderMock.Object, null, new DatabaseMetadata()));
}
[Test]
public void ServerNode_ThrowsException_NullServiceProvider()
{
var param = new ConnectionCompleteParams
{
ConnectionSummary = new ConnectionSummary()
};
Assert.Throws<ArgumentNullException>(() => new ServerNode(param, null, null, new DatabaseMetadata()));
}
[TestCase(CommonConstants.MasterDatabaseName, "User1", "Server Name (SQL Server 2020 - User1)")]
[TestCase(CommonConstants.MasterDatabaseName, "", "Server Name (SQL Server 2020)")]
[TestCase(CommonConstants.MsdbDatabaseName, "User2", "Server Name (SQL Server 2020 - User2)")]
[TestCase(CommonConstants.MsdbDatabaseName, "", "Server Name (SQL Server 2020)")]
[TestCase(CommonConstants.ModelDatabaseName, "User3", "Server Name (SQL Server 2020 - User3)")]
[TestCase(CommonConstants.ModelDatabaseName, "", "Server Name (SQL Server 2020)")]
[TestCase(CommonConstants.TempDbDatabaseName, "User4", "Server Name (SQL Server 2020 - User4)")]
[TestCase(CommonConstants.TempDbDatabaseName, "", "Server Name (SQL Server 2020)")]
[TestCase("Database1", "User5", "Server Name (SQL Server 2020 - User5, Database1)")]
[TestCase("Database1", "", "Server Name (SQL Server 2020 - Database1)")]
public void GetConnectionLabel_Sets_Label_For_Params(string databaseName, string userName, string expected)
{
var connectionParams = new ConnectionCompleteParams
{
ConnectionSummary = new ConnectionSummary
{
DatabaseName = databaseName,
UserName = userName,
ServerName = "Server Name"
},
ServerInfo = new ServerInfo
{
ServerVersion = "2020"
}
};
var serviceProviderMock = new Mock<IMultiServiceProvider>();
var dataSourceMock = new Mock<IDataSource>();
var metadata = new DataSourceObjectMetadata();
var serverNode = new ServerNode(connectionParams, serviceProviderMock.Object, dataSourceMock.Object,
metadata);
var nodeInfo = serverNode.ToNodeInfo();
Assert.AreEqual(expected, nodeInfo.Label);
}
[Test]
public void Refresh_Calls_DataSourceRefresh()
{
var connectionParams = new ConnectionCompleteParams
{
ConnectionSummary = new ConnectionSummary
{
UserName = "UserName",
DatabaseName = "DatabaseName",
ServerName = "ServerName"
},
ServerInfo = new ServerInfo
{
ServerVersion = "Version"
}
};
var serviceProviderMock = new Mock<IMultiServiceProvider>();
var dataSourceMock = new Mock<IDataSource>();
var metadata = new DataSourceObjectMetadata();
var serverNode = new ServerNode(connectionParams, serviceProviderMock.Object, dataSourceMock.Object,
metadata);
serverNode.Refresh(CancellationToken.None);
dataSourceMock.Verify(x => x.Refresh(It.IsAny<DataSourceObjectMetadata>()), Times.Once());
}
[Test]
public void Refresh_Returns_Children()
{
var childMetadata = new DataSourceObjectMetadata
{
MetadataTypeName = DataSourceMetadataType.Database.ToString(),
MetadataType = DataSourceMetadataType.Database,
Name = "Database1"
};
var connectionParams = new ConnectionCompleteParams
{
ConnectionSummary = new ConnectionSummary
{
UserName = "UserName",
DatabaseName = "DatabaseName",
ServerName = "ServerName"
},
ServerInfo = new ServerInfo
{
ServerVersion = "Version"
}
};
var serviceProviderMock = new Mock<IMultiServiceProvider>();
var dataSourceMock = new Mock<IDataSource>();
dataSourceMock.Setup(x => x.GetChildObjects(It.IsAny<DataSourceObjectMetadata>(), It.IsAny<bool>()))
.Returns(new List<DataSourceObjectMetadata> {childMetadata});
var parentMetadata = new DataSourceObjectMetadata();
var serverNode = new ServerNode(connectionParams, serviceProviderMock.Object, dataSourceMock.Object,
parentMetadata);
var children = serverNode.Refresh(CancellationToken.None);
Assert.AreEqual(1, children.Count);
var child = children.First();
Assert.AreEqual(childMetadata.MetadataTypeName, child.NodeType);
Assert.AreEqual(NodeTypes.Database, child.NodeTypeId);
Assert.AreEqual(childMetadata.Name, child.NodeValue);
}
}
}