private void SimulateConnect(TestAuditPipelineModule module, string cnnId) { var dict = new Dictionary <string, object>(); var request = new Mock <IRequest>(); request.Setup(x => x.Environment).Returns(() => dict); var hub = new Mock <IHub>(); hub.Setup(x => x.Context.ConnectionId).Returns(cnnId); hub.SetupGet(x => x.Context.Request).Returns(() => request.Object); module.OnBeforeConnect(hub.Object); Task.Delay(50).Wait(); module.OnAfterConnect(hub.Object); Task.Delay(50).Wait(); }
public void Test_Signalr_Stress() { var ids = new List <string>(); var evs = new ConcurrentBag <AuditEvent>(); Configuration.Setup() .UseDynamicProvider(x => x .OnInsertAndReplace(ev => { evs.Add(ev); })) .WithCreationPolicy(EventCreationPolicy.InsertOnEnd) .ResetActions(); var threads = 25; var tasks = new Task <string> [threads]; Trace.WriteLine($"Threads: {threads}"); Console.WriteLine($"Threads: {threads}"); var module = new TestAuditPipelineModule(); for (int i = 0; i < threads; i++) { var cnnId = Guid.NewGuid().ToString(); ids.Add(cnnId); tasks[i] = Task.Run(() => DoStress(module, cnnId)); } Task.WaitAll(tasks); Task.Delay(1000).Wait(); Assert.AreEqual(6 * threads, evs.Count); for (int i = 0; i < threads; i++) { var id = ids[i]; Assert.AreEqual(id, tasks[i].Result); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventConnect>()?.ConnectionId == id)); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventDisconnect>()?.ConnectionId == id)); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventReconnect>()?.ConnectionId == id)); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventIncoming>()?.ConnectionId == id)); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventOutgoing>()?.Signal == "mysignal-" + id)); Assert.AreEqual(1, evs.Count(x => x.GetSignalrEvent <SignalrEventError>()?.ConnectionId == id)); } }
public void Test_Signalr_AuditDisabled() { var evs = new List <AuditEvent>(); Configuration.Setup() .UseDynamicProvider(x => x .OnInsertAndReplace(ev => { evs.Add(ev); })); var module = new TestAuditPipelineModule { AuditDisabled = true }; SimulateConnectReconnectDisconnect(module); Assert.AreEqual(0, evs.Count); }
private void SimulateIncomingError(TestAuditPipelineModule module, Exception exception, string cnnId, string method, object[] args) { var dict = new Dictionary <string, object>(); var hub = new Mock <IHub>(); hub.Setup(x => x.Context.ConnectionId).Returns(cnnId); var request = new Mock <IRequest>(); hub.SetupGet(x => x.Context.Request).Returns(() => request.Object); request.Setup(x => x.Environment).Returns(() => dict); var ctx = new Mock <IHubIncomingInvokerContext>(); ctx.SetupGet(x => x.MethodDescriptor).Returns(() => new MethodDescriptor() { Name = method }); ctx.SetupGet(x => x.Hub).Returns(() => hub.Object); ctx.SetupGet(x => x.Args).Returns(() => args?.ToList()); hub.SetupGet(x => x.Context.Request).Returns(() => request.Object); module.OnIncomingError(new ExceptionContext(exception), ctx.Object); Task.Delay(50).Wait(); }
private string DoStress(TestAuditPipelineModule module, string cnnId) { SimulateConnect(module, cnnId); Task.Delay(50).Wait(); SimulateOutgoing(module, cnnId, "myhub", "mysignal-" + cnnId, null); Task.Delay(50).Wait(); SimulateIncoming(module, cnnId, "method1", new object [] { cnnId }); Task.Delay(50).Wait(); SimulateReconnect(module, cnnId); Task.Delay(50).Wait(); SimulateIncomingError(module, new ArgumentNullException("p", cnnId), cnnId, "method2", null); Task.Delay(50).Wait(); SimulateDisconnect(module, cnnId); Task.Delay(50).Wait(); return(cnnId); }
private void SimulateOutgoing(TestAuditPipelineModule module, string cnnId, string hubName, string signal, object[] args) { var dict = new Dictionary <string, object>(); var hub = new Mock <IHub>(); hub.Setup(x => x.Context.ConnectionId).Returns(cnnId); var request = new Mock <IRequest>(); hub.SetupGet(x => x.Context.Request).Returns(() => request.Object); request.Setup(x => x.Environment).Returns(() => dict); var ctx = new Mock <IHubOutgoingInvokerContext>(); ctx.SetupGet(x => x.Signal).Returns(() => signal); ctx.SetupGet(x => x.Invocation).Returns(() => new ClientHubInvocation() { Method = "receive", Args = args, Hub = hubName }); hub.SetupGet(x => x.Context.Request).Returns(() => request.Object); module.OnBeforeOutgoing(ctx.Object); Task.Delay(50).Wait(); module.OnAfterOutgoing(ctx.Object); Task.Delay(50).Wait(); }
public void Test_Signalr_Incoming() { var evs = new List <AuditEvent>(); Configuration.Setup() .UseDynamicProvider(x => x .OnInsertAndReplace(ev => { evs.Add(ev); })); var module = new TestAuditPipelineModule(); SimulateIncoming(module, "cnn-incoming", "send", new object[] { 1, "two" }); Task.Delay(50).Wait(); Assert.AreEqual(1, evs.Count); Assert.AreEqual("Incoming", evs[0].EventType); Assert.AreEqual(SignalrEventType.Incoming, evs[0].GetSignalrEvent <SignalrEventIncoming>().EventType); Assert.AreEqual("cnn-incoming", evs[0].GetSignalrEvent <SignalrEventIncoming>().ConnectionId); Assert.AreEqual("send", evs[0].GetSignalrEvent <SignalrEventIncoming>().MethodName); Assert.AreEqual(1, evs[0].GetSignalrEvent <SignalrEventIncoming>().Args[0]); Assert.AreEqual("two", evs[0].GetSignalrEvent <SignalrEventIncoming>().Args[1]); }
public void Test_Signalr_Error() { var evs = new List <AuditEvent>(); Configuration.Setup() .UseDynamicProvider(x => x .OnInsertAndReplace(ev => { evs.Add(ev); })); var module = new TestAuditPipelineModule(); SimulateIncomingError(module, new ArgumentNullException("SomeParameter", "message"), "cnn-Error", "err", new object[] { 0 }); Task.Delay(50).Wait(); Assert.AreEqual(1, evs.Count); Assert.AreEqual("Error", evs[0].EventType); Assert.AreEqual(SignalrEventType.Error, evs[0].GetSignalrEvent <SignalrEventError>().EventType); Assert.AreEqual("cnn-Error", evs[0].GetSignalrEvent <SignalrEventError>().ConnectionId); Assert.AreEqual("err", evs[0].GetSignalrEvent <SignalrEventError>().MethodName); Assert.AreEqual(0, evs[0].GetSignalrEvent <SignalrEventError>().Args[0]); Assert.IsTrue(evs[0].GetSignalrEvent <SignalrEventError>().Exception.Contains("SomeParameter")); }
public void Test_Signalr_Outgoing() { var evs = new List <AuditEvent>(); Configuration.Setup() .UseDynamicProvider(x => x .OnInsertAndReplace(ev => { evs.Add(ev); })); var module = new TestAuditPipelineModule(); SimulateOutgoing(module, "cnn-Outgoing", "myhub", "signal", new object[] { "one", 2 }); Task.Delay(50).Wait(); Assert.AreEqual(1, evs.Count); Assert.AreEqual("Outgoing", evs[0].EventType); Assert.AreEqual(SignalrEventType.Outgoing, evs[0].GetSignalrEvent <SignalrEventOutgoing>().EventType); Assert.AreEqual("signal", evs[0].GetSignalrEvent <SignalrEventOutgoing>().Signal); Assert.AreEqual("receive", evs[0].GetSignalrEvent <SignalrEventOutgoing>().MethodName); Assert.AreEqual("one", evs[0].GetSignalrEvent <SignalrEventOutgoing>().Args[0]); Assert.AreEqual(2, evs[0].GetSignalrEvent <SignalrEventOutgoing>().Args[1]); }