DontThrow() public static method

Executes the input action and returns an exception if one was thrown.
public static DontThrow ( Action action ) : Exception
action Action
return Exception
Example #1
0
        private HttpWebResponse SendHttpWebRequest_(
            string path, string method, MemoryStream body, string contentType, string accept, string contentEncoding)
        {
            HttpWebRequest  request  = null;
            HttpWebResponse response = null;

            void send()
            {
                request  = null;
                response = null;

                Stopwatch sw = Stopwatch.StartNew();

                try
                {
                    try
                    {
                        var requestUri = string.IsNullOrEmpty(path) ?
                                         ServerUrl : new Uri(ServerUrl, path);

                        request = CreateHttpWebRequest_(
                            requestUri, method, body, contentType, accept, contentEncoding);

                        if (request == null)
                        {
                            throw new NullReferenceException("request is null");
                        }
                        response = (HttpWebResponse)request.GetResponse();
                    }
                    catch (WebException ex)
                    {
                        if (request == null || ex.Response == null)
                        {
                            throw;
                        }

                        response = (HttpWebResponse)ex.Response;
                    }
                }
                catch (Exception ex2)
                {
                    if (request != null && RequestFailed != null)
                    {
                        var args = new HttpRequestFailedEventArgs(sw.Elapsed, request, ex2);
                        CommonUtils.DontThrow(() => RequestFailed(this, args));
                    }

                    throw;
                }

                if (RequestCompleted != null)
                {
                    var args = new HttpRequestCompletedEventArgs(
                        sw.Elapsed, request, response);
                    CommonUtils.DontThrow(() => RequestCompleted(this, args));
                }
            }

            int wait        = 500;
            int retriesLeft = 2;

            do
            {
                try
                {
                    send();
                    retriesLeft = 0;
                }
                catch
                {
                    CommonUtils.DontThrow(() => response?.Close());

                    Thread.Sleep(wait);
                    wait *= 2;
                    wait  = Math.Min(10000, wait);
                }
            } while (retriesLeft-- > 0);

            if (response == null)
            {
                throw new NullReferenceException("response is null");
            }

            //while (Retry != null && Retry(request, response))
            //{
            //    CommonUtils.DontThrow(() => response.Close());

            //    Thread.Sleep(wait);
            //    wait *= 2;
            //    wait = Math.Min(10000, wait);

            //    send();
            //}

            if (response == null)
            {
                throw new NullReferenceException("response object is null.");
            }
            if (AcceptLongRunningTasks)
            {
                var statusUrl = response.Headers[HttpResponseHeader.Location];
                if (statusUrl != null && response.StatusCode == HttpStatusCode.Accepted)
                {
                    response.Close();

                    wait = 500;
                    while (true)
                    {
                        using (response = Get(statusUrl))
                        {
                            if (response.StatusCode == HttpStatusCode.Created)
                            {
                                return(Delete(
                                           response.Headers[HttpResponseHeader.Location], accept));
                            }

                            if (response.StatusCode == HttpStatusCode.OK)
                            {
                                Thread.Sleep(wait);
                                wait *= 2;
                                wait  = Math.Min(10000, wait);
                                continue;
                            }

                            // Something went wrong.
                            return(response);
                        }
                    }
                }
            }

            return(response);
        }
