From 3f1d3cb9db9b3a419e721dd80025a32199be28a0 Mon Sep 17 00:00:00 2001 From: Leila Lali Date: Mon, 22 Aug 2016 15:08:44 -0700 Subject: [PATCH 1/3] Added a new request handler to return back the service version --- .../Hosting/Contracts/VersionRequest.cs | 16 ++++++++++++++++ .../Hosting/ServiceHost.cs | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs new file mode 100644 index 00000000..96a1808c --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.Hosting.Contracts +{ + public class VersionRequest + { + public static readonly + RequestType Type = + RequestType.Create("version"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs b/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs index 0f2a0d9a..46fc1db5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs @@ -11,6 +11,7 @@ using Microsoft.SqlTools.EditorServices.Utility; using Microsoft.SqlTools.ServiceLayer.Hosting.Contracts; using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol; using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol.Channel; +using System.Reflection; namespace Microsoft.SqlTools.ServiceLayer.Hosting { @@ -55,6 +56,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting // Register the requests that this service host will handle this.SetRequestHandler(InitializeRequest.Type, this.HandleInitializeRequest); this.SetRequestHandler(ShutdownRequest.Type, this.HandleShutdownRequest); + this.SetRequestHandler(VersionRequest.Type, HandleVersionRequest); } #endregion @@ -69,6 +71,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting private readonly List initializeCallbacks; + private static Version _serviceServion = Assembly.GetEntryAssembly().GetName().Version; + #endregion #region Public Methods @@ -149,6 +153,14 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting }); } + private static async Task HandleVersionRequest( + string workspaceSymbolParams, + RequestContext requestContext) + { + Logger.Write(LogLevel.Verbose, "HandleVersionRequest"); + await requestContext.SendResult(_serviceServion.ToString()); + } + #endregion } } From ebfc5c57a54210e467fa4cc74c2599981ed738fb Mon Sep 17 00:00:00 2001 From: Leila Lali Date: Mon, 22 Aug 2016 15:32:41 -0700 Subject: [PATCH 2/3] Fixing some issues, added documents --- .../Hosting/Contracts/VersionRequest.cs | 8 ++++++-- .../Hosting/ServiceHost.cs | 9 ++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs index 96a1808c..ed7ab358 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Hosting/Contracts/VersionRequest.cs @@ -7,10 +7,14 @@ using Microsoft.SqlTools.ServiceLayer.Hosting.Protocol.Contracts; namespace Microsoft.SqlTools.ServiceLayer.Hosting.Contracts { + /// + /// Defines a message that is sent from the client to request + /// the version of the server. + /// public class VersionRequest { public static readonly - RequestType Type = - RequestType.Create("version"); + RequestType Type = + RequestType.Create("version"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs b/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs index 46fc1db5..1270982f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Hosting/ServiceHost.cs @@ -71,7 +71,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting private readonly List initializeCallbacks; - private static Version _serviceServion = Assembly.GetEntryAssembly().GetName().Version; + private static readonly Version serviceVersion = Assembly.GetEntryAssembly().GetName().Version; #endregion @@ -153,12 +153,15 @@ namespace Microsoft.SqlTools.ServiceLayer.Hosting }); } + /// + /// Handles the version request. Sends back the server version as result. + /// private static async Task HandleVersionRequest( - string workspaceSymbolParams, + object versionRequestParams, RequestContext requestContext) { Logger.Write(LogLevel.Verbose, "HandleVersionRequest"); - await requestContext.SendResult(_serviceServion.ToString()); + await requestContext.SendResult(serviceVersion.ToString()); } #endregion From 14399ede65b16957f042ec8043f4708bc840cbeb Mon Sep 17 00:00:00 2001 From: Mitchell Sternke Date: Mon, 22 Aug 2016 16:26:02 -0700 Subject: [PATCH 3/3] Added inner exceptions on connection failure and fixed a param validation bug --- .../Connection/ConnectionService.cs | 11 +++++--- .../Contracts/ConnectParamsExtensions.cs | 1 - .../Connection/ConnectionServiceTests.cs | 26 +++++++++++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs index 8905ab92..ca868391 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs @@ -143,7 +143,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection } catch(Exception ex) { - response.Messages = ex.Message; + response.Messages = ex.ToString(); return response; } @@ -241,7 +241,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection } catch(Exception ex) { - await requestContext.SendError(ex.Message); + await requestContext.SendError(ex.ToString()); } } @@ -261,7 +261,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection } catch(Exception ex) { - await requestContext.SendError(ex.Message); + await requestContext.SendError(ex.ToString()); } } @@ -285,7 +285,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection connectionBuilder["Integrated Security"] = false; connectionBuilder["User Id"] = connectionDetails.UserName; connectionBuilder["Password"] = connectionDetails.Password; - connectionBuilder["Initial Catalog"] = connectionDetails.DatabaseName; + if( !String.IsNullOrEmpty(connectionDetails.DatabaseName) ) + { + connectionBuilder["Initial Catalog"] = connectionDetails.DatabaseName; + } return connectionBuilder.ToString(); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ConnectParamsExtensions.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ConnectParamsExtensions.cs index b9e73e09..d8596447 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ConnectParamsExtensions.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/Contracts/ConnectParamsExtensions.cs @@ -20,7 +20,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts return !( String.IsNullOrEmpty(parameters.OwnerUri) || parameters.Connection == null || - String.IsNullOrEmpty(parameters.Connection.DatabaseName) || String.IsNullOrEmpty(parameters.Connection.Password) || String.IsNullOrEmpty(parameters.Connection.ServerName) || String.IsNullOrEmpty(parameters.Connection.UserName) diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test/Connection/ConnectionServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.Test/Connection/ConnectionServiceTests.cs index 9e3d5339..6333bbd6 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test/Connection/ConnectionServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test/Connection/ConnectionServiceTests.cs @@ -19,6 +19,30 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Connection /// public class ConnectionServiceTests { + /// + /// Verify that we can connect to the default database when no database name is + /// provided as a parameter. + /// + [Theory] + [InlineDataAttribute(null)] + [InlineDataAttribute("")] + public void CanConnectWithEmptyDatabaseName(string databaseName) + { + // Connect + var connectionDetails = TestObjects.GetTestConnectionDetails(); + connectionDetails.DatabaseName = databaseName; + var connectionResult = + TestObjects.GetTestConnectionService() + .Connect(new ConnectParams() + { + OwnerUri = "file:///my/test/file.sql", + Connection = connectionDetails + }); + + // check that a connection was created + Assert.NotEmpty(connectionResult.ConnectionId); + } + /// /// Verify that when a connection is started for a URI with an already existing /// connection, we disconnect first before connecting. @@ -99,12 +123,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Connection [Theory] [InlineDataAttribute(null, "my-server", "test", "sa", "123456")] [InlineDataAttribute("file://my/sample/file.sql", null, "test", "sa", "123456")] - [InlineDataAttribute("file://my/sample/file.sql", "my-server", null, "sa", "123456")] [InlineDataAttribute("file://my/sample/file.sql", "my-server", "test", null, "123456")] [InlineDataAttribute("file://my/sample/file.sql", "my-server", "test", "sa", null)] [InlineDataAttribute("", "my-server", "test", "sa", "123456")] [InlineDataAttribute("file://my/sample/file.sql", "", "test", "sa", "123456")] - [InlineDataAttribute("file://my/sample/file.sql", "my-server", "", "sa", "123456")] [InlineDataAttribute("file://my/sample/file.sql", "my-server", "test", "", "123456")] [InlineDataAttribute("file://my/sample/file.sql", "my-server", "test", "sa", "")] public void ConnectingWithInvalidParametersYieldsErrorMessage(string ownerUri, string server, string database, string userName, string password)