public void FinishedSessionsAreSent()
        {
            // given
            finishedSessions.Enqueue(CreateValidSession("127.0.0.1"));
            finishedSessions.Enqueue(CreateValidSession("127.0.0.1"));

            httpClient.SendBeaconRequest(Arg.Any <string>(), Arg.Any <byte[]>()).Returns(x => new StatusResponse(string.Empty, 200));

            // when
            var target = new BeaconSendingFlushSessionsState();

            target.Execute(context);

            // then
            httpClient.Received(2).SendBeaconRequest(Arg.Any <string>(), Arg.Any <byte[]>());
        }
        public void TransitionToCaptureOffStateIsPerformed()
        {
            // given
            var clientIp = "127.0.0.1";

            context.IsCaptureOn.Returns(false);
            var statusResponse = new StatusResponse(logger, string.Empty, 200, new Dictionary <string, List <string> >());

            var session = new SessionWrapper(CreateValidSession(clientIp));

            session.UpdateBeaconConfiguration(new BeaconConfiguration(1, DataCollectionLevel.OFF, CrashReportingLevel.OFF));
            finishedSessions.Add(session);
            httpClient.SendBeaconRequest(Arg.Any <string>(), Arg.Any <byte[]>()).Returns(x => statusResponse);

            // when
            var target = new BeaconSendingCaptureOnState();

            target.Execute(context);

            // then
            context.Received(1).NextState = Arg.Any <BeaconSendingCaptureOffState>();
        }
        public void TransitionToCaptureOffStateIsPerformed()
        {
            // given
            var clientIp = "127.0.0.1";

            context.IsCaptureOn.Returns(false);
            var statusResponse = new StatusResponse(string.Empty, 200);

            finishedSessions.Enqueue(CreateValidSession(clientIp));
            httpClient.SendBeaconRequest(Arg.Any <string>(), Arg.Any <byte[]>()).Returns(x => statusResponse);

            // when
            var target = new BeaconSendingCaptureOnState();

            target.Execute(context);

            // then
            context.Received(1).CurrentState = Arg.Any <BeaconSendingCaptureOffState>();
        }
示例#4
0
        // helper method for beacon sending with retries
        private StatusResponse SendBeaconRequest(IHTTPClient httpClient, byte[] beaconData, int numRetries)
        {
            StatusResponse response         = null;
            var            retry            = 0;
            var            retrySleepMillis = INITIAL_RETRY_SLEEP_TIME_MILLISECONDS;

            while (true)
            {
                response = httpClient.SendBeaconRequest(clientIPAddress, beaconData);
                if (response != null || (retry >= numRetries))
                {
                    // success OR max retry count reached
                    break;
                }

                timingProvider.Sleep(retrySleepMillis);
                retrySleepMillis *= 2;
                retry++;
            }

            return(response);
        }