public async Task PushService_OtherClientError_PushServiceClientExceptionContainsPushSubscription()
        {
            _pushSubscription.Endpoint = CLIENT_ERROR_ENDPOINT;

            PushMessage pushMessage = new PushMessage(WALRUS_CONTENT);

            PushServiceClient pushClient = PreparePushServiceClient();

            PushServiceClientException pushMessageDeliveryException = await Record.ExceptionAsync(async() =>
            {
                await pushClient.RequestPushMessageDeliveryAsync(_pushSubscription, pushMessage);
            }) as PushServiceClientException;

            Assert.Equal(_pushSubscription, pushMessageDeliveryException.PushSubscription);
        }
        public async Task PushService_OtherClientError_PushServiceClientExceptionContainsResponseReasonPhrase()
        {
            _pushSubscription.Endpoint = CLIENT_ERROR_ENDPOINT;

            PushMessage pushMessage = new PushMessage(WALRUS_CONTENT);

            PushServiceClient pushClient = PreparePushServiceClient();

            PushServiceClientException pushMessageDeliveryException = await Record.ExceptionAsync(async() =>
            {
                await pushClient.RequestPushMessageDeliveryAsync(_pushSubscription, pushMessage);
            }) as PushServiceClientException;

            Assert.Equal(FakePushServiceStartup.OTHER_CLIENT_ERROR_REASON_PHRASE, pushMessageDeliveryException.Message);
        }
        public async Task PushService_TooManyRequests_MaxRetriesAfter_PushServiceClientExceptionStatusCodeIs429()
        {
            _pushSubscription.Endpoint = RETRY_AFTER_ALWAYS_ENDPOINT;

            PushMessage pushMessage = new PushMessage(WALRUS_CONTENT);

            PushServiceClient pushClient = PreparePushServiceClient();

            pushClient.MaxRetriesAfter = 1;

            PushServiceClientException pushMessageDeliveryException = await Record.ExceptionAsync(async() =>
            {
                await pushClient.RequestPushMessageDeliveryAsync(_pushSubscription, pushMessage);
            }) as PushServiceClientException;

            Assert.Equal(429, (int)pushMessageDeliveryException.StatusCode);
        }
예제 #4
0
        private async Task HandlePushMessageDeliveryExceptionAsync(Exception exception, PushSubscription subscription)
        {
            PushServiceClientException pushServiceClientException = exception as PushServiceClientException;

            if (pushServiceClientException is null)
            {
                _logger?.LogError(exception, "Failed requesting push message delivery to {0}.", subscription.Endpoint);
            }
            else
            {
                if ((pushServiceClientException.StatusCode == HttpStatusCode.NotFound) || (pushServiceClientException.StatusCode == HttpStatusCode.Gone))
                {
                    await _pushSubscriptionStore.DeleteSubscription(subscription.Endpoint);

                    _logger?.LogInformation("Subscription has expired or is no longer valid and has been removed.");
                }
            }
        }
예제 #5
0
        private async Task HandlePushMessageDeliveryExceptionAsync(Exception exception, Lib.Net.Http.WebPush.PushSubscription subscription)
        {
            PushServiceClientException pushServiceClientException = exception as PushServiceClientException;

            if (pushServiceClientException is null)
            {
                _logger?.LogError(exception, "Failed requesting push message delivery to {0}.", subscription.Endpoint);
            }
            else
            {
                if ((pushServiceClientException.StatusCode == HttpStatusCode.NotFound) || (pushServiceClientException.StatusCode == HttpStatusCode.Gone))
                {
                    using (IPushSubscriptionStoreAccessor subscriptionStoreAccessor = _subscriptionStoreAccessorProvider.GetPushSubscriptionStoreAccessor())
                    {
                        await subscriptionStoreAccessor.PushSubscriptionStore.DiscardSubscriptionAsync(subscription.Endpoint);
                    }
                    _logger?.LogInformation("Subscription has expired or is no longer valid and has been removed.");
                }
            }
        }