public LoopingProjectionKillScenario(Action<IPEndPoint, byte[]> directSendOverTcp, int maxConcurrentRequests, int connections, int streams, int eventsPerStream, int streamDeleteStep, TimeSpan executionPeriod, string dbParentPath, NodeConnectionInfo customNode)
            : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
        {
            _executionPeriod = executionPeriod;

            _iterationLoopDuration = TimeSpan.FromMilliseconds(10 * (Streams * EventsPerStream + Streams) + 20 * 1000);
            _firstKillInterval = TimeSpan.FromSeconds(_iterationLoopDuration.TotalSeconds / 2);
        }
 public ProjectionsKillScenario(Action<IPEndPoint, byte[]> directSendOverTcp, 
                                int maxConcurrentRequests, 
                                int connections, 
                                int streams, 
                                int eventsPerStream, 
                                int streamDeleteStep, 
                                string dbParentPath,
                                NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
 {
 }
 public LoopingScenario(Action<IPEndPoint, byte[]> directSendOverTcp, 
                        int maxConcurrentRequests, 
                        int connections, 
                        int streams, 
                        int eventsPerStream, 
                        int streamDeleteStep,
                        TimeSpan executionPeriod,
                        string dbParentPath,
                        NodeConnectionInfo customNodeConnection)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNodeConnection)
 {
     _executionPeriod = executionPeriod;
     SetStartupWaitInterval(TimeSpan.FromSeconds(10));
 }
 public LoopingProjTranWriteScenario(Action<IPEndPoint, byte[]> directSendOverTcp, 
                              int maxConcurrentRequests, 
                              int connections, 
                              int streams, 
                              int eventsPerStream, 
                              int streamDeleteStep,
                              TimeSpan executionPeriod,
                              string dbParentPath,
                              NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
 {
     _executionPeriod = executionPeriod;
     _random = new Random();
 }
 public ProjectionWrongTagCheck(Action<IPEndPoint, byte[]> directSendOverTcp, int maxConcurrentRequests, int connections, int streams, int eventsPerStream, int streamDeleteStep, TimeSpan executionPeriod, string dbParentPath, NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
 {
     _executionPeriod = executionPeriod;
 }
 public ProjForeachForcedCommonNameNoRestartScenario(Action<IPEndPoint, byte[]> directSendOverTcp, 
                                                     int maxConcurrentRequests, 
                                                     int connections, 
                                                     int streams, 
                                                     int eventsPerStream, 
                                                     int streamDeleteStep, 
                                                     TimeSpan executionPeriod, 
                                                     string dbParentPath,
                                                     NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, executionPeriod, dbParentPath, customNode)
 {
 }
        public bool Execute(CommandProcessorContext context, string[] args)
        {
            if (args.Length != 0 && false == (args.Length == 7 || args.Length == 8))
                return false;

            var maxConcurrentRequests = 20;
            var connections = 10;
            var streams = 100;
            var eventsPerStream = 400;
            var streamDeleteStep = 7;
            var scenarioName = "";
            var executionPeriodMinutes = 2;
            string dbParentPath = null;
            NodeConnectionInfo customNode = null;

            {
                if (args.Length == 9)
                {
                    throw new ArgumentException("Not compatible arguments, only one of <dbPath> or <custom node> can be specified.");
                }

                if (args.Length == 8)
                {
                    IPAddress ip;
                    int tcpPort;
                    int httpPort;

                    var atoms = args[7].Split(':');
                    if (atoms.Length == 3
                        && IPAddress.TryParse(atoms[0], out ip)
                        && int.TryParse(atoms[1], out tcpPort)
                        && int.TryParse(atoms[2], out httpPort))
                    {
                        customNode = new NodeConnectionInfo(ip, tcpPort, httpPort);

                        args = CutLastArgument(args);
                    }
                }

                if (args.Length == 7 || args.Length == 8)
                {
                    try
                    {
                        maxConcurrentRequests = int.Parse(args[0]);
                        connections = int.Parse(args[1]);
                        streams = int.Parse(args[2]);
                        eventsPerStream = int.Parse(args[3]);
                        streamDeleteStep = int.Parse(args[4]);
                        scenarioName = args[5];
                        executionPeriodMinutes = int.Parse(args[6]);

                        if (args.Length == 8)
                        {
                            dbParentPath = args[7];
                        }
                        else
                        {
                            var envDbPath = Environment.GetEnvironmentVariable("EVENTSTORE_DATABASEPATH");
                            if (!string.IsNullOrEmpty(envDbPath))
                                dbParentPath = envDbPath;
                        }

                    }
                    catch (Exception e)
                    {
                        Log.Error("Invalid arguments ({0})", e.Message);
                        return false;
                    }
                }
            }

            context.IsAsync();

            Log.Info("\n---" +
                     "\nRunning scenario {0} using {1} connections with {2} max concurrent requests," +
                     "\nfor {3} streams {4} events each deleting every {5}th stream. " +
                     "\nExecution period {6} minutes. " +
                     "\nDatabase path {7};" +
                     "\nCustom Node {8};" +
                     "\n---",
                     scenarioName,
                     connections,
                     maxConcurrentRequests,
                     streams,
                     eventsPerStream,
                     streamDeleteStep,
                     executionPeriodMinutes,
                     dbParentPath,
                     customNode);

            var directTcpSender = CreateDirectTcpSender(context);
            var allScenarios = new IScenario[]
            {
                new LoopingScenario(directTcpSender, 
                                    maxConcurrentRequests, 
                                    connections, 
                                    streams, 
                                    eventsPerStream, 
                                    streamDeleteStep, 
                                    TimeSpan.FromMinutes(executionPeriodMinutes),
                                    dbParentPath,
                                    customNode), 
                new ProjectionsKillScenario(directTcpSender,
                                            maxConcurrentRequests,
                                            connections,
                                            streams,
                                            eventsPerStream,
                                            streamDeleteStep, 
                                            dbParentPath,
                                            customNode),
                new ProjForeachForcedCommonNameScenario(directTcpSender,
                                            maxConcurrentRequests,
                                            connections,
                                            streams,
                                            eventsPerStream,
                                            streamDeleteStep,
                                            TimeSpan.FromMinutes(executionPeriodMinutes),
                                            dbParentPath,
                                            customNode),
                new ProjForeachForcedCommonNameNoRestartScenario (directTcpSender, 
                                            maxConcurrentRequests, 
                                            connections, 
                                            streams, 
                                            eventsPerStream, 
                                            streamDeleteStep, 
                                            TimeSpan.FromMinutes(executionPeriodMinutes),
                                            dbParentPath,
                                            customNode), 
                new LoopingProjTranWriteScenario(directTcpSender, 
                                            maxConcurrentRequests, 
                                            connections, 
                                            streams, 
                                            eventsPerStream, 
                                            streamDeleteStep,
                                            TimeSpan.FromMinutes(executionPeriodMinutes),
                                            dbParentPath,
                                            customNode), 
                new LoopingProjectionKillScenario(directTcpSender, 
                                                  maxConcurrentRequests, 
                                                  connections, 
                                                  streams, 
                                                  eventsPerStream, 
                                                  streamDeleteStep, 
                                                  TimeSpan.FromMinutes(executionPeriodMinutes),
                                                  dbParentPath,
                                                  customNode), 
                new MassProjectionsScenario(directTcpSender, 
                                            maxConcurrentRequests, 
                                            connections, 
                                            streams, 
                                            eventsPerStream, 
                                            streamDeleteStep, 
                                            dbParentPath,
                                            customNode),
                new ProjectionWrongTagCheck(directTcpSender, 
                                            maxConcurrentRequests, 
                                            connections, 
                                            streams, 
                                            eventsPerStream, 
                                            streamDeleteStep, 
                                            TimeSpan.FromMinutes(executionPeriodMinutes),
                                            dbParentPath,
                                            customNode), 
                };

            Log.Info("Found scenarios {0} total :\n{1}.", allScenarios.Length, allScenarios.Aggregate(new StringBuilder(),
                                                                                                       (sb, s) => sb.AppendFormat("{0}, ", s.GetType().Name)));
            var scenarios = allScenarios.Where(x => scenarioName == AllScenariosFlag
                                                    || x.GetType().Name.Equals(scenarioName, StringComparison.InvariantCultureIgnoreCase))
                                        .ToArray();

            Log.Info("Running test scenarios ({0} total)...", scenarios.Length);

            foreach (var scenario in scenarios)
            {
                using (scenario)
                {
                    try
                    {
                        Log.Info("Run scenario {0}", scenario.GetType().Name);
                        scenario.Run();
                        scenario.Clean();
                        Log.Info("Scenario run successfully");
                    }
                    catch (Exception e)
                    {
                        context.Fail(e);
                    }
                }
            }
            Log.Info("Finished running test scenarios");

            if (context.ExitCode == 0)
                context.Success();

            return true;
        }
Beispiel #8
0
 public ProjForeachForcedCommonNameScenario(Action <IPEndPoint, byte[]> directSendOverTcp, int maxConcurrentRequests, int connections, int streams, int eventsPerStream, int streamDeleteStep, TimeSpan executionPeriod, string dbParentPath, NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
 {
     _executionPeriod = executionPeriod;
 }
Beispiel #9
0
        public LoopingProjectionKillScenario(Action <IPEndPoint, byte[]> directSendOverTcp, int maxConcurrentRequests, int connections, int streams, int eventsPerStream, int streamDeleteStep, TimeSpan executionPeriod, string dbParentPath, NodeConnectionInfo customNode)
            : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
        {
            _executionPeriod = executionPeriod;

            _iterationLoopDuration = TimeSpan.FromMilliseconds(10 * (Streams * EventsPerStream + Streams) + 20 * 1000);
            _firstKillInterval     = TimeSpan.FromSeconds(_iterationLoopDuration.TotalSeconds / 2);
        }
 protected ProjectionsScenarioBase(Action <IPEndPoint, byte[]> directSendOverTcp, int maxConcurrentRequests, int connections, int streams, int eventsPerStream, int streamDeleteStep, string dbParentPath, NodeConnectionInfo customNode)
     : base(directSendOverTcp, maxConcurrentRequests, connections, streams, eventsPerStream, streamDeleteStep, dbParentPath, customNode)
 {
 }