// // 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.Data.Common; using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; using Microsoft.SqlTools.ServiceLayer.QueryExecution.DataStorage; using NUnit.Framework; namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryExecution.DataStorage { public class StorageDataReaderTests { private StorageDataReader GetTestStorageDataReader(string query) { var result = LiveConnectionHelper.InitLiveConnectionInfo(); DbConnection connection; result.ConnectionInfo.TryGetConnection(ConnectionType.Default, out connection); var command = connection.CreateCommand(); command.CommandText = query; DbDataReader reader = command.ExecuteReader(); return new StorageDataReader(reader); } /// /// Validate GetBytesWithMaxCapacity /// [Test] public void GetBytesWithMaxCapacityTest() { var storageReader = GetTestStorageDataReader( "SELECT CAST([name] as TEXT) As TextName FROM sys.all_columns"); DbDataReader reader = storageReader.DbDataReader; reader.Read(); Assert.False(storageReader.IsDBNull(0)); byte[] bytes = storageReader.GetBytesWithMaxCapacity(0, 100); Assert.NotNull(bytes); } /// /// Validate GetBytesWithMaxCapacity /// [Test] public void GetLongDecimalTest() { // SQL Server support up to 38 digits of decimal var storageReader = GetTestStorageDataReader( "SELECT 99999999999999999999999999999999999999"); storageReader.DbDataReader.Read(); var value = storageReader.GetValue(0); Assert.AreEqual("99999999999999999999999999999999999999", value.ToString()); } /// /// Validate GetCharsWithMaxCapacity /// [Test] public void GetCharsWithMaxCapacityTest() { var storageReader = GetTestStorageDataReader( "SELECT name FROM sys.all_columns"); DbDataReader reader = storageReader.DbDataReader; reader.Read(); Assert.False(storageReader.IsDBNull(0)); Assert.NotNull(storageReader.GetValue(0)); string shortName = storageReader.GetCharsWithMaxCapacity(0, 2); Assert.True(shortName.Length == 2); Assert.Throws(() => storageReader.GetBytesWithMaxCapacity(0, 0)); Assert.Throws(() => storageReader.GetCharsWithMaxCapacity(0, 0)); } /// /// Validate GetXmlWithMaxCapacity /// [Test] public void GetXmlWithMaxCapacityTest() { var storageReader = GetTestStorageDataReader( "SELECT CAST('Test XML context' AS XML) As XmlColumn"); DbDataReader reader = storageReader.DbDataReader; reader.Read(); Assert.False(storageReader.IsDBNull(0)); string shortXml = storageReader.GetXmlWithMaxCapacity(0, 2); Assert.True(shortXml.Length == 3); } /// /// Validate StringWriterWithMaxCapacity Write test /// [Test] public void StringWriterWithMaxCapacityTest() { var writer = new StorageDataReader.StringWriterWithMaxCapacity(null, 4); string output = "..."; writer.Write(output); Assert.True(writer.ToString().Equals(output)); writer.Write('.'); Assert.True(writer.ToString().Equals(output + '.')); writer.Write(output); writer.Write('.'); Assert.True(writer.ToString().Equals(output + '.')); } } }