Пример #1
0
        public async Task DoAccountingCorrectly()
        {
            NekaraClient client = RuntimeEnvironment.Client;

            client.InitSessionDir();
            var _t3 = RuntimeEnvironment.Client.Api;

            _t3.CreateTask();



            var _t1     = new TestClusterBuilder();
            var cluster = _t1.Build();

            cluster.Deploy();

            Guid acc1 = Guid.NewGuid();

            _ = Task.WhenAll(
                cluster.GrainFactory.GetGrain <IAccountGrain11>(acc1).Withdraw(200),
                cluster.GrainFactory.GetGrain <IAccountGrain11>(acc1).Deposit(100));

            uint fromBalance = await cluster.GrainFactory.GetGrain <IAccountGrain11>(acc1).GetBalance();

            cluster.StopAllSilos();

            Assert.Equal(900u, fromBalance);
        }
Пример #2
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                if (args.Length == 1)
                {
                    var    compiler = new NekaraCompiler();
                    string source   = File.ReadAllText(args[0]);

                    var userCode = compiler.Compile(source);
                    var type     = userCode.GetType("Nekara.Models.Benchmarks.CompileTest");
                    var method   = type.GetMethod("Hello");
                    // method.Invoke(null, null);

                    Console.WriteLine(userCode);
                    return;
                }

                Console.WriteLine("Provide Benchmark Name and Iteration Count");
                Console.WriteLine("e.g. Benchmarks.exe DiningPhilosophers5.Run 100");
                return;
            }

            // var random = new Random(DateTime.Now.Second);

            Console.WriteLine("Running Benchmarks...");

            NekaraClient client = RuntimeEnvironment.Client;

            if (args[0] == "replay")
            {
                // Make a replay request
                var run = client.ReplayTestSession(args[1]).Task;
                run.Wait();
            }
            else
            {
                var info       = args[0].Split('.');
                var typeName   = String.Join(".", info.Take(info.Length - 1));
                var methodName = info.Last();
                var repeat     = Int32.Parse(args[1]);

                var assembly       = Assembly.GetExecutingAssembly();
                var testMethod     = client.GetMethodToBeTested(assembly, typeName, methodName);
                var testDefinition = client.GetTestDefinition(testMethod);

                /*for (int i = 0; i < repeat; i++)
                 * {
                 *  var run = client.RunTest(testMethod, random.Next()).Task;
                 *  run.Wait();
                 * }*/

                var summaryFile = File.AppendText("logs/benchmark-summary-" + DateTime.Now.Ticks.ToString() + ".csv");
                summaryFile.WriteLine("Test,NumSchedules,MinSteps,AvgSteps,MaxSteps,OverSteps,ElapsedClient,ElapsedServer");

                var multipleRuns = Helpers.RepeatTask(() => new Promise((resolve, reject) =>
                {
                    var beginAt = Stopwatch.GetTimestamp();

                    var run = client.RunTest(testDefinition, repeat, terminateOnFirstFail: true).Task;
                    run.Wait();

                    var elapsed = (Stopwatch.GetTimestamp() - beginAt) / 10000;

                    var summary           = (TestSummary)run.Result;
                    summary.elapsedClient = elapsed;

                    Console.WriteLine("... Elapsed {0} sec", elapsed / 1000);
                    Console.WriteLine(summary.ToString());

                    summaryFile.WriteLine($"{typeName},{summary.iterations},{summary.minDecisions},{summary.avgDecisions},{summary.maxDecisions},{summary.maxDecisionsReached},{summary.elapsedClient},{summary.elapsedServer}");
                    summaryFile.Flush();

                    resolve(null);
                }).Task, 1);

                multipleRuns.Wait();
            }

            client.PrintTestResults();

            client.Dispose();
        }