protected virtual void CreateGatewayTimeoutMap(Error error, GatewayTimeoutException exception)
 {
     error.Title           = Defaults.GatewayTimeoutException.Title;
     error.Code            = exception.Code;
     error.Status          = (int)HttpStatusCode.GatewayTimeout;
     error.ExtraParameters = exception.Messages.ToDictionary(ms => ms.Key, ms => ms.Value);
 }
        private void EmptyMessagesCollectionIsNotAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessages(new string[0]);
            Assert.Equal(0, ex.Messages.Count);
        }
        private void MessageIsSet()
        {
            var ex = new GatewayTimeoutException("gateway timeout");

            Assert.Equal("gateway timeout", ex.Message);
            Assert.NotNull(ex.Messages);
        }
        private void NullMessageWithValidKeyIsNotAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessage("aKey", null);
            Assert.Empty(ex.Messages);
        }
示例#5
0
        private void NullMessagesCollectionIsNotAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessages(null);
            Assert.Empty(ex.Messages);
        }
        private void NullMessagesCollectionIsNotAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessages(null);
            Assert.Equal(0, ex.Messages.Count);
        }
示例#7
0
        private void EmptyMessagesCollectionWithKeyIsNotAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessages("Key1", new string[0]);
            Assert.Empty(ex.Messages);
        }
        private void PropertiesAreDefaulted()
        {
            var ex = new GatewayTimeoutException();

            Assert.Equal(Defaults.GatewayTimeoutException.Title, ex.Message);
            Assert.NotNull(ex.Messages);
        }
        private void NullKeyThrowsArgumentNullException()
        {
            var ex     = new GatewayTimeoutException();
            var result = Assert.Throws <ArgumentNullException>(() => ex.AddMessage(null, "aMessage"));

            Assert.Equal("key", result.ParamName);
        }
        private void CodeIsSet()
        {
            string code = "GTWYTO";

            var ex = new GatewayTimeoutException("gateway timeout", code);

            Assert.Same(code, ex.Code);
        }
        private void MessageAndInnerExceptionAreSetInProperties()
        {
            var innerEx = new Exception("innerMessage");
            var ex      = new GatewayTimeoutException("gateway timeout", "GTWYTO", innerEx);

            Assert.Equal("gateway timeout", ex.Message);
            Assert.Same(innerEx, ex.InnerException);
        }
示例#12
0
        internal byte[] Send(IDeviceMessage message)
        {
            byte[] buffer   = message.GetSendBuffer();
            bool   timedOut = false;

            Connect(PrimaryEndpoint, PrimaryPort);
            try {
                for (int i = 0; i < 2; i++)
                {
                    DateTime requestSent = DateTime.UtcNow;
                    if (client != null && client.Connected && sslStream.IsAuthenticated)
                    {
                        sslStream.Write(buffer, 0, buffer.Length);
                        sslStream.Flush();
                    }
                    byte[] rvalue = GetGatewayResponse();
                    if (rvalue != null && !ForceGatewayTimeout)
                    {
                        return(rvalue);
                    }
                    // did not get a response, switch endpoints and try again
                    timedOut = true;
                    if (!currentEndpoint.Equals("secondary") && !string.IsNullOrEmpty(SecondaryEndpoint) && i < 1)
                    {
                        Disconnect();
                        Connect(SecondaryEndpoint, SecondaryPort);
                    }
                }
                throw new GatewayTimeoutException();
            }
            catch (GatewayTimeoutException exc) {
                exc.GatewayEvents = events;
                throw exc;
            }
            catch (Exception exc) {
                if (timedOut)
                {
                    GatewayTimeoutException gatewayException = new GatewayTimeoutException(exc)
                    {
                        GatewayEvents = events
                    };
                    throw gatewayException;
                }
                else
                {
                    GatewayException gatewayException = new GatewayException("Failed to connect to primary or secondary processing endpoints.", exc);
                    throw gatewayException;
                }
            }
            finally {
                Disconnect();
                // remove the force timeout
                if (ForceGatewayTimeout)
                {
                    ForceGatewayTimeout = false;
                }
            }
        }
        private void DefaultEmptyKeyAddsToCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessage(Defaults.ErrorMessage.Key, "aMessage");

            Assert.Single(ex.Messages);
            Assert.Contains("aMessage", ex.Messages.First().Value);
        }
        /// <summary>
        /// Creates an exception for a failed API request.
        /// </summary>
        /// <param name="res">The HttpResonseMessage.</param>
        /// <returns></returns>
        protected async Task CreateExceptionForFailedRequest(HttpResponseMessage res)
        {
            var responseContent = await res.Content.ReadAsStringAsync().ConfigureAwait(false);

            var jsonError    = string.IsNullOrEmpty(responseContent) ? null : JObject.Parse(responseContent);
            var sys          = jsonError?.SelectToken("$.sys").ToObject <SystemProperties>();
            var errorDetails = jsonError?.SelectToken("$.details")?.ToObject <ErrorDetails>();
            var message      = jsonError?.SelectToken("$.message")?.ToString();
            var statusCode   = (int)res.StatusCode;

            if (string.IsNullOrEmpty(message))
            {
                message = GetGenericErrorMessageForStatusCode(statusCode, sys?.Id);
            }

            if (errorDetails != null)
            {
                message += errorDetails.Errors?.ToString();
            }

            IEnumerable <string> headers = new List <string>();

            if (statusCode == 429 && res.Headers.TryGetValues("X-Contentful-RateLimit-Reset", out headers))
            {
                var rateLimitException = new ContentfulRateLimitException(message)
                {
                    RequestId               = jsonError.SelectToken("$.requestId")?.ToString(),
                    ErrorDetails            = errorDetails,
                    SystemProperties        = sys,
                    SecondsUntilNextRequest = headers.FirstOrDefault() == null ? 0 : int.Parse(headers.FirstOrDefault())
                };

                throw rateLimitException;
            }

            if (statusCode == 504)
            {
                var gatewayTimeoutException = new GatewayTimeoutException()
                {
                    RequestId        = jsonError?.SelectToken("$.requestId")?.ToString(),
                    ErrorDetails     = errorDetails,
                    SystemProperties = sys
                };

                throw gatewayTimeoutException;
            }

            var ex = new ContentfulException(statusCode, message)
            {
                RequestId        = jsonError.SelectToken("$.requestId")?.ToString(),
                ErrorDetails     = errorDetails,
                SystemProperties = sys
            };

            throw ex;
        }
        private void MessageIsAddedToMessagesCollectionWithDefaultKey()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessage("aMessage");

            Assert.Single(ex.Messages);
            Assert.Contains("aMessage", ex.Messages.First().Value);
            Assert.Equal(Defaults.ErrorMessage.Key, ex.Messages.First().Key);
        }
        private void KeyAndMessageAreAddedToMessagesCollection()
        {
            var ex = new GatewayTimeoutException();

            ex.AddMessage("aKey", "aMessage");

            Assert.Single(ex.Messages);
            Assert.Equal("aKey", ex.Messages.First().Key);
            Assert.Contains("aMessage", ex.Messages.First().Value);
        }
