Переглянути джерело

Update GenHTTP to 5.1 and change tests to be async (#6208)

* Update GenHTTP to 5.1 and change tests to be asnyc

* Switch to GenHTTP 5.1.1 and optimize DB related tests
Andreas Nägeli 4 роки тому
батько
коміт
2c3af6047c

+ 5 - 5
frameworks/CSharp/genhttp/Benchmarks/Benchmarks.csproj

@@ -26,11 +26,11 @@
   </ItemGroup>
     
   <ItemGroup>
-    <PackageReference Include="GenHTTP.Core" Version="5.0.0" />
-    <PackageReference Include="GenHTTP.Modules.Razor" Version="5.0.0" />
-    <PackageReference Include="GenHTTP.Modules.Webservices" Version="5.0.0" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.0" />
-    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.0" />
+    <PackageReference Include="GenHTTP.Core" Version="5.1.1" />
+    <PackageReference Include="GenHTTP.Modules.Razor" Version="5.1.0" />
+    <PackageReference Include="GenHTTP.Modules.Webservices" Version="5.1.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.1" />
+    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.1" />
   </ItemGroup>
   
 </Project>

+ 1 - 1
frameworks/CSharp/genhttp/Benchmarks/Model/DatabaseContext.cs

@@ -24,7 +24,7 @@ namespace Benchmarks.Model
         private static DbContextOptions<DatabaseContext> GetOptions(bool tracking)
         {
             var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
-            
+
             optionsBuilder.UseNpgsql("Server=tfb-database;Database=hello_world;User Id=benchmarkdbuser;Password=benchmarkdbpass;Maximum Pool Size=64;NoResetOnClose=true;Enlist=false;Max Auto Prepare=3");
 
             if (!tracking)

+ 4 - 3
frameworks/CSharp/genhttp/Benchmarks/Tests/CacheResource.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
 
 using Benchmarks.Model;
 
@@ -36,10 +37,10 @@ namespace Benchmarks.Tests
         }
 
         [ResourceMethod(":queries")]
-        public List<World> GetWorldsFromPath(string queries) => GetWorlds(queries);
+        public ValueTask<List<World>> GetWorldsFromPath(string queries) => GetWorlds(queries);
 
         [ResourceMethod]
-        public List<World> GetWorlds(string queries)
+        public async ValueTask<List<World>> GetWorlds(string queries)
         {
             var count = 1;
 
@@ -66,7 +67,7 @@ namespace Benchmarks.Tests
                 }
                 else
                 {
-                    var resolved = context.World.First(w => w.Id == id);
+                    var resolved = await context.World.FindAsync(id);
 
                     _Cache.Set(key, resolved);
 

+ 3 - 3
frameworks/CSharp/genhttp/Benchmarks/Tests/DbResource.cs

@@ -1,5 +1,5 @@
 using System;
-using System.Linq;
+using System.Threading.Tasks;
 
 using GenHTTP.Modules.Webservices;
 
@@ -13,13 +13,13 @@ namespace Benchmarks.Tests
         private static Random _Random = new Random();
 
         [ResourceMethod]
-        public World GetRandomWorld()
+        public async ValueTask<World> GetRandomWorld()
         {
             var id = _Random.Next(1, 10001);
 
             using var context = DatabaseContext.CreateNoTracking();
 
-            return context.World.First(w => w.Id == id);
+            return await context.World.FindAsync(id);
         }
 
     }

+ 10 - 2
frameworks/CSharp/genhttp/Benchmarks/Tests/FortuneHandler.cs

@@ -3,6 +3,8 @@ using System.Threading.Tasks;
 using System.Linq;
 using System.Web;
 
+using Microsoft.EntityFrameworkCore;
+
 using GenHTTP.Api.Content;
 using GenHTTP.Api.Content.Templating;
 using GenHTTP.Api.Protocol;
@@ -88,11 +90,11 @@ namespace Benchmarks.Tests
                                 .Header("Content-Type", "text/html; charset=utf-8");
         }
 
-        private FortuneModel GetFortunes(IRequest request, IHandler handler)
+        private async ValueTask<FortuneModel> GetFortunes(IRequest request, IHandler handler)
         {
             using var context = DatabaseContext.CreateNoTracking();
 
-            var fortunes = context.Fortune.ToList();
+            var fortunes = await context.Fortune.ToListAsync();
 
             fortunes.Add(new Fortune() { Message = "Additional fortune added at request time." });
 
@@ -101,6 +103,12 @@ namespace Benchmarks.Tests
             return new FortuneModel(request, handler, fortunes);
         }
 
+        public async ValueTask PrepareAsync()
+        {
+            await Page.PrepareAsync();
+            await Template.PrepareAsync();
+        }
+
         #endregion
 
     }

+ 4 - 4
frameworks/CSharp/genhttp/Benchmarks/Tests/QueryResource.cs

@@ -1,6 +1,6 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
+using System.Threading.Tasks;
 
 using Benchmarks.Model;
 
@@ -14,10 +14,10 @@ namespace Benchmarks.Tests
         private static Random _Random = new Random();
 
         [ResourceMethod(":queries")]
-        public List<World> GetWorldsFromPath(string queries) => GetWorlds(queries);
+        public ValueTask<List<World>> GetWorldsFromPath(string queries) => GetWorlds(queries);
 
         [ResourceMethod]
-        public List<World> GetWorlds(string queries)
+        public async ValueTask<List<World>> GetWorlds(string queries)
         {
             var count = 1;
 
@@ -34,7 +34,7 @@ namespace Benchmarks.Tests
             {
                 var id = _Random.Next(1, 10001);
 
-                result.Add(context.World.First(w => w.Id == id));
+                result.Add(await context.World.FindAsync(id));
             }
 
             return result;

+ 7 - 6
frameworks/CSharp/genhttp/Benchmarks/Tests/UpdateResource.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
 
 using Benchmarks.Model;
 
@@ -14,10 +15,10 @@ namespace Benchmarks.Tests
         private static Random _Random = new Random();
 
         [ResourceMethod(":queries")]
-        public List<World> UpdateWorldsFromPath(string queries) => UpdateWorlds(queries);
+        public ValueTask<List<World>> UpdateWorldsFromPath(string queries) => UpdateWorlds(queries);
 
         [ResourceMethod]
-        public List<World> UpdateWorlds(string queries)
+        public async ValueTask<List<World>> UpdateWorlds(string queries)
         {
             var count = 1;
 
@@ -30,11 +31,11 @@ namespace Benchmarks.Tests
 
             var ids = Enumerable.Range(1, 10000).Select(x => _Random.Next(1, 10001)).Distinct().Take(count).ToArray();
 
-            foreach (var id in ids)
+            using (var context = DatabaseContext.Create())
             {
-                using (var context = DatabaseContext.Create())
+                foreach (var id in ids)
                 {
-                    var record = context.World.First(w => w.Id == id);
+                    var record = await context.World.FindAsync(id);
 
                     var old = record.RandomNumber;
 
@@ -51,7 +52,7 @@ namespace Benchmarks.Tests
 
                     result.Add(record);
 
-                    context.SaveChanges();
+                    await context.SaveChangesAsync();
                 }
             }