Add tests to improve code coverage (#187)

* DbColumn and ReliableConnection tests

* More retry connection tests

* More tests

* Fix broken peek definition integration tests

* Fix test bug

* Add a couple batch tests

* Add some more tests

* More tests for code coverage.

* Validation and Diagnostic tests

* A few more tests

* A few mote test changes.

* Update file path tests to run on Windows only
This commit is contained in:
Karl Burtram
2016-12-14 13:49:42 -08:00
committed by GitHub
parent e9398f7182
commit dd41e0545a
29 changed files with 921 additions and 99 deletions

View File

@@ -48,12 +48,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection
internal const string DoNotSerializeQueryStoreSettingsIndex = "DoNotSerializeQueryStoreSettings";
internal const string AlwaysEncryptedWizardMigrationIndex = "AlwaysEncryptedWizardMigration";
private static readonly AmbientData _defaultSettings;
internal static AmbientData _defaultSettings;
static AmbientSettings()
{
_defaultSettings = new AmbientData();
}
}
/// <summary>
/// Access to the default ambient settings. Access to these settings is made available

View File

@@ -801,7 +801,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection
public string DatabaseName;
}
private static bool TryGetConnectionStringBuilder(string connectionString, out SqlConnectionStringBuilder builder)
internal static bool TryGetConnectionStringBuilder(string connectionString, out SqlConnectionStringBuilder builder)
{
builder = null;

View File

@@ -235,7 +235,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection
return _command;
}
private void ValidateConnectionIsSet()
internal void ValidateConnectionIsSet()
{
if (_connection == null)
{

View File

@@ -34,5 +34,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection
[Serializable]
internal sealed class RetryLimitExceededException : Exception
{
internal RetryLimitExceededException() : base()
{
}
internal RetryLimitExceededException(string m, Exception e) : base(m, e)
{
}
}
}

View File

@@ -292,7 +292,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection
}
*/
private static int? GetErrorNumber(Exception ex)
internal static int? GetErrorNumber(Exception ex)
{
SqlException sqlEx = ex as SqlException;
if (sqlEx == null)

View File

@@ -23,10 +23,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
private AsyncContextThread messageLoopThread;
private Dictionary<string, Func<Message, MessageWriter, Task>> requestHandlers =
internal Dictionary<string, Func<Message, MessageWriter, Task>> requestHandlers =
new Dictionary<string, Func<Message, MessageWriter, Task>>();
private Dictionary<string, Func<Message, MessageWriter, Task>> eventHandlers =
internal Dictionary<string, Func<Message, MessageWriter, Task>> eventHandlers =
new Dictionary<string, Func<Message, MessageWriter, Task>>();
private Action<Message> responseHandler;
@@ -218,10 +218,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
{
string message = string.Format("Exception occurred while parsing message: {0}", e.Message);
Logger.Write(LogLevel.Error, message);
await MessageWriter.WriteEvent(HostingErrorEvent.Type, new HostingErrorParams
{
Message = message
});
await MessageWriter.WriteEvent(HostingErrorEvent.Type, new HostingErrorParams { Message = message });
// Continue the loop
continue;
@@ -236,10 +233,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
// Log the error and send an error event to the client
string message = string.Format("Exception occurred while receiving message: {0}", e.Message);
Logger.Write(LogLevel.Error, message);
await MessageWriter.WriteEvent(HostingErrorEvent.Type, new HostingErrorParams
{
Message = message
});
await MessageWriter.WriteEvent(HostingErrorEvent.Type, new HostingErrorParams { Message = message });
// Continue the loop
continue;
@@ -273,10 +267,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
{
handlerToAwait = requestHandler(messageToDispatch, messageWriter);
}
else
{
// TODO: Message not supported error
}
// else
// {
// // TODO: Message not supported error
// }
}
else if (messageToDispatch.MessageType == MessageType.Response)
{
@@ -297,10 +291,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
// TODO: Message not supported error
}
}
else
{
// TODO: Return message not supported
}
// else
// {
// // TODO: Return message not supported
// }
if (handlerToAwait != null)
{
@@ -325,7 +319,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol
}
}
private void OnListenTaskCompleted(Task listenTask)
internal void OnListenTaskCompleted(Task listenTask)
{
if (listenTask.IsFaulted)
{

View File

@@ -89,10 +89,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting.Protocol.Serializers
messageJson.GetValue("message"));
}
}
else
{
// TODO: Parse error
}
// else
// {
// // TODO: Parse error
// }
}
else if (string.Equals("event", messageType, StringComparison.CurrentCultureIgnoreCase))

