aspnetcore/benchmarks/Microsoft.AspNetCore.Signal.../NegotiateProtocolBenchmark.cs

91 lines
3.3 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Internal;
namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
{
public class NegotiateProtocolBenchmark
{
private NegotiationResponse _negotiateResponse;
private Stream _stream;
private byte[] _responseData1;
private byte[] _responseData2;
private byte[] _responseData3;
private byte[] _responseData4;
private byte[] _responseData5;
[GlobalSetup]
public void GlobalSetup()
{
_negotiateResponse = new NegotiationResponse
{
ConnectionId = "d100338e-8c01-4281-92c2-9a967fdeebcb",
AvailableTransports = new List<AvailableTransport>
{
new AvailableTransport
{
Transport = "WebSockets",
TransferFormats = new List<string>
{
"Text",
"Binary"
}
}
}
};
_stream = Stream.Null;
_responseData1 = Encoding.UTF8.GetBytes("{\"connectionId\":\"123\",\"availableTransports\":[]}");
_responseData2 = Encoding.UTF8.GetBytes("{\"url\": \"http://foo.com/chat\"}");
_responseData3 = Encoding.UTF8.GetBytes("{\"url\": \"http://foo.com/chat\", \"accessToken\": \"token\"}");
_responseData4 = Encoding.UTF8.GetBytes("{\"connectionId\":\"123\",\"availableTransports\":[{\"transport\":\"test\",\"transferFormats\":[]}]}");
var writer = new MemoryBufferWriter();
NegotiateProtocol.WriteResponse(_negotiateResponse, writer);
_responseData5 = writer.ToArray();
}
[Benchmark]
public Task WriteResponse_MemoryBufferWriter()
{
var writer = new MemoryBufferWriter();
try
{
NegotiateProtocol.WriteResponse(_negotiateResponse, writer);
return writer.CopyToAsync(_stream);
}
finally
{
writer.Reset();
}
}
[Benchmark]
public void ParsingNegotiateResponseMessageSuccessForValid1()
=> NegotiateProtocol.ParseResponse(new MemoryStream(_responseData1));
[Benchmark]
public void ParsingNegotiateResponseMessageSuccessForValid2()
=> NegotiateProtocol.ParseResponse(new MemoryStream(_responseData2));
[Benchmark]
public void ParsingNegotiateResponseMessageSuccessForValid3()
=> NegotiateProtocol.ParseResponse(new MemoryStream(_responseData3));
[Benchmark]
public void ParsingNegotiateResponseMessageSuccessForValid4()
=> NegotiateProtocol.ParseResponse(new MemoryStream(_responseData4));
[Benchmark]
public void ParsingNegotiateResponseMessageSuccessForValid5()
=> NegotiateProtocol.ParseResponse(new MemoryStream(_responseData5));
}
}