示例#1
0
        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); });
        }
示例#2
0
        /// <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();
        }
示例#3
0
 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);
 }
示例#4
0
        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); })
                });
            });
        }
示例#5
0
        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));
            }
        }
示例#6
0
        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();
            }
        }
示例#7
0
 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);
 }
示例#8
0
        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();
            }
        }
示例#9
0
        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);
        }