diff --git a/Example.Frontend/Program.cs b/Example.Frontend/Program.cs index d22c829..f374205 100644 --- a/Example.Frontend/Program.cs +++ b/Example.Frontend/Program.cs @@ -22,7 +22,7 @@ class Program { new RemoteTypeBinder(); - var builder = Host.CreateApplicationBuilder(); + var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings { DisableDefaults = true }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(provider => diff --git a/Example.Load/Program.cs b/Example.Load/Program.cs index 679ff9e..ccadfb2 100644 --- a/Example.Load/Program.cs +++ b/Example.Load/Program.cs @@ -1,14 +1,17 @@ using System.Net; using Example.Shared; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using mROA.Abstract; using mROA.Cbor; using mROA.Codegen; using mROA.Implementation; using mROA.Implementation.Backend; -using mROA.Implementation.Bootstrap; using mROA.Implementation.Frontend; -const int C = 100; + +const int C = 6; var time = TimeSpan.FromSeconds(10); Console.WriteLine($"Starting bench for {time} from {C} connections"); var cts = new CancellationTokenSource(); @@ -17,10 +20,11 @@ new RemoteTypeBinder(); var tasks = new Task[C]; for (int i = 0; i < C; i++) { - tasks[i] = Requests(cts.Token); + tasks[i] = Requests(cts.Token, i); } cts.CancelAfter(time); +Console.WriteLine($"Test end at {DateTime.Now.Add(time)}"); Console.WriteLine("Start waiting"); await Task.WhenAll(tasks); Console.WriteLine("End waiting"); @@ -29,48 +33,78 @@ var totalRequests = tasks.Sum(i => i.Result); Console.WriteLine($"Total requests: {totalRequests}"); Console.WriteLine($"Results: {totalRequests / time.TotalSeconds:N} RPS"); -async Task Requests(CancellationToken token) +async Task Requests(CancellationToken token, int id) { - var builder = new FullMixBuilder(); - - builder.Modules.Add(new CborSerializationToolkit()); - builder.Modules.Add(new EndPointContext()); - builder.Modules.Add(new RemoteInstanceRepository()); - builder.Modules.Add(new ChannelInteractionModule()); - // builder.Modules.Add(new UdpUntrustedInteraction()); - builder.Modules.Add(new RepresentationModule()); - var serverEndPoint = new IPEndPoint(IPAddress.Loopback, 4567); - builder.Modules.Add(new NetworkFrontendBridge(serverEndPoint)); - builder.Modules.Add(new StaticRepresentationModuleProducer()); - // builder.Modules.Add(new RequestExtractor()); - builder.Modules.Add(new BasicExecutionModule()); - var methodRepo = new CollectableMethodRepository(); - methodRepo.AppendInvokers(new GeneratedInvokersCollection()); - builder.Modules.Add(methodRepo); - builder.Modules.Add(new GeneratedCallIndexProvider()); - builder.UseCollectableContextRepository(); - builder.Modules.Add(new CancellationRepository()); - - builder.Build(); - - var frontendBridge = builder.GetModule()!; - await frontendBridge.Connect(); - // _ = builder.GetModule()!.StartExtraction(); - // _ = builder.GetModule().Start(serverEndPoint); - var context = builder.GetModule(); - - var factory = - context.GetSingletonObject( - builder.GetModule()); - - int count = 0; - int a; - do + try { - a = await factory.Next(2); - count++; - } while (!token.IsCancellationRequested); + Console.WriteLine($"{id} started"); + var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings { DisableDefaults = true }); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(provider => + { + var repo = new InstanceRepository(provider.GetService()); + repo.FillSingletons(typeof(Program).Assembly); + return repo; + }); - Console.WriteLine(a); - return count; + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + var serverEndPoint = new IPEndPoint(IPAddress.Loopback, 4567); + builder.Services.AddSingleton(); + builder.Services.AddOptions(); + builder.Services.Configure(options => options.Endpoint = serverEndPoint); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + builder.Services.AddSingleton(p => + { + var methodRepo = new CollectableMethodRepository(); + methodRepo.AppendInvokers(new GeneratedInvokersCollection()); + return methodRepo; + }); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + var app = builder.Build(); + + var frontendBridge = app.Services.GetService()!; + await frontendBridge.Connect(); + _ = app.Services.GetService()!.StartExtraction(); + _ = app.Services.GetService().Start(serverEndPoint); + var context = app.Services.GetService(); + + + var factory = + context.GetSingletonObject( + app.Services.GetService()); + + bool needStop = false; + token.Register(() => + { + Console.WriteLine($"Stopping {id}"); + needStop = true; + }); + + int count = 0; + while (true){ + if (token.IsCancellationRequested) + { + break; + } + await factory.Next(2); + count++; + } + + Console.WriteLine(id); + return count; + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } } \ No newline at end of file diff --git a/mROA.Test/FunctionalityTest.cs b/mROA.Test/FunctionalityTest.cs new file mode 100644 index 0000000..a8d0e4d --- /dev/null +++ b/mROA.Test/FunctionalityTest.cs @@ -0,0 +1,7 @@ +namespace mROA.Test; + +[TestFixture] +public class FunctionalityTest +{ + +} \ No newline at end of file diff --git a/mROA.sln b/mROA.sln index da86d99..b6d9335 100644 --- a/mROA.sln +++ b/mROA.sln @@ -27,6 +27,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.CodegenTools", "mROA.C EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Load", "Example.Load\Example.Load.csproj", "{930B236B-BDAA-4B8C-8054-5B992BAE6622}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Functionality.Shared", "Functionality.Shared\Functionality.Shared.csproj", "{D9D28596-E10C-4A98-A2AA-573219467506}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{8C20901F-B416-4ABC-8AA4-9059646B081B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +77,10 @@ Global {930B236B-BDAA-4B8C-8054-5B992BAE6622}.Debug|Any CPU.Build.0 = Debug|Any CPU {930B236B-BDAA-4B8C-8054-5B992BAE6622}.Release|Any CPU.ActiveCfg = Release|Any CPU {930B236B-BDAA-4B8C-8054-5B992BAE6622}.Release|Any CPU.Build.0 = Release|Any CPU + {D9D28596-E10C-4A98-A2AA-573219467506}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9D28596-E10C-4A98-A2AA-573219467506}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9D28596-E10C-4A98-A2AA-573219467506}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9D28596-E10C-4A98-A2AA-573219467506}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -83,5 +91,7 @@ Global {9BD25A13-3165-47C0-9EAA-5C59EC490E32} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} {930B236B-BDAA-4B8C-8054-5B992BAE6622} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} + {8C20901F-B416-4ABC-8AA4-9059646B081B} = {EAE92F5A-664C-41AB-8811-5885524B5347} + {D9D28596-E10C-4A98-A2AA-573219467506} = {8C20901F-B416-4ABC-8AA4-9059646B081B} EndGlobalSection EndGlobal