Files
WireMock.Net/test/WireMock.Net.Tests/Matchers/ProtoBufMatcherTests.cs
Stef Heyenrath 6ac95cf57d Add Grpc ProtoBuf support (request-response) (#1047)
* ProtoBuf

* .

* x

* ---

* x

* fx

* ...

* sc

* ...

* .

* groen

* x

* fix tests

* ok!?

* fix tests

* fix tests

* !

* x

* 6

* .

* x

* ivaluematcher

* transformer

* .

* sc

* .

* mapping

* x

* tra

* com

* ...

* .

* .

* .

* AddProtoDefinition

* .

* set

* grpahj

* .

* .

* IdOrText

* ...

* async

* async2

* .

* t

* nuget

* <PackageReference Include="ProtoBufJsonConverter" Version="0.2.0-preview-04" />

* http version

* tests

* .WithHttpVersion("2")

* <PackageReference Include="ProtoBufJsonConverter" Version="0.2.0" />

* HttpVersionParser
2024-02-16 17:16:51 +01:00

108 lines
2.9 KiB
C#

#if PROTOBUF
using System;
using System.Threading.Tasks;
using FluentAssertions;
using ProtoBuf;
using WireMock.Matchers;
using WireMock.Models;
using Xunit;
namespace WireMock.Net.Tests.Matchers;
public class ProtoBufMatcherTests
{
private const string MessageType = "greet.HelloRequest";
private readonly IdOrText _protoDefinition = new(null, @"
syntax = ""proto3"";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
");
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_DecodeAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => _protoDefinition, MessageType);
var result = await matcher.DecodeAsync(bytes).ConfigureAwait(false);
// Assert
result.Should().BeEquivalentTo(new { name = "stef" });
}
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_NoJsonMatchers_IsMatchAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => _protoDefinition, MessageType);
var result = await matcher.IsMatchAsync(bytes).ConfigureAwait(false);
// Assert
result.Score.Should().Be(MatchScores.Perfect);
result.Exception.Should().BeNull();
}
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_Using_JsonMatcher_IsMatchAsync()
{
// Arrange
var jsonMatcher = new JsonMatcher(new { name = "stef" });
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => _protoDefinition, MessageType, matcher: jsonMatcher);
var result = await matcher.IsMatchAsync(bytes);
// Assert
result.Score.Should().Be(MatchScores.Perfect);
result.Exception.Should().BeNull();
}
[Fact]
public async Task ProtoBufMatcher_For_InvalidProtoBuf_IsNoMatch()
{
// Arrange
var bytes = new byte[] { 1, 2, 3 };
// Act
var matcher = new ProtoBufMatcher(() => _protoDefinition, MessageType);
var result = await matcher.IsMatchAsync(bytes);
// Assert
result.Score.Should().Be(MatchScores.Mismatch);
result.Exception.Should().BeOfType<ProtoException>();
}
[Fact]
public async Task ProtoBufMatcher_For_InvalidMethod_IsNoMatchAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => _protoDefinition, "greet.Greeter.X");
var result = await matcher.IsMatchAsync(bytes);
// Assert
result.Score.Should().Be(MatchScores.Mismatch);
result.Exception.Should().BeOfType<ArgumentException>();
}
}
#endif