Skip to content

Instantly share code, notes, and snippets.

@chgeuer
Created September 18, 2018 08:47
Show Gist options
  • Save chgeuer/e0fdb8a2068d218e6f78362ad0ac8e5c to your computer and use it in GitHub Desktop.
Save chgeuer/e0fdb8a2068d218e6f78362ad0ac8e5c to your computer and use it in GitHub Desktop.
namespace EricaRepro
{
using System;
using System.Text;
using System.Threading.Tasks;
public class MessageForwarder
{
public bool AlreadyForwardedHeader { get; private set; } = false;
public Func<byte[], Task> Forwader { get; private set; }
private readonly Func<string, Task> _logger;
public MessageForwarder(Func<byte[], Task> forwader, Func<string, Task> logger = null)
{
this.Forwader = forwader;
this._logger = logger;
}
private Task log(string message)
{
if (_logger == null)
{
return Task.CompletedTask;
}
return _logger(message);
}
public async Task ReceiveAsync(byte[] msg)
{
var msgSTring = Encoding.UTF8.GetString(msg);
await log($"Received {msgSTring}");
if (msgSTring.Split(',')[0].Contains("header"))
{
if (this.AlreadyForwardedHeader)
{
return;
}
else
{
this.AlreadyForwardedHeader = true;
}
}
await this.Forwader(msg);
await log($"Forwarded message {msgSTring}");
}
}
}
namespace UnitTestProject1
{
using System;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using EricaRepro;
[TestClass]
public class UnitTest1
{
[TestMethod]
public async Task TestMethod1Async()
{
byte[] msg = null;
var fw1 = new MessageForwarder(forwader: async (bytes) =>
{
await Task.Delay(0);
msg = bytes;
});
Assert.IsFalse(fw1.AlreadyForwardedHeader);
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("Hallo"));
Assert.IsFalse(fw1.AlreadyForwardedHeader);
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("header: 123"));
Assert.IsTrue(fw1.AlreadyForwardedHeader);
}
[TestMethod]
public async Task TestMethodWithLoggingAsync()
{
byte[] msg = null;
var fw1 = new MessageForwarder(
forwader: async (bytes) =>
{
await Task.Delay(0);
msg = bytes;
},
logger: Console.Out.WriteLineAsync);
Assert.IsFalse(fw1.AlreadyForwardedHeader);
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("Hallo"));
Assert.IsFalse(fw1.AlreadyForwardedHeader);
await fw1.ReceiveAsync(Encoding.UTF8.GetBytes("header: 123"));
Assert.IsTrue(fw1.AlreadyForwardedHeader);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment