Пример #1
0
        public void WarewolfQueue_Threaded_EnqueueDequeue_FlushShouldDelay_Success()
        {
            var startTime = DateTime.UtcNow;

            var expected = new BenchmarkObject
            {
                Number = 123,
                Word   = "test value"
            };

            using (var gate = new ManualResetEvent(false))
            {
                Exception threadException = null;
                var       thread          = new Thread((Object queueInstance) =>
                {
                    var queue = queueInstance as WarewolfQueue;

                    try
                    {
                        using (var session = queue.OpenSession())
                        {
                            BenchmarkObject data = null;
                            gate.WaitOne();

                            data = session.Dequeue <BenchmarkObject>();
                            Assert.IsNotNull(data);
                            Assert.AreEqual(data, expected);
                            var startTimeValue = (DateTime.UtcNow - startTime).TotalMilliseconds;
                            Assert.IsTrue(startTimeValue > 1000, "flush does not define enqueue timing");
                            session.Flush();
                        }
                    }
                    catch (Exception e)
                    {
                        threadException = e;
                    }
                })
                {
                    IsBackground = true
                };

                thread.Start(_queue);

                using (var session = _queue.OpenSession())
                {
                    startTime = DateTime.UtcNow;
                    session.Enqueue(expected);
                    Thread.Sleep(1000);
                    session.Flush();
                    gate.Set();
                }

                thread.Join();
                if (threadException != null)
                {
                    throw threadException;
                }
            }
        }
Пример #2
0
            public bool Equals(BenchmarkObject other)
            {
                var eq = true;

                eq &= Number == other.Number;
                eq &= Word == other.Word;
                return(eq);
            }
Пример #3
0
        public void WarewolfQueue_Threaded_EnqueueDequeue_Benchmark_Success()
        {
            var expected = new BenchmarkObject
            {
                Number = 123,
                Word   = "test value"
            };

            Exception threadException = null;
            var       thread          = new Thread(() =>
            {
                try
                {
                    using (var session = _queue.OpenSession())
                    {
                        for (var i = 0; i < 100000; i++)
                        {
                            BenchmarkObject data = null;
                            do
                            {
                                data = session.Dequeue <BenchmarkObject>();
                            } while (data is null);
                            Assert.AreEqual(data, expected);
                            session.Flush();
                        }
                    }
                }
                catch (Exception e)
                {
                    threadException = e;
                }
            })
            {
                IsBackground = true
            };

            thread.Start();

            using (var session = _queue.OpenSession())
            {
                for (var i = 0; i < 100000; i++)
                {
                    session.Enqueue(expected);
                    session.Flush();
                }
            }

            thread.Join();
            if (threadException != null)
            {
                throw threadException;
            }
        }
    }
Пример #4
0
        public MeasurementResult Measure()
        {
            using (var remoteObjectServer = new EloquentServer($"{_scheme}://127.0.0.1:50000", new EloquentSettings
            {
                HeartBeatMs = 1000,
                MaxHeartBeatLost = 5,
                ReceiveTimeout = 1000,
                SendTimeout = 1000
            }))
            {
                var benchmarkObject = new BenchmarkObject();
                remoteObjectServer.Add <IBenchmarkObject>("endpoint1", benchmarkObject);

                //Create Clients
                var clients     = new EloquentClient[_numberOfEventClients];
                var connections = new IBenchmarkObject[_numberOfEventClients];

                var autoResetEvent = new AutoResetEvent(false);
                for (var i = 0; i < _numberOfEventClients; i++)
                {
                    clients[i] = new EloquentClient($"{_scheme}://127.0.0.1:50000", $"{_scheme}://127.0.0.1:6000{i}", new EloquentSettings
                    {
                        HeartBeatMs    = 1000,
                        SendTimeout    = 1000,
                        ReceiveTimeout = 10000
                    });
                    connections[i] = clients[i].Connect <IBenchmarkObject>("endpoint1");
                    connections[i].EventOccurred += last =>
                    {
                        if (last)
                        {
                            autoResetEvent.Set();
                        }
                    };
                }

                var result = MeasurementResult.Measure($"EloquentObjects: Events with {_scheme}", () =>
                {
                    benchmarkObject.StartEvents(_iterations / _numberOfEventClients);

                    autoResetEvent.WaitOne();
                });

                //Dispose clients
                for (var i = 0; i < _numberOfEventClients; i++)
                {
                    clients[i].Dispose();
                }

                return(result);
            }
        }