internal virtual IInternalConnectionMultiplexer Create( string clientName = null, int?syncTimeout = null, bool?allowAdmin = null, int?keepAlive = null, int?connectTimeout = null, string password = null, string tieBreaker = null, TextWriter log = null, bool fail = true, string[] disabledCommands = null, string[] enabledCommands = null, bool checkConnect = true, string failMessage = null, string channelPrefix = null, Proxy?proxy = null, string configuration = null, bool logTransactionData = true, bool shared = true, int?defaultDatabase = null, [CallerMemberName] string caller = null) { if (Output == null) { Assert.True(false, "Failure: Be sure to call the TestBase constuctor like this: BasicOpsTests(ITestOutputHelper output) : base(output) { }"); } if (shared && _fixture != null && _fixture.IsEnabled && enabledCommands == null && disabledCommands == null && fail && channelPrefix == null && proxy == null && configuration == null && password == null && tieBreaker == null && defaultDatabase == null && (allowAdmin == null || allowAdmin == true) && expectedFailCount == 0) { configuration = GetConfiguration(); if (configuration == _fixture.Configuration) { // only if the return(_fixture.Connection); } } var muxer = CreateDefault( Writer, clientName, syncTimeout, allowAdmin, keepAlive, connectTimeout, password, tieBreaker, log, fail, disabledCommands, enabledCommands, checkConnect, failMessage, channelPrefix, proxy, configuration ?? GetConfiguration(), logTransactionData, defaultDatabase, caller); muxer.InternalError += OnInternalError; muxer.ConnectionFailed += OnConnectionFailed; return(muxer); }
public static bool TryParse(string value, out Proxy?proxy) { proxy = default; if (string.IsNullOrEmpty(value)) { return(false); } var items = value.Split(' ', 4, StringSplitOptions.None); if (items == null || items.Length < 2) { return(false); } if (!IPAddress.TryParse(items[0], out var address)) { return(false); } if (!ushort.TryParse(items[1], out var port)) { return(false); } var username = items.Length >= 3 ? items[2] : null; var password = items.Length >= 4 ? items[3] : null; proxy = new Proxy(address, port, username, password); return(true); }
protected virtual ConnectionMultiplexer Create( string clientName = null, int?syncTimeout = null, bool?allowAdmin = null, int?keepAlive = null, int?connectTimeout = null, string password = null, string tieBreaker = null, TextWriter log = null, bool fail = true, string[] disabledCommands = null, string[] enabledCommands = null, bool checkConnect = true, bool pause = true, string failMessage = null, string channelPrefix = null, bool useSharedSocketManager = true, Proxy?proxy = null) { if (pause) { Thread.Sleep(250); // get a lot of glitches when hammering new socket creations etc; pace it out a bit } string configuration = GetConfiguration(); var config = ConfigurationOptions.Parse(configuration); if (disabledCommands != null && disabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(disabledCommands), false); } else if (enabledCommands != null && enabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(enabledCommands), true); } if (Debugger.IsAttached) { syncTimeout = int.MaxValue; } if (useSharedSocketManager) { config.SocketManager = socketManager; } if (channelPrefix != null) { config.ChannelPrefix = channelPrefix; } if (tieBreaker != null) { config.TieBreaker = tieBreaker; } if (password != null) { config.Password = string.IsNullOrEmpty(password) ? null : password; } if (clientName != null) { config.ClientName = clientName; } if (syncTimeout != null) { config.SyncTimeout = syncTimeout.Value; } if (allowAdmin != null) { config.AllowAdmin = allowAdmin.Value; } if (keepAlive != null) { config.KeepAlive = keepAlive.Value; } if (connectTimeout != null) { config.ConnectTimeout = connectTimeout.Value; } if (proxy != null) { config.Proxy = proxy.Value; } var watch = Stopwatch.StartNew(); var task = ConnectionMultiplexer.ConnectAsync(config, log ?? Writer); if (!task.Wait(config.ConnectTimeout >= (int.MaxValue / 2) ? int.MaxValue : config.ConnectTimeout * 2)) { task.ContinueWith(x => { try { GC.KeepAlive(x.Exception); } catch { } }, TaskContinuationOptions.OnlyOnFaulted); throw new TimeoutException("Connect timeout"); } watch.Stop(); if (Output == null) { Assert.True(false, "Failure: Be sure to call the TestBase constuctor like this: BasicOpsTests(ITestOutputHelper output) : base(output) { }"); } Output.WriteLine("Connect took: " + watch.ElapsedMilliseconds + "ms"); var muxer = task.Result; if (checkConnect && (muxer == null || !muxer.IsConnected)) { // If fail is true, we throw. Assert.False(fail, failMessage + "Server is not available"); Skip.Inconclusive(failMessage + "Server is not available"); } muxer.InternalError += OnInternalError; muxer.ConnectionFailed += OnConnectionFailed; return(muxer); }
public static ConnectionMultiplexer CreateDefault( TextWriter output, string clientName = null, int?syncTimeout = null, bool?allowAdmin = null, int?keepAlive = null, int?connectTimeout = null, string password = null, string tieBreaker = null, TextWriter log = null, bool fail = true, string[] disabledCommands = null, string[] enabledCommands = null, bool checkConnect = true, string failMessage = null, string channelPrefix = null, Proxy?proxy = null, string configuration = null, bool logTransactionData = true, int?defaultDatabase = null, [CallerMemberName] string caller = null) { StringWriter localLog = null; if (log == null) { log = localLog = new StringWriter(); } try { var config = ConfigurationOptions.Parse(configuration); if (disabledCommands != null && disabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(disabledCommands), false); } else if (enabledCommands != null && enabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(enabledCommands), true); } if (Debugger.IsAttached) { syncTimeout = int.MaxValue; } if (channelPrefix != null) { config.ChannelPrefix = channelPrefix; } if (tieBreaker != null) { config.TieBreaker = tieBreaker; } if (password != null) { config.Password = string.IsNullOrEmpty(password) ? null : password; } if (clientName != null) { config.ClientName = clientName; } else if (caller != null) { config.ClientName = caller; } if (syncTimeout != null) { config.SyncTimeout = syncTimeout.Value; } if (allowAdmin != null) { config.AllowAdmin = allowAdmin.Value; } if (keepAlive != null) { config.KeepAlive = keepAlive.Value; } if (connectTimeout != null) { config.ConnectTimeout = connectTimeout.Value; } if (proxy != null) { config.Proxy = proxy.Value; } if (defaultDatabase != null) { config.DefaultDatabase = defaultDatabase.Value; } var watch = Stopwatch.StartNew(); var task = ConnectionMultiplexer.ConnectAsync(config, log); if (!task.Wait(config.ConnectTimeout >= (int.MaxValue / 2) ? int.MaxValue : config.ConnectTimeout * 2)) { task.ContinueWith(x => { try { GC.KeepAlive(x.Exception); } catch { /* No boom */ } }, TaskContinuationOptions.OnlyOnFaulted); throw new TimeoutException("Connect timeout"); } watch.Stop(); if (output != null) { Log(output, "Connect took: " + watch.ElapsedMilliseconds + "ms"); } var muxer = task.Result; if (checkConnect && (muxer == null || !muxer.IsConnected)) { // If fail is true, we throw. Assert.False(fail, failMessage + "Server is not available"); Skip.Inconclusive(failMessage + "Server is not available"); } if (output != null) { muxer.MessageFaulted += (msg, ex, origin) => { output?.WriteLine($"Faulted from '{origin}': '{msg}' - '{(ex == null ? "(null)" : ex.Message)}'"); if (ex != null && ex.Data.Contains("got")) { output?.WriteLine($"Got: '{ex.Data["got"]}'"); } }; muxer.Connecting += (e, t) => output?.WriteLine($"Connecting to {Format.ToString(e)} as {t}"); if (logTransactionData) { muxer.TransactionLog += msg => output?.WriteLine("tran: " + msg); } muxer.InfoMessage += msg => output?.WriteLine(msg); muxer.Resurrecting += (e, t) => output?.WriteLine($"Resurrecting {Format.ToString(e)} as {t}"); muxer.Closing += complete => output?.WriteLine(complete ? "Closed" : "Closing..."); } return(muxer); } catch { if (localLog != null) { output?.WriteLine(localLog.ToString()); } throw; } }
private DefaultOptionsHandler(Options options, Proxy?proxy = null, ProxyList?proxies = null) { _options = options ?? throw new ArgumentNullException(nameof(options)); Proxy = proxy; Proxies = proxies; }
public ProxyHttpClient(HttpClientHandler httpClientHandler, Proxy?proxy) : base(httpClientHandler) { Proxy = proxy; IsValid = true; }
internal virtual IInternalConnectionMultiplexer Create( string?clientName = null, int?syncTimeout = null, bool?allowAdmin = null, int?keepAlive = null, int?connectTimeout = null, string?password = null, string?tieBreaker = null, TextWriter?log = null, bool fail = true, string[]?disabledCommands = null, string[]?enabledCommands = null, bool checkConnect = true, string?failMessage = null, string?channelPrefix = null, Proxy?proxy = null, string?configuration = null, bool logTransactionData = true, bool shared = true, int?defaultDatabase = null, BacklogPolicy?backlogPolicy = null, [CallerMemberName] string?caller = null) { if (Output == null) { Assert.True(false, "Failure: Be sure to call the TestBase constuctor like this: BasicOpsTests(ITestOutputHelper output) : base(output) { }"); } // Share a connection if instructed to and we can - many specifics mean no sharing if (shared && _fixture != null && _fixture.IsEnabled && enabledCommands == null && disabledCommands == null && fail && channelPrefix == null && proxy == null && configuration == null && password == null && tieBreaker == null && defaultDatabase == null && (allowAdmin == null || allowAdmin == true) && expectedFailCount == 0 && backlogPolicy == null) { configuration = GetConfiguration(); if (configuration == _fixture.Configuration) { // only if the return(_fixture.Connection); } } var muxer = CreateDefault( Writer, clientName, syncTimeout, allowAdmin, keepAlive, connectTimeout, password, tieBreaker, log, fail, disabledCommands, enabledCommands, checkConnect, failMessage, channelPrefix, proxy, configuration ?? GetConfiguration(), logTransactionData, defaultDatabase, backlogPolicy, caller); muxer.InternalError += OnInternalError; muxer.ConnectionFailed += OnConnectionFailed; muxer.ConnectionRestored += (s, e) => Log($"Connection Restored ({e.ConnectionType},{e.FailureType}): {e.Exception}"); return(muxer); }
public static ConnectionMultiplexer Create(string configuration, string clientName = null, int?syncTimeout = null, bool?allowAdmin = null, int?keepAlive = null, int?connectTimeout = null, string password = null, string tieBreaker = null, TextWriter log = null, bool fail = true, string[] disabledCommands = null, string[] enabledCommands = null, bool checkConnect = true, bool pause = true, string failMessage = null, string channelPrefix = null, bool useSharedSocketManager = true, Proxy?proxy = null) { if (pause) { System.Threading.Thread.Sleep(500); // get a lot of glitches when hammering new socket creations etc; pace it out a bit } var config = ConfigurationOptions.Parse(configuration); if (disabledCommands != null && disabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(disabledCommands), false); } else if (enabledCommands != null && enabledCommands.Length != 0) { config.CommandMap = CommandMap.Create(new HashSet <string>(enabledCommands), true); } if (System.Diagnostics.Debugger.IsAttached) { syncTimeout = int.MaxValue; } if (useSharedSocketManager) { config.SocketManager = socketManager; } if (channelPrefix != null) { config.ChannelPrefix = channelPrefix; } if (tieBreaker != null) { config.TieBreaker = tieBreaker; } if (password != null) { config.Password = string.IsNullOrEmpty(password) ? null : password; } if (clientName != null) { config.ClientName = clientName; } if (syncTimeout != null) { config.SyncTimeout = syncTimeout.Value; } if (allowAdmin != null) { config.AllowAdmin = allowAdmin.Value; } if (keepAlive != null) { config.KeepAlive = keepAlive.Value; } if (connectTimeout != null) { config.ConnectTimeout = connectTimeout.Value; } if (proxy != null) { config.Proxy = proxy.Value; } var task = ConnectionMultiplexer.ConnectAsync(config, log ?? Console.Out); if (!task.Wait(config.ConnectTimeout >= (int.MaxValue / 2) ? int.MaxValue : config.ConnectTimeout * 2)) { task.ContinueWith(x => { try { GC.KeepAlive(x.Exception); } catch { } }, TaskContinuationOptions.OnlyOnFaulted); throw new TimeoutException("Connect timeout"); } var muxer = task.Result; if (checkConnect) { if (!muxer.IsConnected) { //if (fail) Assert.Fail(failMessage + "Server is not available"); //Assert.Inconclusive(failMessage + "Server is not available"); } } //muxer.InternalError += OnInternalError; //muxer.ConnectionFailed += OnConnectionFailed; return(muxer); }