public void GroupTest() { var metadata = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes("metadata")); var tags = new SortedDictionary <string, string> { { "destination", "destination" } }; var input = new Frames.Group("group", metadata, tags); var pipe = new Pipe(); input.Write(pipe.Writer); pipe.Writer.FlushAsync().GetAwaiter().GetResult(); var read = pipe.Reader.ReadAsync().GetAwaiter().GetResult(); var reader = new SequenceReader <byte>(read.Buffer); var header = new Frames.Header(ref reader); Assert.AreEqual(header.Type, Frames.Types.Group); var output = new Frames.Group(header, ref reader); Assert.AreEqual(input.group, output.group); Assert.IsTrue(input.metadata.ToArray().SequenceEqual(output.metadata.ToArray())); Assert.IsTrue(input.tags.SequenceEqual(output.tags)); }
public void DestinationSetupTest() { var accessToken = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes("access token")); var connectiondId = Guid.NewGuid(); short additionalFlags = 0b00000000_00000001; var tags = new SortedDictionary <string, string> { { "destination", "destination" } }; var input = new Frames.DestinationSetup(IPAddress.Loopback, "group", long.MaxValue, accessToken, connectiondId, additionalFlags, tags); var pipe = new Pipe(); input.Write(pipe.Writer); pipe.Writer.FlushAsync().GetAwaiter().GetResult(); var read = pipe.Reader.ReadAsync().GetAwaiter().GetResult(); var reader = new SequenceReader <byte>(read.Buffer); var header = new Frames.Header(ref reader); Assert.AreEqual(header.Type, Frames.Types.Destination_Setup); var output = new Frames.DestinationSetup(header, ref reader); Assert.AreEqual(input.ipAddress, output.ipAddress); Assert.AreEqual(input.group, output.group); Assert.AreEqual(input.accessKey, output.accessKey); Assert.IsTrue(input.accessToken.ToArray().SequenceEqual(output.accessToken.ToArray())); Assert.AreEqual(input.connectionId, output.connectionId); Assert.AreEqual(input.additionalFlags, output.additionalFlags); Assert.IsTrue(input.tags.SequenceEqual(output.tags)); }
public static ReadOnlySequence <byte> UnwrapMetadata(SequenceReader <byte> frame) { var header = new Frames.Header(ref frame); switch (header.Type) { case Frames.Types.Group: return(new Frames.Group(in header, ref frame).metadata); case Frames.Types.Broadcast: return(new Frames.Broadcast(in header, ref frame).metadata); case Frames.Types.Shard: return(new Frames.Shard(in header, ref frame).metadata); default: throw new ArgumentException("unknown frame type " + header.Type); } }
public void BrokerSetupTest() { var accessToken = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes("access token")); var input = new Frames.BrokerSetup("brokerId", "clusterId", long.MaxValue, accessToken); var pipe = new Pipe(); input.Write(pipe.Writer); pipe.Writer.FlushAsync().GetAwaiter().GetResult(); var read = pipe.Reader.ReadAsync().GetAwaiter().GetResult(); var reader = new SequenceReader <byte>(read.Buffer); var header = new Frames.Header(ref reader); Assert.AreEqual(header.Type, Frames.Types.Broker_Setup); var output = new Frames.BrokerSetup(header, ref reader); Assert.AreEqual(input.brokerId, output.brokerId); Assert.AreEqual(input.clusterId, output.clusterId); Assert.AreEqual(input.accessKey, output.accessKey); Assert.IsTrue(input.accessToken.ToArray().SequenceEqual(output.accessToken.ToArray())); }