Example #2
0
        private HttpWebRequest CreateHttpWebRequest_(
            Uri requestUri, string method, MemoryStream body, string contentType, string accept, string contentEncoding)
        {
            if (FormatRequestUri != null)
            {
                requestUri = FormatRequestUri(requestUri);
            }

            //var req = (HttpWebRequest)WebRequest.Create(requestUri);
            var req = (HttpWebRequest)WebRequestCreator.Create(requestUri);

            if (Proxy != null)
            {
                req.Proxy = Proxy;
            }
            else
            {
#if NET45
                // Apply system web proxy configuration.
                var proxy = WebRequest.GetSystemWebProxy();
                if (proxy != null)
                {
                    var proxyUri = proxy.GetProxy(req.RequestUri).ToString();
                    if (proxyUri != requestUri.ToString())
                    {
                        req.Proxy             = new WebProxy(proxyUri, false);
                        req.Proxy.Credentials = CredentialCache.DefaultCredentials;
                    }
                }
#endif
            }

#if NET45
            req.ServicePoint.ConnectionLimit = ConnectionLimit;
#endif

            if (accept != null)
            {
                req.Accept = accept;
            }

            req.Method = method;
            if (authUser_ != null || authPassword_ != null)
            {
                req.BasicAuthentication(authUser_, authPassword_);
            }

            if (Timeout != TimeSpan.Zero)
            {
                req.Timeout = (int)Timeout.TotalMilliseconds;
            }

            if (ConfigureRequest != null)
            {
                var args = new HttpWebRequestEventArgs(req);
                CommonUtils.DontThrow(() => ConfigureRequest(this, args));
            }

            if (Headers.Count > 0)
            {
                req.Headers.Add(Headers);
            }

            ConfigureHttpWebRequest(req);

            if (AgentId != null)
            {
                req.Headers["x-applitools-eyes-client"] = AgentId;
            }

            if (AcceptLongRunningTasks)
            {
                req.Headers["Eyes-Expect"] = "202+location";
                req.Headers["Eyes-Date"]   =
                    TimeUtils.ToString(DateTimeOffset.Now, StandardDateTimeFormat.RFC1123);
            }

            if (body != null)
            {
                if (contentType != null)
                {
                    req.ContentType = contentType;
                }

                if (contentEncoding != null)
                {
                    req.Headers["Content-Encoding"] = contentEncoding;
                }

                req.ContentLength = body.Length;
                body.Position     = 0;
                body.CopyTo(req.GetRequestStream());
            }

            return(req);
        }
        private void SendLongRequest_(TaskListener <HttpResponseMessage> listener,
                                      string path, string method, Stream body, string contentType, string accept, string contentEncoding)
        {
            Stopwatch          sw      = Stopwatch.StartNew();
            HttpRequestMessage request = null;

            try
            {
                try
                {
                    Uri requestUri = string.IsNullOrEmpty(path) ?
                                     ServerUrl : new Uri(ServerUrl, path);

                    request = CreateHttpRequestMessage(
                        requestUri, method, body, contentType, accept, contentEncoding);

                    if (request == null)
                    {
                        throw new NullReferenceException("request is null");
                    }
                    CancellationTokenSource cts         = new CancellationTokenSource(Timeout);
                    IAsyncResult            asyncResult = GetHttpClient().SendAsync(request, cts.Token).
                                                          AsApm(ar => OnLongRequestResponse_(ar, request), request, Logger);

                    if (asyncResult != null && asyncResult.CompletedSynchronously)
                    {
                        Logger.Log(TraceLevel.Notice, Stage.General,
                                   new { message = "request.BeginGetResponse completed synchronously" });
                        OnLongRequestResponse_(asyncResult, request);
                    }
                }
                catch (WebException ex)
                {
                    if (request == null || ex.Response == null)
                    {
                        throw;
                    }

                    listener.OnFail(ex);
                }
            }
            catch (Exception ex2)
            {
                if (request != null && RequestFailed != null)
                {
                    var args = new HttpRequestFailedEventArgs(sw.Elapsed, request, ex2);
                    CommonUtils.DontThrow(() => RequestFailed(this, args));
                }

                throw;
            }

            void OnLongRequestResponse_(IAsyncResult result, HttpRequestMessage originalRequest)
            {
                if (!result.IsCompleted)
                {
                    Logger.Log(TraceLevel.Notice, Stage.General, new { message = "long request not complete" });
                    return;
                }
                try
                {
                    Task <HttpResponseMessage> resultAsTask = (Task <HttpResponseMessage>)result;
                    if (resultAsTask.IsFaulted)
                    {
                        listener.OnFail(
                            new EyesException($"HttpRequestMessage request failed: {originalRequest.Method} {originalRequest.RequestUri}",
                                              resultAsTask.Exception));
                        return;
                    }
                    HttpResponseMessage response = resultAsTask.Result;
                    if (response == null)
                    {
                        throw new NullReferenceException("response is null");
                    }

                    Uri statusUrl = response.Headers.Location;
                    RequestPollingTaskListener requestPollingListener = new RequestPollingTaskListener(this, statusUrl, listener);
                    SendAsyncRequest(requestPollingListener, statusUrl, "GET");
                }
                catch (Exception ex)
                {
                    CommonUtils.LogExceptionStackTrace(Logger, Stage.General, ex);
                    listener.OnFail(ex);
                }
            }
        }