public async Task Test() { string message = Guid.NewGuid().ToString(); TestReceiver receiver = null; SignalX signalX = SignalX.CreateInstance( instance => { receiver = new TestReceiver(); return(receiver); }); var signalTestClient = new SignalTestClient(receiver); signalX.Server("us", request => { request.RespondToSender(message); }); signalX.Server( "sam", async request => { //request.Forward("us"); await request.ForwardAsync("us"); request.RespondToServer("us", "abc"); request.RespondToSender(message); }); signalX.SetSignalXClientAsReady(); signalX.RespondToServer("sam", "abc"); await this.WillPassBeforeGivenTime( TimeSpan.FromSeconds(1000), () => { this.AreEqual(receiver.MessagesReceived.LastOrDefault().Message, message); }); }
/// <summary> /// NOTE : this is not complete /// </summary> /// <param name="args"></param> private static void Main(string[] args) { // TestObject testObject = SignalXTester.SetupGeneralTest(); var url = "http://localhost:44111"; using (WebApp.Start <Startup>(url)) { SignalX SignalX = SignalX.Instance; System.Diagnostics.Process.Start(url); while (true) { Console.WriteLine("Press any key to run the test"); Console.ReadKey(); try { Console.WriteLine("tests succeeded!"); SignalX.RunJavaScriptOnAllClients("alert('yo');for(i=0;i<10000;i++) {console.log(Math.pow(999, Math.pow(9, 2)));}", (response) => { var result = response.MessageAs <int>(); }, TimeSpan.FromSeconds(5)); break; } catch (Exception e) { Console.WriteLine(e); Console.WriteLine("press any key to try again"); } } } Console.WriteLine("press any key to exit!"); Console.ReadKey(); }
public async Task SendMessageToServer( string correlationId, SignalX signalX, HubCallerContext context, IHubCallerConnectionContext <dynamic> clients, IGroupManager groups, string handler, object message, string replyTo, object sender, string messageId, List <string> groupList) { await signalX.RespondToServer(context ?? signalX.NullHubCallerContext, clients, groups, handler, message, sender, replyTo ?? signalX.NullHubCallerContext.ConnectionId, groupList); }
public void Test() { SignalXTester.Run( (signalx, assert) => { SignalXTester.ScriptDownLoadFunction = ScriptSource.ScriptDownLoadFunction; signalx.SetUpClientErrorMessageHandler((error, request) => { }); signalx.SetUpClientDebugMessageHandler((error, request) => { }); SignalX mySignalX = SignalX.Instance; signalx.OnException((message, exception) => { }); signalx.OnWarning((message, exception) => { }); signalx.OnConnectionEvent((message, exception) => { }); signalx.AllowDynamicServer = false; signalx.Settings.RequireAuthorizationForPersistentConnections = false; signalx.Settings.ManageUserConnections = true; ConnectionMapping <string> Connections = signalx.Connections; bool HasOneOrMoreConnections = signalx.Settings.HasOneOrMoreConnections; HubConfiguration HubConfiguration = signalx.Settings.HubConfiguration; bool LogAgentMessagesOnClient = signalx.Settings.LogAgentMessagesOnClient; // ISignalXClientReceiver Receiver = signalx.Settings.Receiver; bool RequireAuthorizationForAllHandlers = signalx.Settings.RequireAuthorizationForAllHandlers; signalx.AuthenticationHandler(request => Task.FromResult(true)); signalx.DisableAllClients(); signalx.DisableClient("test"); signalx.EnableAllClients(); signalx.EnableClient("test"); signalx.GetInComingMessageSpeedAsync(TimeSpan.FromSeconds(10)); signalx.GetOutGoingMessageSpeedAsync(TimeSpan.FromSeconds(10)); signalx.SetGlobalDefaultMessageBufferSize(1000); signalx.AuthenticationHandler(r => Task.FromResult(true)); SignalXTester.ScriptDownLoadFunction = ScriptSource.ScriptDownLoadFunction; SignalXTester.EmbedeLibraryScripts = true; return(new SignalXTestDefinition("") { OnAppStarted = () => { signalx.Server(SignalXExtensions.GenerateUniqueNameId().Replace("-", ""), request => { }); signalx.Server(ServerType.Authorized, SignalXExtensions.GenerateUniqueNameId().Replace("-", ""), request => { }); signalx.Server(ServerType.AuthorizedSingleAccess, SignalXExtensions.GenerateUniqueNameId().Replace("-", ""), request => { }); signalx.Server(ServerType.SingleAccess, SignalXExtensions.GenerateUniqueNameId().Replace("-", ""), request => { }); }, TestEvents = new TestEventHandler( () => { assert.AreEqual(1, (int)signalx.ConnectionCount); }) }); }); }
public void DoSomething() { SignalX sx = SignalX.Instance; sx.Settings.ReceiveErrorMessagesFromClient = true; sx.Settings.ReceiveDebugMessagesFromClient = true; sx.Settings.ManageUserConnections = true; sx.Settings.LogAgentMessagesOnClient = true; sx.Settings.ClientLogScriptFunction = @" (function(html){ var appendHtml= function (el, str) { var div = document.createElement('div'); div.innerHTML = str; while (div.children.length > 0) { el.appendChild(div.children[0]); } } appendHtml(document.body,html); })"; sx.SetUpClientErrorMessageHandler( (error, request) => { throw new Exception($"Failed because an error has occurred on the client side script during a test '{this.TestName.Replace("_", " ")}' {error}"); }); var exceptionTracker = new ExceptionTracker { Exception = null }; sx.OnException( (m, e) => { exceptionTracker.Exception = new Exception(m, e); exceptionTracker.Context = m; }); if (this.MethodBody != null) { SignalXTester.Run(exceptionTracker, sx, this.MethodBody?.Invoke(sx, new SignalXAssertionLib())); } if (this.MethodBody2 != null) { SignalXTester.Run(exceptionTracker, sx, this.MethodBody2?.Invoke(sx)); } }
private static void Main(string[] args) { var url = "http://localhost:44111"; using (WebApp.Start(url)) { SignalX SignalX = SignalX.Instance; SignalX.Settings.RequireAuthorizationForAllHandlers = false; SignalX.AuthenticationHandler((r) => Task.FromResult(true)); SignalX.OnWarning( (m, e) => { Console.WriteLine(e); Console.WriteLine(e); }); SignalX.OnException( (m, e) => { Console.WriteLine(e); Console.WriteLine(e); }); SignalX.Server("Sample", request => { var messageId = SignalXExtensions.GenerateUniqueNameId(); SignalX.RespondToAll("Myclient", messageId + " - " + request.MessageAsJsonString + ": Thank you for sending me the message "); SignalX.RespondToAll("Myclient", messageId + " - " + request.MessageAsJsonString + ": Hang on i'm not done yet"); Task.Delay(TimeSpan.FromMilliseconds(1000)).ContinueWith(x => { SignalX.RespondToAll("Myclient", messageId + " - " + request.MessageAsJsonString + ": So im almost done"); }); Task.Delay(TimeSpan.FromMilliseconds(1000)).ContinueWith(x => { SignalX.RespondToAll("Myclient", messageId + " - " + request.MessageAsJsonString + ": Im' done!"); }); }); SignalX.Server( "GetInComingMessageSpeed", (request) => { SignalX.GetInComingMessageSpeedAsync(TimeSpan.FromSeconds(10)).ContinueWith( x => { SignalX.RespondToAll(request.ReplyTo, x.Result); }); }); SignalX.Server( "GetOutGoingMessageSpeed", (request) => { SignalX.GetOutGoingMessageSpeedAsync(TimeSpan.FromSeconds(10)).ContinueWith( x => { SignalX.RespondToAll(request.ReplyTo, x.Result); }); }); SignalX.Server("DisableAllClients", (request) => { SignalX.DisableAllClients(); }); SignalX.Server("Sample2", (request) => { SignalX.RespondToAll(string.IsNullOrEmpty(request.ReplyTo) ? "Myclient" : request.ReplyTo, request.MessageId + ":" + request.Sender + " sent me this message : " + request.MessageAsJsonString + " and asked me to reply to " + request.ReplyTo); }); SignalX.Server("Sample3", (request) => request.RespondToSender(request.ReplyTo)); System.Diagnostics.Process.Start(url); foreach (int i in Enumerable.Range(0, 100000)) { SignalX.RespondToAll("sa", "you"); } Console.ReadLine(); } }
public async Task RequestScripts(SignalX SignalX, HubCallerContext context, IHubCallerConnectionContext <dynamic> clients, IGroupManager groups, string correlationId) { correlationId = correlationId ?? Guid.NewGuid().ToString(); await SignalX.RespondToScriptRequest(correlationId, context, clients, groups).ConfigureAwait(false); }
internal static void CheckExpectations(ExceptionTracker exceptionTracker, SignalX signalX, int numberOfClients, Action operation, string url, List <TestObject> testObjects, BrowserType browserType = BrowserType.Default, TestEventHandler events = null) { Thread thread = null; var browserProcess = new List <Process>(); /* * */ //https://stackoverflow.com/questions/22538457/put-a-string-with-html-javascript-into-selenium-webdriver //https://www.automatetheplanet.com/selenium-webdriver-csharp-cheat-sheet/ var option = new FirefoxOptions(); option.AddArgument("--headless"); var _drivers = new List <IWebDriver>(); if (browserType == BrowserType.HeadlessBrowser) { for (int i = 0; i < testObjects.Count; i++) { _drivers.Add( new FirefoxDriver( option // Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), )); } } try { using (WebApp.Start <Startup>(url)) { events?.OnAppStarted?.Invoke(); thread = new Thread( () => { try { for (int i = 0; i < testObjects.Count; i++) { TestObject testObject = testObjects[i]; if (browserType == BrowserType.SystemBrowser) { browserProcess.Add(Process.Start(url + testObject.FileName)); } if (browserType == BrowserType.Default || browserType == BrowserType.HeadlessBrowser) { _drivers[i].Navigate().GoToUrl(url); ((IJavaScriptExecutor)_drivers[i]).ExecuteScript($"arguments[0].innerHTML = '{testObject.PageHtml}'"); } } } catch (Exception e) { events?.OnClientError?.Invoke(new AggregateException(e, exceptionTracker.Exception)); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); // SpinWait.SpinUntil(() => (!SignalX.Settings.HasOneOrMoreConnections || SignalX.CurrentNumberOfConnections < (ulong)numberOfClients), MaxTestWaitTimeBeforeChecks); AwaitAssert( () => { if (!signalX.Settings.HasOneOrMoreConnections) { throw new Exception("No connection received from any client.This may also be caused by a slow connection " + exceptionTracker?.Exception?.Message); } if (signalX.ConnectionCount < (ulong)numberOfClients) { throw new Exception($"Wait timeout for expected number of clients {numberOfClients} to show up.This may also be caused by a slow connection " + exceptionTracker?.Exception?.Message); } }, () => { if (exceptionTracker.Exception != null) { throw exceptionTracker.Exception; } }, MaxWaitTimeForAllExpectedConnectionsToArrive); new SignalXAssertionLib().WaitForSomeTime(MaxTestWaitTimeBeforeChecks); events?.OnClientLoaded?.Invoke(); //wait for some time before checks to allow side effects to occur AwaitAssert( () => { operation(); //if we got this far, then we made it events?.OnCheckSucceeded?.Invoke(); }, () => { if (exceptionTracker.Exception != null) { throw exceptionTracker.Exception; } }, MaxTestTimeSpan, null, ex => { //to handle both exceptions if (exceptionTracker.Exception != null) { events?.OnFinally?.Invoke(exceptionTracker.Exception); } else { events?.OnFinally?.Invoke(ex); } }, events?.OnCheckFailures); } } finally { QuitAllBrowsers(_drivers, browserProcess, thread, testObjects, browserType); signalX.Dispose(); } }
internal static void Run(ExceptionTracker exceptionTracker, SignalX signalX, SignalXTestDefinition scenarioDefinition) { // SetSignalXInstance(signalX); //setup var testObjects = new List <TestObject>(); // script string scriptTags = ""; if (EmbedeLibraryScripts) { JQueryScriptDownload = JQueryScriptDownload ?? ScriptDownLoadFunction(ScriptLibraries.JQUERY, CDNjQuery); signalRScriptDownload = signalRScriptDownload ?? ScriptDownLoadFunction(ScriptLibraries.SIGNALR, CDNSignalR); signalxScriptDownload = signalxScriptDownload ?? ScriptDownLoadFunction(ScriptLibraries.SIGNALX, CDNSignalX); scriptTags = @" <script>" + JQueryScriptDownload + @"</script> <script>" + signalRScriptDownload + @"</script> <script>" + signalxScriptDownload + @"</script> "; } else { scriptTags = @" <script src='" + CDNjQuery + @"'></script> <script src='" + CDNSignalR + @"'></script> <script src='" + CDNSignalX + @"'></script> "; } scriptTags += "<script>" + signalX.ClientErrorSnippet + @"</script>"; //todo this ovverides settings. so use jquery events on clients scriptTags += @"<script>signalx.debug(function(ev,e){ " + signalX.Settings.ClientLogScriptFunction + @"('<div style=\' color:green\'>'+JSON.stringify(e)+'</div>'); });</script>"; scriptTags += @"<script>signalx.error(function(ev,e){ " + signalX.Settings.ClientLogScriptFunction + @"('<div style=\' color:red\'>'+JSON.stringify(e)+'</div>'); });</script>"; for (int i = 0; i < scenarioDefinition.NumberOfClients; i++) { string script = scenarioDefinition.Script.Count == 1 ? scenarioDefinition.Script[0] : scenarioDefinition.Script[i]; var testObject = new TestObject(); testObject.BaseDirectory = AppDomain.CurrentDomain.BaseDirectory; testObject.FileName = "\\index" + TestFileNameGenerator() + ".html"; testObject.PageHtml = WrapScriptInHtml(scriptTags, script, "<h1>Signalx tests running ....</h1>"); testObject = scenarioDefinition.OnClientPrepared == null ? testObject : scenarioDefinition.OnClientPrepared.Invoke(testObject); string FilePath = testObject.BaseDirectory + testObject.FileName; File.WriteAllText(FilePath, testObject.PageHtml); testObjects.Add(testObject); } scenarioDefinition.TestEvents = scenarioDefinition.TestEvents ?? new TestEventHandler(); scenarioDefinition.TestEvents.OnAppStarted = () => { scenarioDefinition?.OnAppStarted?.Invoke(); }; int port = TcpPortNumberGenerator(); if (!IsPortIsAvailable(port)) { throw new Exception($"The specified tcp port {port} is already in use"); } CheckExpectations( exceptionTracker, signalX, scenarioDefinition.NumberOfClients, () => { scenarioDefinition?.Checks?.Invoke(); }, "http://localhost:" + port, testObjects, scenarioDefinition.BrowserType, scenarioDefinition.TestEvents); }