Support connecting with a connection string (#334)

- Add support for connecting with a connection string by passing it as one of the connection parameters
- If a connection string is present, it will override any other parameters that are present
This commit is contained in:
Matt Irvine
2017-05-01 21:01:26 -07:00
committed by GitHub
parent 0b39408eae
commit fb239ac956
6 changed files with 1184 additions and 1099 deletions

View File

@@ -325,10 +325,10 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection
.Returns((string connString) =>
{
dummySqlConnection.ConnectionString = connString;
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString);
// Database name is respected. Follow heuristic where empty DB name really means Master
var dbName = string.IsNullOrEmpty(scsb.InitialCatalog) ? masterDbName : scsb.InitialCatalog;
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(connString);
// Database name is respected. Follow heuristic where empty DB name really means Master
var dbName = string.IsNullOrEmpty(scsb.InitialCatalog) ? masterDbName : scsb.InitialCatalog;
dummySqlConnection.SetDatabase(dbName);
return dummySqlConnection;
});
@@ -1210,5 +1210,37 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Connection
await Assert.ThrowsAsync<InvalidOperationException>(
() => service.GetOrOpenConnection(TestObjects.ScriptUri, ConnectionType.Query));
}
[Fact]
public async Task ConnectionWithConnectionStringSucceeds()
{
var connectionParameters = TestObjects.GetTestConnectionParams(true);
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
Assert.NotEmpty(connectionResult.ConnectionId);
}
[Fact]
public async Task ConnectionWithBadConnectionStringFails()
{
var connectionParameters = TestObjects.GetTestConnectionParams(true);
connectionParameters.Connection.ConnectionString = "thisisnotavalidconnectionstring";
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
Assert.NotEmpty(connectionResult.ErrorMessage);
}
[Fact]
public async Task ConnectionWithConnectionStringOverridesParameters()
{
var connectionParameters = TestObjects.GetTestConnectionParams();
connectionParameters.Connection.ServerName = "overriddenServerName";
var connectionString = TestObjects.GetTestConnectionParams(true).Connection.ConnectionString;
connectionParameters.Connection.ConnectionString = connectionString;
// Connect and verify that the server name has been overridden
var connectionResult = await TestObjects.GetTestConnectionService().Connect(connectionParameters);
Assert.NotEqual(connectionParameters.Connection.ServerName, connectionResult.ConnectionSummary.ServerName);
}
}
}

View File

@@ -44,12 +44,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
GetTestConnectionDetails());
}
public static ConnectParams GetTestConnectionParams()
public static ConnectParams GetTestConnectionParams(bool useConnectionString = false)
{
return new ConnectParams()
{
OwnerUri = ScriptUri,
Connection = GetTestConnectionDetails()
Connection = GetTestConnectionDetails(useConnectionString)
};
}
@@ -66,8 +66,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
ServerEdition = "Developer Edition",
ServerLevel = ""
};
}
}
/// <summary>
/// Creates a test sql connection factory instance
/// </summary>
@@ -80,8 +80,16 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
/// <summary>
/// Creates a test connection details object
/// </summary>
public static ConnectionDetails GetTestConnectionDetails()
public static ConnectionDetails GetTestConnectionDetails(bool useConnectionString = false)
{
if (useConnectionString)
{
return new ConnectionDetails()
{
ConnectionString = "User ID=user;PWD=password;Database=databaseName;Server=serverName"
};
}
return new ConnectionDetails()
{
UserName = "user",
@@ -214,9 +222,9 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
}
public override string ConnectionString { get; set; }
public override string Database
public override string Database
{
get { return _database; }
get { return _database; }
}
public override ConnectionState State { get; }
@@ -233,13 +241,13 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
// No Op
}
/// <summary>
/// Test helper method to set the database value
/// </summary>
/// <summary>
/// Test helper method to set the database value
/// </summary>
/// <param name="database"></param>
public void SetDatabase(string database)
{
this._database = database;
public void SetDatabase(string database)
{
this._database = database;
}
}