View File

@@ -282,7 +282,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
/// <param name="completionItem"></param>
/// <param name="requestContext"></param>
/// <returns></returns>
private static async Task HandleCompletionResolveRequest(
internal static async Task HandleCompletionResolveRequest(
CompletionItem completionItem,
RequestContext<CompletionItem> requestContext)
{
@@ -344,7 +344,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
}
#endif
private static async Task HandleSignatureHelpRequest(
internal static async Task HandleSignatureHelpRequest(
TextDocumentPosition textDocumentPosition,
RequestContext<SignatureHelp> requestContext)
{
@@ -1041,11 +1041,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
}
catch (Exception e)
{
Logger.Write(
LogLevel.Error,
string.Format(
"Exception while cancelling analysis task:\n\n{0}",
e.ToString()));
Logger.Write(LogLevel.Error, string.Format("Exception while cancelling analysis task:\n\n{0}", e.ToString()));
TaskCompletionSource<bool> cancelTask = new TaskCompletionSource<bool>();
cancelTask.SetCanceled();
@@ -1169,7 +1165,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
}
}
private bool RemoveScriptParseInfo(string uri)
internal bool RemoveScriptParseInfo(string uri)
{
lock (this.parseMapLock)
{
@@ -1188,7 +1184,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
/// Returns a flag indicating if the ScriptFile refers to the output window.
/// </summary>
/// <param name="scriptFile"></param>
private bool IsPreviewWindow(ScriptFile scriptFile)
internal bool IsPreviewWindow(ScriptFile scriptFile)
{
if (scriptFile != null && !string.IsNullOrWhiteSpace(scriptFile.ClientFilePath))
{

View File

@@ -92,7 +92,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices.Completion
/// <summary>
/// The token text in the file content used for completion list
/// </summary>
public string TokenText
public virtual string TokenText
{
get
{

View File

@@ -48,7 +48,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
/// <summary>
/// Internal representation of the messages so we can modify internally
/// </summary>
private readonly List<ResultMessage> resultMessages;
internal readonly List<ResultMessage> resultMessages;
/// <summary>
/// Internal representation of the result sets so we can modify internally
@@ -379,7 +379,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
/// </summary>
/// <param name="sender">Sender of the event</param>
/// <param name="args">Arguments for the event</param>
private void StatementCompletedHandler(object sender, StatementCompletedEventArgs args)
internal void StatementCompletedHandler(object sender, StatementCompletedEventArgs args)
{
// Add a message for the number of rows the query returned
string message;
@@ -414,7 +414,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
/// cannot be converted to SqlException, the message is written to the messages list.
/// </summary>
/// <param name="dbe">The exception to unwrap</param>
private void UnwrapDbException(DbException dbe)
internal void UnwrapDbException(DbException dbe)
{
SqlException se = dbe as SqlException;
if (se != null)

View File

@@ -19,7 +19,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts
/// <summary>
/// All types supported by the server, stored as a hash set to provide O(1) lookup
/// </summary>
private static readonly HashSet<string> AllServerDataTypes = new HashSet<string>
internal static readonly HashSet<string> AllServerDataTypes = new HashSet<string>
{
"bigint",
"binary",

View File

@@ -20,15 +20,16 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
/// </remarks>
/// <typeparam name="T">Type of the values to store</typeparam>
public class LongList<T> : IEnumerable<T>
{
{
#region Member Variables
private int expandListSize = int.MaxValue;
private List<List<T>> expandedList;
private readonly List<T> shortList;
#endregion
/// <summary>
/// <summary>
/// Creates a new long list
/// </summary>
public LongList()
@@ -46,7 +47,22 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
public T this[long index]
{
get { return GetItem(index); }
get
{
return GetItem(index);
}
}
public int ExpandListSize
{
get
{
return this.expandListSize;
}
internal set
{
this.expandListSize = value;
}
}
#endregion
@@ -60,7 +76,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
/// <returns>Index of the item that was just added</returns>
public long Add(T val)
{
if (Count <= int.MaxValue)
if (Count <= this.ExpandListSize)
{
shortList.Add(val);
}
@@ -73,7 +89,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
expandedList = new List<List<T>> {shortList};
}
int arrayIndex = (int)(Count/int.MaxValue); // 0 based
int arrayIndex = (int)(Count / this.ExpandListSize); // 0 based
List<T> arr;
if (expandedList.Count <= arrayIndex) // need to make a new array
@@ -99,19 +115,19 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
{
T val = default(T);
if (Count <= int.MaxValue)
if (Count <= this.ExpandListSize)
{
int i32Index = Convert.ToInt32(index);
val = shortList[i32Index];
}
else
{
int iArray32Index = (int) (Count/int.MaxValue);
int iArray32Index = (int) (Count / this.ExpandListSize);
if (expandedList.Count > iArray32Index)
{
List<T> arr = expandedList[iArray32Index];
int i32Index = (int) (Count%int.MaxValue);
int i32Index = (int) (Count % this.ExpandListSize);
if (arr.Count > i32Index)
{
val = arr[i32Index];
@@ -128,7 +144,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
/// <param name="index">The index to remove from the list</param>
public void RemoveAt(long index)
{
if (Count <= int.MaxValue)
if (Count <= this.ExpandListSize)
{
int iArray32MemberIndex = Convert.ToInt32(index); // 0 based
shortList.RemoveAt(iArray32MemberIndex);
@@ -136,21 +152,21 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility
else // handle the case of multiple arrays
{
// find out which array it is in
int arrayIndex = (int) (index/int.MaxValue);
int arrayIndex = (int) (index / this.ExpandListSize);
List<T> arr = expandedList[arrayIndex];
// find out index into this array
int iArray32MemberIndex = (int) (index%int.MaxValue);
int iArray32MemberIndex = (int) (index % this.ExpandListSize);
arr.RemoveAt(iArray32MemberIndex);
// now shift members of the array back one
int iArray32TotalIndex = (int) (Count/Int32.MaxValue);
int iArray32TotalIndex = (int) (Count / this.ExpandListSize);
for (int i = arrayIndex + 1; i < iArray32TotalIndex; i++)
{
List<T> arr1 = expandedList[i - 1];
List<T> arr2 = expandedList[i];
arr1.Add(arr2[int.MaxValue - 1]);
arr1.Add(arr2[this.ExpandListSize - 1]);
arr2.RemoveAt(0);
}
}

View File

@@ -194,7 +194,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace
this.workspaceFiles.Remove(scriptFile.Id);
}
private string GetBaseFilePath(string filePath)
internal string GetBaseFilePath(string filePath)
{
if (IsPathInMemory(filePath))
{
@@ -215,7 +215,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace
return Path.GetDirectoryName(filePath);
}
private string ResolveRelativeScriptPath(string baseFilePath, string relativePath)
internal string ResolveRelativeScriptPath(string baseFilePath, string relativePath)
{
if (Path.IsPathRooted(relativePath))
{

View File

@@ -13,7 +13,7 @@ namespace Microsoft.SqlTools.ServiceLayer
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class SR
{
protected SR()
internal SR()
{ }
public static CultureInfo Culture
@@ -549,7 +549,7 @@ namespace Microsoft.SqlTools.ServiceLayer
public const string WorkspaceServiceBufferPositionOutOfOrder = "WorkspaceServiceBufferPositionOutOfOrder";
private Keys()
internal Keys()
{ }
public static CultureInfo Culture