Skip to content

Commit 393bfff

Browse files
committed
Create benchmarks (#3)
1 parent 5a7dde6 commit 393bfff

File tree

5 files changed

+140
-3
lines changed

5 files changed

+140
-3
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp2.0</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="BenchmarkDotNet" Version="0.10.12" />
10+
</ItemGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="..\Lib.Net.Http.WebPush\Lib.Net.Http.WebPush.csproj" />
14+
</ItemGroup>
15+
16+
</Project>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using BenchmarkDotNet.Reports;
2+
using BenchmarkDotNet.Running;
3+
using System;
4+
5+
namespace Benchmark.Net.Http.WebPush
6+
{
7+
class Program
8+
{
9+
static void Main(string[] args)
10+
{
11+
Summary webPushBenchmarksSummary = BenchmarkRunner.Run<WebPushBenchmarks>();
12+
13+
Console.ReadKey();
14+
}
15+
}
16+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using System;
2+
using System.Net;
3+
using System.Net.Http;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using System.Collections.Generic;
7+
using BenchmarkDotNet.Attributes;
8+
using Lib.Net.Http.WebPush;
9+
using Lib.Net.Http.WebPush.Authentication;
10+
using static Lib.Net.Http.WebPush.Authentication.VapidAuthentication;
11+
12+
namespace Benchmark.Net.Http.WebPush
13+
{
14+
[MemoryDiagnoser]
15+
public class WebPushBenchmarks
16+
{
17+
#region Classes
18+
private class RequestPushMessageDeliveryVapidTokenCache : IVapidTokenCache
19+
{
20+
public string Get(string audience)
21+
{
22+
return "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbSIsImV4cCI6MTUxODMzMzkyNCwic3ViIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NjU1MDYvIn0.RP8t19y_3c6ncoE7iHOukEEKxIb8nBHdOaeY8xzLoMw62-GlWR5C1Rp8iG2rex9_pk_1LR4MJSAkMpDbhnZo5w";
23+
}
24+
25+
public void Put(string audience, DateTimeOffset expiration, string token)
26+
{ }
27+
}
28+
29+
private class RequestPushMessageDeliveryHttpMessageHandler : HttpMessageHandler
30+
{
31+
Task<HttpResponseMessage> _createdResponseMessageTask = Task.FromResult(new HttpResponseMessage(HttpStatusCode.Created));
32+
33+
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
34+
{
35+
return _createdResponseMessageTask;
36+
}
37+
}
38+
#endregion
39+
40+
#region Fields
41+
private readonly PushMessage _message = new PushMessage("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet dolor tristique, tempus mi ultrices, vulputate erat. Nulla viverra mauris et ante pharetra accumsan. Praesent venenatis nibh vel aliquam pharetra. Suspendisse massa justo, mollis vitae venenatis eu, mattis sit amet ipsum. Etiam dolor lacus, vulputate id congue eu, mattis vel orci. Curabitur dignissim posuere vehicula. Quisque tristique tellus ligula, sit amet tincidunt sapien dignissim ut. Quisque pulvinar justo non turpis vehicula, hendrerit semper mi gravida. In vitae massa et erat commodo dignissim at id massa. Etiam non fringilla dolor, eu sagittis elit. Vestibulum finibus molestie viverra. Duis urna libero, pulvinar et mollis sed, volutpat sed orci. Sed dapibus vitae urna a volutpat. Phasellus ultricies eget quam commodo sagittis. Nunc sollicitudin ullamcorper faucibus. Vestibulum tempus molestie justo, at tristique urna finibus vel. Nam vitae eros gravida, tincidunt lorem quis, lacinia dui. Aliquam pretium metus nec risus scelerisque, eget auctor quam maximus. Vestibulum tempor metus egestas, maximus felis id, cursus diam. Sed non libero quis nibh scelerisque pellentesque vel nec nunc. Aliquam luctus ornare justo, at fermentum orci scelerisque at. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam tempus finibus sem ac egestas. Fusce vitae justo ligula. Integer vel felis maximus odio commodo auctor eu quis nisl. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse finibus mauris mattis luctus luctus. Integer imperdiet turpis vitae elit interdum sagittis. Aenean semper at sapien sit amet porttitor. Proin vel lacus vestibulum, consectetur urna sed, ultricies eros. Integer feugiat enim quis posuere ultricies. Quisque ac mattis diam. Nulla non blandit neque. Vivamus non elementum leo, eget vestibulum odio. Curabitur dignissim justo urna, quis imperdiet metus porttitor a. Nunc porta justo erat, vel malesuada mauris consectetur sed. Etiam fermentum dapibus mi, a ultrices ex euismod ut. Vivamus fringilla, sem ac pulvinar auctor, arcu mauris viverra erat, nec tempor orci nunc nec ipsum. Donec hendrerit eros aliquam finibus efficitur. Aliquam id sem eu urna volutpat consequat. Integer varius tellus eget sem cursus laoreet. Suspendisse potenti. Duis a dolor eros. Proin aliquet nisl dui, at faucibus odio porttitor a. Ut at fermentum purus, vel tincidunt massa. Aliquam ornare ornare augue ut ullamcorper. In cursus auctor purus, sodales suscipit enim sagittis vel. Etiam nec semper magna. Vivamus a mi congue, efficitur nisl vitae, sagittis urna. Vivamus ut ex a enim commodo feugiat. Nam dictum egestas neque eget tristique. Nam interdum mi non ornare rhoncus. Nam mi arcu, placerat sollicitudin ligula eu, efficitur hendrerit elit. Aliquam suscipit lacinia ante ac suscipit. Aliquam malesuada dolor at lorem mattis, ut feugiat mauris semper. Nulla tortor leo, porttitor eu ipsum vel, lobortis bibendum tortor. Quisque semper quam at cursus laoreet. Fusce in facilisis orci. Vivamus dapibus ac arcu ut condimentum. Morbi mollis a turpis nec sollicitudin. Aliquam fringilla massa elit, a mollis velit rhoncus eget. Aliquam erat volutpat. Vestibulum ante mauris, aliquet non purus ac, ornare pretium neque. Maecenas nec tortor justo. Curabitur ullamcorper placerat mauris vel scelerisque. Quisque maximus nunc sit amet aliquam pulvinar. Maecenas ullamcorper dictum efficitur. Proin auctor, sapien nec efficitur semper, dolor purus faucibus ipsum, fringilla consequat ipsum magna quis dui. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam erat volutpat. Suspendisse potenti. Maecenas orci odio, interdum ut lacus ac, sagittis molestie turpis. Donec pretium diam quis ex aliquam, quis rutrum ipsum egestas. Maecenas eu leo finibus, tincidunt leo sed, accumsan tellus. Sed aliquam placerat lectus, at tempor massa volutpat id. Integer a viverra ipsum. Etiam eu gravida risus. Maecenas turpis, porta vitae dignissim a, facilisis ac tortor. Nulla nec sed.");
42+
private readonly PushSubscription _subscription = new PushSubscription
43+
{
44+
Endpoint = "https://fcm.googleapis.com/fcm/send/fvi1URmMPCw:APA91bGqK_mH7LfRzY1wKeTj_kpealAK_HhRKpTNPSQ7dW8TQjR4qK4a7BcZcMRIHU9A6cH6iimqP7zyirmxjKd4vOKwos_itEI78bVF0LqCn5Xv99QkMxW_YZR7d2j993LapxJvzZ_V",
45+
Keys = new Dictionary<string, string>
46+
{
47+
{ "p256dh", "BP7M3CU6iBsNCJZAYk2akn2j236QjtxXZ6hMZP9H6XKTHFmjG1Al-fVW49Dz8Zlr_Qtqz30fv3yNrRelpj8Gvtg=" },
48+
{ "auth", "YE41bJSLtSq-hraJ17ryyA==" }
49+
}
50+
};
51+
52+
private VapidAuthentication _vapidAuthentication = new VapidAuthentication("BK5sn4jfa0Jqo9MhV01oyzK2FaEHm0KqkSCuUkKr53-9cr-vBE1a9TiiBaWy7hy0eOUF1jhZnwcd3vof4wnwSw0", "AJ2ho7or-6D4StPktpTO3l1ErjHGyxb0jzt9Y8lj67g")
53+
{
54+
Subject = "https://localhost:65506/"
55+
};
56+
57+
private PushServiceClient _pushClient = new PushServiceClient(new HttpClient(new RequestPushMessageDeliveryHttpMessageHandler()))
58+
{
59+
DefaultAuthentication = new VapidAuthentication("BK5sn4jfa0Jqo9MhV01oyzK2FaEHm0KqkSCuUkKr53-9cr-vBE1a9TiiBaWy7hy0eOUF1jhZnwcd3vof4wnwSw0", "AJ2ho7or-6D4StPktpTO3l1ErjHGyxb0jzt9Y8lj67g")
60+
{
61+
Subject = "https://localhost:65506/",
62+
TokenCache = new RequestPushMessageDeliveryVapidTokenCache()
63+
}
64+
};
65+
#endregion
66+
67+
#region Benchmarks
68+
[Benchmark]
69+
public WebPushSchemeHeadersValues VapidAuthentication_GetVapidSchemeAuthenticationHeaderValueParameter()
70+
{
71+
return _vapidAuthentication.GetWebPushSchemeHeadersValues("https://fcm.googleapis.com");
72+
}
73+
74+
[Benchmark]
75+
public Task PushServiceClient_RequestPushMessageDeliveryAsync()
76+
{
77+
return _pushClient.RequestPushMessageDeliveryAsync(_subscription, _message);
78+
}
79+
#endregion
80+
}
81+
}

Lib.Net.Http.WebPush.sln

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
4-
VisualStudioVersion = 15.0.27130.2010
4+
VisualStudioVersion = 15.0.27130.2027
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib.Net.Http.WebPush", "Lib.Net.Http.WebPush\Lib.Net.Http.WebPush.csproj", "{79FDCAAA-6129-4FBB-B94E-7F7BE9A07C7C}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocFx.Net.Http.WebPush", "DocFx.Net.Http.WebPush\DocFx.Net.Http.WebPush.csproj", "{91C4FA65-7104-494C-9ED8-4B886BC2F7CD}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DocFx.Net.Http.WebPush", "DocFx.Net.Http.WebPush\DocFx.Net.Http.WebPush.csproj", "{91C4FA65-7104-494C-9ED8-4B886BC2F7CD}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmark.Net.Http.WebPush", "Benchmark.Net.Http.WebPush\Benchmark.Net.Http.WebPush.csproj", "{0100508D-6C06-443B-9893-91F2F15DC920}"
911
EndProject
1012
Global
1113
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -21,6 +23,10 @@ Global
2123
{91C4FA65-7104-494C-9ED8-4B886BC2F7CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
2224
{91C4FA65-7104-494C-9ED8-4B886BC2F7CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
2325
{91C4FA65-7104-494C-9ED8-4B886BC2F7CD}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{0100508D-6C06-443B-9893-91F2F15DC920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{0100508D-6C06-443B-9893-91F2F15DC920}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{0100508D-6C06-443B-9893-91F2F15DC920}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{0100508D-6C06-443B-9893-91F2F15DC920}.Release|Any CPU.Build.0 = Release|Any CPU
2430
EndGlobalSection
2531
GlobalSection(SolutionProperties) = preSolution
2632
HideSolutionNode = FALSE

Lib.Net.Http.WebPush/PushServiceClient.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class PushServiceClient
5151

5252
private int _defaultTimeToLive = DEFAULT_TIME_TO_LIVE;
5353

54-
private readonly HttpClient _httpClient = new HttpClient();
54+
private readonly HttpClient _httpClient;
5555
#endregion
5656

5757
#region Properties
@@ -84,6 +84,24 @@ public int DefaultTimeToLive
8484
public VapidAuthenticationScheme DefaultAuthenticationScheme { get; set; } = VapidAuthenticationScheme.WebPush;
8585
#endregion
8686

87+
#region Constructors
88+
/// <summary>
89+
/// Creates new instance of <see cref="PushServiceClient"/> class.
90+
/// </summary>
91+
public PushServiceClient()
92+
: this(new HttpClient())
93+
{ }
94+
95+
/// <summary>
96+
/// Creates new instance of <see cref="PushServiceClient"/> class.
97+
/// </summary>
98+
/// <param name="httpClient">The HttpClient instance.</param>
99+
public PushServiceClient(HttpClient httpClient)
100+
{
101+
_httpClient = httpClient;
102+
}
103+
#endregion
104+
87105
#region Methods
88106
/// <summary>
89107
/// Requests delivery of push message by push service as an asynchronous operation.

0 commit comments

Comments
 (0)