public static TestTdsServer StartServerWithQueryEngine(QueryEngine engine, bool enableFedAuth = false, bool enableLog = false, [CallerMemberName] string methodName = "") { TDSServerArguments args = new TDSServerArguments() { Log = enableLog ? Console.Out : null, }; if (enableFedAuth) { args.FedAuthRequiredPreLoginOption = Microsoft.SqlServer.TDS.PreLogin.TdsPreLoginFedAuthRequiredOption.FedAuthRequired; } TestTdsServer server = engine == null ? new TestTdsServer(args) : new TestTdsServer(engine, args); server._endpoint = new TDSServerEndPoint(server) { ServerEndPoint = new IPEndPoint(IPAddress.Any, 0) }; server._endpoint.EndpointName = methodName; // The server EventLog should be enabled as it logs the exceptions. server._endpoint.EventLog = Console.Out; server._endpoint.Start(); int port = server._endpoint.ServerEndPoint.Port; server.connectionStringBuilder = new SqlConnectionStringBuilder() { DataSource = "localhost," + port, ConnectTimeout = 5, Encrypt = false }; server.ConnectionString = server.connectionStringBuilder.ConnectionString; return(server); }
public void IntegratedAuthConnectionTest() { using TestTdsServer server = TestTdsServer.StartTestServer(); SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(server.ConnectionString); builder.IntegratedSecurity = true; using SqlConnection connection = new SqlConnection(builder.ConnectionString); connection.Open(); }
public void ConnectionTest() { using (TestTdsServer server = TestTdsServer.StartTestServer()) { using (SqlConnection connection = new SqlConnection(server.ConnectionString)) { connection.Open(); } } }
private static async Task CollectStatisticsDiagnosticsAsync(Func <string, Task> sqlOperation, [CallerMemberName] string methodName = "") { bool statsLogged = false; bool operationHasError = false; Guid beginOperationId = Guid.Empty; FakeDiagnosticListenerObserver diagnosticListenerObserver = new FakeDiagnosticListenerObserver(kvp => { IDictionary statistics; if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteCommandBefore")) { Assert.NotNull(kvp.Value); Guid retrievedOperationId = GetPropertyValueFromType <Guid>(kvp.Value, "OperationId"); Assert.NotEqual(retrievedOperationId, Guid.Empty); SqlCommand sqlCommand = GetPropertyValueFromType <SqlCommand>(kvp.Value, "Command"); Assert.NotNull(sqlCommand); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); beginOperationId = retrievedOperationId; statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteCommandAfter")) { Assert.NotNull(kvp.Value); Guid retrievedOperationId = GetPropertyValueFromType <Guid>(kvp.Value, "OperationId"); Assert.NotEqual(retrievedOperationId, Guid.Empty); SqlCommand sqlCommand = GetPropertyValueFromType <SqlCommand>(kvp.Value, "Command"); Assert.NotNull(sqlCommand); statistics = GetPropertyValueFromType <IDictionary>(kvp.Value, "Statistics"); if (!operationHasError) { Assert.NotNull(statistics); } string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); // if we get to this point, then statistics exist and this must be the "end" // event, so we need to make sure the operation IDs match Assert.Equal(retrievedOperationId, beginOperationId); beginOperationId = Guid.Empty; statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteCommandError")) { operationHasError = true; Assert.NotNull(kvp.Value); SqlCommand sqlCommand = GetPropertyValueFromType <SqlCommand>(kvp.Value, "Command"); Assert.NotNull(sqlCommand); Exception ex = GetPropertyValueFromType <Exception>(kvp.Value, "Exception"); Assert.NotNull(ex); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionOpenBefore")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionOpenAfter")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); statistics = GetPropertyValueFromType <IDictionary>(kvp.Value, "Statistics"); Assert.NotNull(statistics); Guid connectionId = GetPropertyValueFromType <Guid>(kvp.Value, "ConnectionId"); if (sqlConnection.State == ConnectionState.Open) { Assert.NotEqual(connectionId, Guid.Empty); } statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionOpenError")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); Exception ex = GetPropertyValueFromType <Exception>(kvp.Value, "Exception"); Assert.NotNull(ex); statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionCloseBefore")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); Guid connectionId = GetPropertyValueFromType <Guid>(kvp.Value, "ConnectionId"); Assert.NotEqual(connectionId, Guid.Empty); statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionCloseAfter")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); statistics = GetPropertyValueFromType <IDictionary>(kvp.Value, "Statistics"); Guid connectionId = GetPropertyValueFromType <Guid>(kvp.Value, "ConnectionId"); Assert.NotEqual(connectionId, Guid.Empty); statsLogged = true; } else if (kvp.Key.Equals("Microsoft.Data.SqlClient.WriteConnectionCloseError")) { Assert.NotNull(kvp.Value); SqlConnection sqlConnection = GetPropertyValueFromType <SqlConnection>(kvp.Value, "Connection"); Assert.NotNull(sqlConnection); string operation = GetPropertyValueFromType <string>(kvp.Value, "Operation"); Assert.False(string.IsNullOrWhiteSpace(operation)); Exception ex = GetPropertyValueFromType <Exception>(kvp.Value, "Exception"); Assert.NotNull(ex); Guid connectionId = GetPropertyValueFromType <Guid>(kvp.Value, "ConnectionId"); Assert.NotEqual(connectionId, Guid.Empty); statsLogged = true; } }); diagnosticListenerObserver.Enable(); using (DiagnosticListener.AllListeners.Subscribe(diagnosticListenerObserver)) { Console.WriteLine(string.Format("Test: {0} Enabled Listeners", methodName)); using (var server = TestTdsServer.StartServerWithQueryEngine(new DiagnosticsQueryEngine(), methodName: methodName)) { Console.WriteLine(string.Format("Test: {0} Started Server", methodName)); await sqlOperation(server.ConnectionString); Console.WriteLine(string.Format("Test: {0} SqlOperation Successful", methodName)); Assert.True(statsLogged); diagnosticListenerObserver.Disable(); Console.WriteLine(string.Format("Test: {0} Listeners Disabled", methodName)); } Console.WriteLine(string.Format("Test: {0} Server Disposed", methodName)); } Console.WriteLine(string.Format("Test: {0} Listeners Disposed Successfully", methodName)); }