示例#17
0
        private void NonDefaultEmptyKeyMessagesCollectionThrowsException()
        {
            var message1 = "message1";
            var message2 = "messages2";
            var messages = new string[] { message1, message2 };

            var ex     = new GatewayTimeoutException();
            var result = Assert.Throws <ArgumentNullException>(() => ex.AddMessages(" ", messages));

            Assert.Equal("key", result.ParamName);
        }
        private void MessageAndInnerExceptionAndExtraInfoAreSetInProperties()
        {
            var messages = new Dictionary <string, IEnumerable <string> >();
            var message  = new[] { "message1", "message2" };

            messages.Add("key1", message);
            var innerEx = new Exception("innerMessage");

            var ex = new GatewayTimeoutException("gateway timeout", "GTWYTO", innerEx, messages);

            Assert.Equal("gateway timeout", ex.Message);
            Assert.Same(innerEx, ex.InnerException);
            Assert.Same(messages, ex.Messages);
        }
示例#19
0
        private void MessagesAreAddedToMessagesCollection()
        {
            var message1 = "message1";
            var message2 = "messages2";
            var messages = new string[] { message1, message2 };

            var error = new GatewayTimeoutException();

            error.AddMessages(messages);

            var message = error.Messages.First();

            Assert.Single(error.Messages);

            Assert.Contains(message1, message.Value);
            Assert.Contains(message2, message.Value);
            Assert.Equal(message.Key, Defaults.ErrorMessage.Key);
        }
示例#20
0
        private void MessagesAreAddedToMessagesCollectionUnderDifferentKey()
        {
            var message1  = "message1";
            var message2  = "messages2";
            var messages1 = new string[] { message1 };
            var messages2 = new string[] { message2 };

            var ex = new GatewayTimeoutException();

            ex.AddMessages("key1", messages1);
            ex.AddMessages("key2", messages2);

            Assert.Equal(2, ex.Messages.Count);

            Assert.True(ex.Messages.ContainsKey("key1"));
            Assert.True(ex.Messages.ContainsKey("key2"));
            Assert.Contains(message1, ex.Messages["key1"]);
            Assert.Contains(message2, ex.Messages["key2"]);
        }
示例#21
0
        private void MessagesAreAddedToMessagesCollectionUnderSameKey()
        {
            var message1  = "message1";
            var message2  = "messages2";
            var messages1 = new string[] { message1 };
            var messages2 = new string[] { message2 };

            var ex = new GatewayTimeoutException();

            ex.AddMessages(messages1);
            ex.AddMessages(messages2);

            Assert.Single(ex.Messages);

            var values = ex.Messages.SelectMany(m => m.Value);
            var keys   = ex.Messages.Select(m => m.Key);

            Assert.Contains(message1, values);
            Assert.Contains(message2, values);
            Assert.All(keys, k => Assert.Equal(Defaults.ErrorMessage.Key, k));
        }