示例#1
0
        public void SingleRequest()
        {
            var queue = new HttpRequestQueue();

            queue.Enqueue("http://localhost:8080/", this.ResponseCallBack, null);
            Assert.IsTrue(this.resetEvent.WaitOne(TimeOutMilliseconds));
        }
示例#2
0
 private static void EnqueuWebRequest(HttpRequestQueue queue, HttpRequest request, int RequestRetryCount, HttpWebRequest webRequest, HttpRequestQueueCallback callback)
 {
     switch (webRequest.Method)
     {
     case "GET":
     case "TRACE":
     case "HEAD":
         queue.Enqueue(webRequest, callback, request.UserState, RequestRetryCount);
         return;
     }
     if (request.DataStream != null)
     {
         queue.Enqueue(webRequest, request.DataStream.ToArray(), callback, request.UserState, RequestRetryCount);
     }
     else
     {
         queue.Enqueue(webRequest, callback, request.UserState, RequestRetryCount);
     }
 }
示例#3
0
        private void TryGetApplicationAccountAsync(HttpRequestQueue httpQueue, Guid appId, string url, string username,
                                                   string password, Action <AsyncRequestState> onGetAccountInfoCallback, int retriesCount = DefaultRetriesCount)
        {
            var logGuard          = httpQueue == this.blobHttpQueue ? this.blobHttpQueueLogGuard : this.accountServiceHttpQueueLogGuard;
            var asyncRequestState = new AsyncRequestState(appId, httpQueue,
                                                          onGetAccountInfoCallback,
                                                          httpQueue == this.blobHttpQueue,
                                                          logGuard);

            var uri     = string.Format(url, appId);
            var request = this.GetWebRequest(uri, username, password, logGuard);

            httpQueue.Enqueue(request, HttpRequestQueueCallbackAsync, asyncRequestState, retriesCount);
        }
示例#4
0
        private void TryGetMonitoringResultAsync(HttpRequestQueue httpQueue, Guid appId, string servernames, string url, /*string username,
                                                                                                                         *  string password,*/Action <AsyncRequestState> onGetMonitoringInfoCallback)
        {
            var logGuard          = /*httpQueue == this.blobHttpQueue ? this.blobHttpQueueLogGuard :*/ this.monitoringServiceHttpQueueLogGuard;
            var asyncRequestState = new AsyncRequestState(appId, httpQueue,
                                                          onGetMonitoringInfoCallback,
                                                          /*httpQueue == this.blobHttpQueue,*/
                                                          logGuard);

            //TODO
            var uri     = string.Format(url, servernames);
            var request = this.GetWebRequest(uri, /*username, password,*/ logGuard);

            const int RETRY_COUNT = 3;

            httpQueue.Enqueue(request, HttpRequestQueueCallbackAsync, asyncRequestState, RETRY_COUNT);
        }
示例#5
0
        public void Offline()
        {
            var fiber = new StubFiber();

            fiber.ExecutePendingImmediately = false;

            var queue = new HttpRequestQueue();

            queue.MaxConcurrentRequests = 2;
            queue.ReconnectInterval     = TimeSpan.FromMilliseconds(500);

            var state  = new RequestState();
            var state2 = new RequestState();
            var state3 = new RequestState();

            queue.Enqueue("http://localhost:8080?func=Forbidden", this.ResponseCallBack, state);
            queue.Enqueue("http://localhost:8080?func=Forbidden", this.ResponseCallBack, state2);
            queue.Enqueue("http://localhost:8080?func=Forbidden", this.ResponseCallBack, state3);

            Assert.IsTrue(state.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Error, state.Result);

            Assert.IsTrue(state2.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Offline, state2.Result);

            Assert.IsTrue(state3.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Offline, state3.Result);

            Assert.AreEqual(HttpRequestQueueState.Offline, queue.QueueState);

            state = new RequestState();
            queue.Enqueue("http://localhost:8080", this.ResponseCallBack, state);
            Assert.IsTrue(state.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Offline, state.Result);
            Assert.AreEqual(HttpRequestQueueState.Offline, queue.QueueState);

            Thread.Sleep(750);
            state  = new RequestState();
            state2 = new RequestState();
            queue.Enqueue("http://localhost:8080", this.ResponseCallBack, state);
            queue.Enqueue("http://localhost:8080", this.ResponseCallBack, state2);
            Assert.IsTrue(state.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Success, state.Result);

            Assert.IsTrue(state2.ResetEvent.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Offline, state2.Result);

            Assert.AreEqual(HttpRequestQueueState.Running, queue.QueueState);
        }
