コード例 #1
0
        private static HttpMessageState ConfigureSendFaultyOrderState(HttpMessageState s, Log log, Random rng, string endPoint, string user)
        {
            var orderMessage = new FaultyOrderMessage().Randomize(rng);

            s.Name         = user + ", HttpMessageState::sendFaultyOrder";
            s.Uri          = endPoint + "/post-order";
            s.Message      = orderMessage;
            s.SetupMessage = (msg) =>
            {
                orderMessage.token = s.Context.Resolve <string>(UserTokenId);
                orderMessage.Randomize(s.Context.Resolve <Random>());

                log?.Put(OutputLevel.Info, s.Name, "sending faulty order.");
            };
            s.ProcessResponse = (response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    LogError(log, s.Context, s.Name + " send wrong ok which somehow was a success");
                }
                else
                {
                    log?.Put(OutputLevel.Info, s.Name, "received expected error.");
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #2
0
        private static HttpMessageState ConfigureLogoutState(HttpMessageState s, Log log, string endPoint, string user)
        {
            var logoutMessage = new LogoutMessage();

            s.Name         = user + ", HttpMessageState::logout";
            s.Uri          = endPoint + "/logout";
            s.Message      = logoutMessage;
            s.SetupMessage = (msg) =>
            {
                logoutMessage.token = s.Context.Resolve <string>(UserTokenId);
                log?.Put(OutputLevel.Info, s.Name, "logging out" + user + ".");
            };
            s.ProcessResponse = (response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    s.Context.Remove(UserTokenId);
                }
                else
                {
                    LogError(log, s.Context, s.Name + " tried to log out, received error code." + " - " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #3
0
        private static HttpMessageState ConfigureGetUserOrdersMessage(
            HttpMessageState s,
            Log log,
            string endPoint,
            int userCount,
            Random rng,
            string adminName = "admin",
            string password  = "******")
        {
            var getOrdersMessage = new GetUserOrdersMessage()
            {
                userId    = rng.Next(1, userCount),
                adminName = adminName,
                password  = password,
            };

            s.Name         = userCount + ", HttpMessageState::getUserOrders";
            s.Uri          = endPoint + "/get-user-orders";
            s.Message      = getOrdersMessage;
            s.SetupMessage = (msg) =>
            {
                getOrdersMessage.userId = rng.Next(1, userCount);
                log?.Put(OutputLevel.Info, s.Name, "requesting orders of user " + getOrdersMessage.userId);
            };
            s.ProcessResponse = async(response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(message))
                    {
                        var serverResponse = JsonSerializer.Deserialize <OrderMessageResponse[]>(message);

                        log?.Put(OutputLevel.Info, "For userId " + getOrdersMessage.userId + " received orders " + message);
                    }
                    else
                    {
                        LogError(log, s.Context, s.Name + " no orders received for user " + getOrdersMessage.userId
                                 + " - " + response.ReasonPhrase);
                    }
                }
                else
                {
                    LogError(log, s.Context, s.Name + " error requesting user orders for user " + getOrdersMessage.userId
                             + " - " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #4
0
        private static HttpMessageState ConfigureSendOrderState(HttpMessageState s, Log log, Random rng, string endPoint, string user)
        {
            var orderMessage = OrderMessage.GenerateRandomMessage("-1", rng);

            s.Name         = user + ", HttpMessageState::sendOrder";
            s.Uri          = endPoint + "/post-order";
            s.Message      = orderMessage;
            s.SetupMessage = (msg) =>
            {
                orderMessage.token = s.Context.Resolve <string>(UserTokenId);
                orderMessage.Randomize(s.Context.Resolve <Random>());

                s.Context.Register(MessageCountId, s.Context.Resolve <int>(MessageCountId) + 1);

                log?.Put(OutputLevel.Info, s.Name, "sending order with " + orderMessage.items.Length + " items.");
            };
            s.ProcessResponse = async(response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(message))
                    {
                        var serverResponse = JsonSerializer.Deserialize <ServerResponse>(message);

                        s.Context.Register(AckCountId, s.Context.Resolve <int>(AckCountId) + 1);

                        /*if (serverResponse.timeStamp == orderMessage.timeStamp)
                         * {
                         *  s.Context.Register(AckCountId, s.Context.Resolve<int>(AckCountId) + 1);
                         * }*/
                    }
                    else
                    {
                        LogError(log, s.Context, s.Name + " send order received no ack");
                    }
                }
                else
                {
                    LogError(log, s.Context, s.Name + " send order with " + orderMessage.items.Length + " items, received error code."
                             + " - " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #5
0
        private static HttpMessageState ConfigureHeartbeatMessage(HttpMessageState s, Log log, string endPoint, string user)
        {
            var heartbeatMessage = new HeartbeatMessage();

            s.Name         = user + ", HttpMessageState::heartbeat";
            s.Uri          = endPoint + "/heartbeat";
            s.Message      = heartbeatMessage;
            s.SetupMessage = (msg) =>
            {
                heartbeatMessage.token      = s.Context.Resolve <string>(UserTokenId);
                heartbeatMessage.timeStamp += 1;

                s.Context.Register(MessageCountId, s.Context.Resolve <int>(MessageCountId) + 1);

                log?.Put(OutputLevel.Info, s.Name, "sending heartbeat.");
            };
            s.ProcessResponse = async(response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(message))
                    {
                        var serverResponse = JsonSerializer.Deserialize <ServerResponse>(message);

                        s.Context.Register(AckCountId, s.Context.Resolve <int>(AckCountId) + 1);

                        /*if (serverResponse.timeStamp == heartbeatMessage.timeStamp)
                         * {
                         *  s.Context.Register(AckCountId, s.Context.Resolve<int>(AckCountId) + 1);
                         * }*/
                    }
                    else
                    {
                        LogError(log, s.Context, s.Name + " send heartbeat, received no ack");
                    }
                }
                else
                {
                    LogError(log, s.Context, s.Name + " send heartbeat, received error code." + " - " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #6
0
        private static HttpMessageState ConfigureLoginState(HttpMessageState s, Log log, string endPoint, string user, string password)
        {
            s.Name    = user + ", HttpMessageState::login";
            s.Uri     = endPoint + "/login";
            s.Message = new LoginMessage()
            {
                user     = user,
                password = password,
            };
            s.SetupMessage    = (msg) => log?.Put(OutputLevel.Info, s.Name, "logging in user " + ((LoginMessage)s.Message).user);
            s.ProcessResponse = async(response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(message))
                    {
                        var loginResponse = JsonSerializer.Deserialize <LoginResponse>(message);

                        log?.Put(OutputLevel.Info, s.Name, " received token " + loginResponse.token);

                        s.Context.Register(UserTokenId, loginResponse.token);
                    }
                    else
                    {
                        LogError(log, s.Context, s.Name + " response missed token.");
                    }
                }
                else
                {
                    LogError(log, s.Context, s.Name + " failed login " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }
コード例 #7
0
 private static HttpMessageState ConfigurewrongLoginState(HttpMessageState s, Log log, string endPoint, string user, string password)
 {
     s.Name    = user + ", HttpMessageState::wrongLogin";
     s.Uri     = endPoint + "/login";
     s.Message = new LoginMessage()
     {
         user     = user,
         password = password,
     };
     s.SetupMessage    = (msg) => log?.Put(OutputLevel.Info, s.Name, "logging in user with faulty password" + ((LoginMessage)s.Message).user);
     s.ProcessResponse = (response) =>
     {
         if (response.IsSuccessStatusCode)
         {
             LogError(log, s.Context, s.Name + " somehow the login was correct using " + user + "/" + password);
         }
         else
         {
             log?.Put(OutputLevel.Info, s.Name, " got expected response (ie password does not exist) :) ");
         }
     };
     s.SendMethod = RestMethod.POST;
     return(s);
 }