Enable changing database when connected with a connection string (#413)

This commit builds connection options using the connection string as a base, but allow other options to be overridden, which is how we change database. This commit also makes sure to copy the connection string when copying a connection, since that didn't happen before
This commit is contained in:
Matt Irvine
2017-07-14 13:24:00 -07:00
committed by GitHub
parent b78ca80d5b
commit b20529cced
3 changed files with 1119 additions and 1094 deletions

View File

@@ -42,7 +42,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection.Contracts
MultiSubnetFailover = details.MultiSubnetFailover, MultiSubnetFailover = details.MultiSubnetFailover,
MultipleActiveResultSets = details.MultipleActiveResultSets, MultipleActiveResultSets = details.MultipleActiveResultSets,
PacketSize = details.PacketSize, PacketSize = details.PacketSize,
TypeSystemVersion = details.TypeSystemVersion TypeSystemVersion = details.TypeSystemVersion,
ConnectionString = details.ConnectionString
}; };
} }
} }

View File

@@ -1214,6 +1214,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection
[Fact] [Fact]
public async Task ConnectionWithConnectionStringSucceeds() public async Task ConnectionWithConnectionStringSucceeds()
{ {
// If I connect using a connection string instead of the normal parameters, the connection succeeds
var connectionParameters = TestObjects.GetTestConnectionParams(true); var connectionParameters = TestObjects.GetTestConnectionParams(true);
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters); var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
@@ -1223,6 +1224,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection
[Fact] [Fact]
public async Task ConnectionWithBadConnectionStringFails() public async Task ConnectionWithBadConnectionStringFails()
{ {
// If I try to connect using an invalid connection string, the connection fails
var connectionParameters = TestObjects.GetTestConnectionParams(true); var connectionParameters = TestObjects.GetTestConnectionParams(true);
connectionParameters.Connection.ConnectionString = "thisisnotavalidconnectionstring"; connectionParameters.Connection.ConnectionString = "thisisnotavalidconnectionstring";
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters); var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
@@ -1231,16 +1233,37 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection
} }
[Fact] [Fact]
public async Task ConnectionWithConnectionStringOverridesParameters() public async Task ConnectionWithConnectionStringOverridesServerInfo()
{ {
// If I try to connect using a connection string, it overrides the server name and username for the connection
var connectionParameters = TestObjects.GetTestConnectionParams(); var connectionParameters = TestObjects.GetTestConnectionParams();
connectionParameters.Connection.ServerName = "overriddenServerName"; var serverName = "overriddenServerName";
var userName = "overriddenUserName";
connectionParameters.Connection.ServerName = serverName;
connectionParameters.Connection.UserName = userName;
var connectionString = TestObjects.GetTestConnectionParams(true).Connection.ConnectionString; var connectionString = TestObjects.GetTestConnectionParams(true).Connection.ConnectionString;
connectionParameters.Connection.ConnectionString = connectionString; connectionParameters.Connection.ConnectionString = connectionString;
// Connect and verify that the server name has been overridden // Connect and verify that the connectionParameters object's server name and username have been overridden
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters); var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
Assert.NotEqual(connectionParameters.Connection.ServerName, connectionResult.ConnectionSummary.ServerName); Assert.NotEqual(serverName, connectionResult.ConnectionSummary.ServerName);
Assert.NotEqual(userName, connectionResult.ConnectionSummary.UserName);
}
[Fact]
public async Task OtherParametersOverrideConnectionString()
{
// If I try to connect using a connection string, and set parameters other than the server name, username, or password,
// they override the values in the connection string.
var connectionParameters = TestObjects.GetTestConnectionParams();
var databaseName = "overriddenDatabaseName";
connectionParameters.Connection.DatabaseName = databaseName;
var connectionString = TestObjects.GetTestConnectionParams(true).Connection.ConnectionString;
connectionParameters.Connection.ConnectionString = connectionString;
// Connect and verify that the connection string's database name has been overridden
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
Assert.Equal(databaseName, connectionResult.ConnectionSummary.DatabaseName);
} }
} }
} }