示例#6
0
        public void MaxConcurrentRequests()
        {
            const int requestCount = 10;

            this.responseCount = 0;

            var fiber = new StubFiber();

            fiber.ExecutePendingImmediately = false;

            var queue = new HttpRequestQueue(fiber);

            queue.MaxConcurrentRequests = 2;

            for (int i = 0; i < requestCount; i++)
            {
                queue.Enqueue("http://localhost:8080/", this.ResponseCallBack, null);
            }

            fiber.ExecuteAllPending();
            Assert.AreEqual(1, queue.RunningRequestsCount);
            Assert.AreEqual(requestCount - 1, queue.QueuedRequestCount);

            var startTime = DateTime.UtcNow;
            var time      = TimeSpan.FromMilliseconds(TimeOutMilliseconds * requestCount);

            while (this.responseCount < 10)
            {
                Assert.Less(DateTime.UtcNow.Subtract(startTime), time, "Received not all responses in the expected time");

                if (this.responseCount > 0)
                {
                    Assert.Less(queue.MaxConcurrentRequests, queue.MaxConcurrentRequests + 1);
                }

                fiber.ExecuteAllPending();
                Thread.Sleep(50);
            }
        }
示例#7
0
        public void MaxTimedOutRequests()
        {
            var queue = new HttpRequestQueue();

            // get queue into running state
            var webRequest   = this.CreateWebRequest(string.Empty);
            var requestState = new RequestState();

            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne());
            Assert.AreEqual(HttpRequestQueueResultCode.Success, requestState.Result);
            Assert.AreEqual(HttpRequestQueueState.Running, queue.QueueState);

            // timeout a request
            webRequest   = this.CreateWebRequest("Timeout");
            requestState = new RequestState();
            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne(TimeOutMilliseconds * 2));
            Assert.AreEqual(HttpRequestQueueResultCode.RequestTimeout, requestState.Result);

            // queue should be still in running state because no value for
            // MaxTimedOutRequests are specified
            Assert.AreEqual(HttpRequestQueueState.Running, queue.QueueState);
            Assert.AreEqual(0, queue.TimedOutRequests);

            queue.MaxTimedOutRequests = 2;
            webRequest   = this.CreateWebRequest("Timeout");
            requestState = new RequestState();
            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne(TimeOutMilliseconds * 2));
            Assert.AreEqual(HttpRequestQueueResultCode.RequestTimeout, requestState.Result);

            // queue should be still in running state because the specified MaxTimedOutRequests
            // value is not reached
            Assert.AreEqual(HttpRequestQueueState.Running, queue.QueueState);
            Assert.AreEqual(1, queue.TimedOutRequests);

            webRequest   = this.CreateWebRequest(string.Empty);
            requestState = new RequestState();
            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne(TimeOutMilliseconds));
            Assert.AreEqual(HttpRequestQueueResultCode.Success, requestState.Result);

            webRequest   = this.CreateWebRequest("Timeout");
            requestState = new RequestState();
            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne(TimeOutMilliseconds * 2));
            Assert.AreEqual(HttpRequestQueueResultCode.RequestTimeout, requestState.Result);

            // queue should be still in running state because the counter for
            // timed out requests is reset by the successfull request
            Assert.AreEqual(HttpRequestQueueState.Running, queue.QueueState);
            Assert.AreEqual(1, queue.TimedOutRequests);

            webRequest   = this.CreateWebRequest("Timeout");
            requestState = new RequestState();
            queue.Enqueue(webRequest, this.ResponseCallBack, requestState);
            Assert.IsTrue(requestState.WaitOne(TimeOutMilliseconds * 2));
            Assert.AreEqual(HttpRequestQueueResultCode.RequestTimeout, requestState.Result);

            // queue should be in offline state because the counter for
            // timed out requests reached the MaxTimedOutRequests value
            Assert.AreEqual(2, queue.TimedOutRequests);
            Assert.AreEqual(HttpRequestQueueState.Offline, queue.QueueState);
        }