コード例 #1
0
        private RawMessage RawMessageFor(Id id, Name name, ApplicationMessage message)
        {
            var messageBuffer = new MemoryStream(4096);
            var says          = ApplicationSays.From(id, name, message.ToPayload());

            MessageConverters.MessageToBytes(says, messageBuffer);
            return(Converters.ToRawMessage(Id.Of(1).Value, messageBuffer));
        }
コード例 #2
0
        private void Leader()
        {
            _buffer.Clear();

            MessageConverters.MessageToBytes(_leader, _buffer);

            _buffer.Flip();

            PrepareRawMessage(0, _buffer.Length);
        }
コード例 #3
0
        public void Application(ApplicationSays says, IEnumerable <Node> unconfirmedNodes)
        {
            var buffer = _outbound.PooledByteBuffer();

            MessageConverters.MessageToBytes(says, buffer.AsStream());

            var message = _node.Id.Value.ToRawMessage(buffer.AsStream());

            _outbound.Broadcast(unconfirmedNodes, _outbound.BytesFrom(message, buffer));
        }
コード例 #4
0
        public ClusterSnapshotActorTest(ITestOutputHelper output) : base(output)
        {
            _intializer = new ClusterSnapshotInitializer("node1", Properties, TestWorld.DefaultLogger);

            var messageBuffer = new MemoryStream(4096);
            var pulse         = new Pulse(Id.Of(1));

            MessageConverters.MessageToBytes(pulse, messageBuffer);
            _opMessage = Id.Of(1).Value.ToRawMessage(messageBuffer);
        }
コード例 #5
0
        public void TestGenerateSplitMessage()
        {
            var split = new Split(Id.Of(1));

            MessageConverters.MessageToBytes(split, _messageBuffer);
            var raw = OperationalMessage.SPLIT + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(split, Split.From(raw));
        }
コード例 #6
0
        public void TestGenerateElectMessage()
        {
            var elect = new Elect(Id.Of(1));

            MessageConverters.MessageToBytes(elect, _messageBuffer);
            var raw = OperationalMessage.ELECT + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(elect, Elect.From(raw));
        }
コード例 #7
0
        public void TestGeneratePingMessage()
        {
            var ping = new Ping(Id.Of(1));

            MessageConverters.MessageToBytes(ping, _messageBuffer);
            var raw = OperationalMessage.PING + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(ping, Ping.From(raw));
        }
コード例 #8
0
        public void TestGeneratePulseMessage()
        {
            var pulse = new Pulse(Id.Of(1));

            MessageConverters.MessageToBytes(pulse, _messageBuffer);
            var raw = OperationalMessage.PULSE + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(pulse, Pulse.From(raw));
        }
コード例 #9
0
        public void TestGenerateLeaveMessage()
        {
            var leave = new Leave(Id.Of(1));

            MessageConverters.MessageToBytes(leave, _messageBuffer);
            var raw = OperationalMessage.LEAVE + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(leave, Leave.From(raw));
        }
コード例 #10
0
        public void Directory(IEnumerable <Node> allLiveNodes)
        {
            var dir = new Directory(_node.Id, _node.Name, allLiveNodes);

            var buffer = _outbound.PooledByteBuffer();

            MessageConverters.MessageToBytes(dir, buffer.AsStream());

            var message = _node.Id.Value.ToRawMessage(buffer.AsStream());

            _outbound.Broadcast(_outbound.BytesFrom(message, buffer));
        }
コード例 #11
0
        public void Split(Id targetNodeId, Id currentLeaderId)
        {
            var split = new Split(currentLeaderId);

            var buffer = _outbound.PooledByteBuffer();

            MessageConverters.MessageToBytes(split, buffer.AsStream());

            var message = _node.Id.Value.ToRawMessage(buffer.AsStream());

            _outbound.SendTo(_outbound.BytesFrom(message, buffer), targetNodeId);
        }
コード例 #12
0
        public void TestGenerateVoteMessage()
        {
            var vote = new Vote(Id.Of(1));

            MessageConverters.MessageToBytes(vote, _messageBuffer);
            var raw = OperationalMessage.VOTE + "\nid=1";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(vote, Vote.From(raw));
        }
コード例 #13
0
        public void TestGenerateApplicationSaidMessage()
        {
            var id      = Id.Of(1);
            var name    = new Name("node1");
            var payload = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis risus quis nulla blandit, a euismod massa egestas. Vivamus facilisis.";

            var app = ApplicationSays.From(id, name, payload);
            var raw = $"{OperationalMessage.APP}\nid=1 nm=node1 si={app.SaysId}\n{payload}";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            MessageConverters.MessageToBytes(app, _messageBuffer);
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(app, ApplicationSays.From(raw));
        }
コード例 #14
0
        public void TestPut()
        {
            var buffer = new MemoryStream(1000);
            var node1  = Node.With(Id.Of(1), Name.Of("node1"), Host.Of("localhost"), 37371, 37372);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            var message = new RawMessage(1000);

            message.Put(buffer);
            buffer.Position = 0;
            var textOfRawMessage      = message.AsTextMessage();
            var textOfConvertedBuffer = Converters.BytesToText(buffer.ToArray(), 0, (int)buffer.Length);

            Assert.Equal(textOfConvertedBuffer, textOfRawMessage);
        }
コード例 #15
0
        public void TestGenerateJoinMessge()
        {
            var join = new Join(new Node(
                                    Id.Of(1),
                                    new Name("node1"),
                                    Address.From("localhost:37371", AddressType.Op),
                                    Address.From("localhost:37372", AddressType.App)));

            MessageConverters.MessageToBytes(join, _messageBuffer);
            var raw = OperationalMessage.JOIN + "\n" + "id=1 nm=node1 op=localhost:37371 app=localhost:37372";

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(join, Join.From(raw));
        }
コード例 #16
0
        public void TestKnownSizeWithAppend()
        {
            var buffer = new MemoryStream(1000);
            var node1  = NextNodeWith(1);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            buffer.Flip();
            var messageSize = buffer.Length;
            var message     = new RawMessage(messageSize); // known size

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, messageSize));
            message.Append(buffer.ToArray(), 0, messageSize);

            Assert.Equal(node1.Id.Value, message.Header().NodeId);
            Assert.Equal(messageSize, message.Header().Length);
            Assert.Equal(join, OperationalMessage.MessageFrom(message.AsTextMessage()));
        }
コード例 #17
0
        public void TestFromBytesWithLengthAndRequiredMessageLength()
        {
            var buffer = new MemoryStream(1000);
            var node1  = NextNodeWith(1);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            buffer.Flip();
            var messageSize  = buffer.Length;
            var messageBytes = new byte[messageSize];

            Array.Copy(buffer.ToArray(), 0, messageBytes, 0, messageSize);
            var message = new RawMessage(messageBytes);

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, message.Length));

            Assert.Equal(node1.Id.Value, message.Header().NodeId);
            Assert.Equal(message.Length, message.Header().Length);
            Assert.Equal(message.Length, message.RequiredMessageLength);
            Assert.Equal(join, OperationalMessage.MessageFrom(message.AsTextMessage()));
        }
コード例 #18
0
        public void TestCopyBytesTo()
        {
            var buffer = new MemoryStream(1000);
            var node1  = NextNodeWith(1);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            buffer.Flip();
            var messageSize  = buffer.Length;
            var messageBytes = new byte[messageSize];

            Array.Copy(buffer.ToArray(), 0, messageBytes, 0, messageSize);
            var message = new RawMessage(messageBytes);

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, message.Length));

            buffer.Clear();
            message.CopyBytesTo(buffer); // copyBytesTo
            var text = buffer.ToArray().BytesToText(RawMessageHeader.Bytes, (int)message.Length);

            Assert.True(OperationalMessage.MessageFrom(text).IsJoin);
        }
コード例 #19
0
        public void TestGenerateDirectoryMessge()
        {
            var opAddresses  = new [] { "", "localhost:37371", "localhost:37373", "localhost:37375" };
            var appAddresses = new [] { "", "localhost:37372", "localhost:37374", "localhost:37376" };

            var nodeEntries = new List <Node>();

            nodeEntries.Add(new Node(
                                Id.Of(1),
                                new Name("node1"),
                                Address.From(opAddresses[1], AddressType.Op),
                                Address.From(appAddresses[1], AddressType.App)));
            nodeEntries.Add(new Node(
                                Id.Of(2),
                                new Name("node2"),
                                Address.From(opAddresses[2], AddressType.Op),
                                Address.From(appAddresses[2], AddressType.App)));
            nodeEntries.Add(new Node(
                                Id.Of(3),
                                new Name("node3"),
                                Address.From(opAddresses[3], AddressType.Op),
                                Address.From(appAddresses[3], AddressType.App)));
            var dir = new Directory(Id.Of(1), new Name("node1"), nodeEntries);

            MessageConverters.MessageToBytes(dir, _messageBuffer);
            var raw =
                OperationalMessage.DIR + "\n"
                + "id=1 nm=node1\n"
                + "id=1 nm=node1 op=" + opAddresses[1] + " app=" + appAddresses[1] + "\n"
                + "id=2 nm=node2 op=" + opAddresses[2] + " app=" + appAddresses[2] + "\n"
                + "id=3 nm=node3 op=" + opAddresses[3] + " app=" + appAddresses[3];

            _expectedBuffer.Write(Converters.TextToBytes(raw));
            Assert.Equal(_expectedBuffer.ToArray(), _messageBuffer.ToArray());

            Assert.Equal(dir, Directory.From(raw));
        }
コード例 #20
0
 private void CacheElect(MemoryStream buffer)
 {
     MessageConverters.MessageToBytes(new Elect(_node.Id), buffer);
     CacheMessagePair(buffer, OperationalMessage.ELECT);
 }
コード例 #21
0
 private void CacheLeader(MemoryStream buffer)
 {
     MessageConverters.MessageToBytes(new Leader(_node.Id), buffer);
     CacheMessagePair(buffer, OperationalMessage.LEADER);
 }
コード例 #22
0
 private void CachePing(MemoryStream buffer)
 {
     MessageConverters.MessageToBytes(new Ping(_node.Id), buffer);
     CacheMessagePair(buffer, OperationalMessage.PING);
 }
コード例 #23
0
 private void CacheVote(MemoryStream buffer)
 {
     MessageConverters.MessageToBytes(new Vote(_node.Id), buffer);
     CacheMessagePair(buffer, OperationalMessage.VOTE);
 }
コード例 #24
0
 private void CacheJoin(MemoryStream buffer)
 {
     MessageConverters.MessageToBytes(new Join(_node), buffer);
     CacheMessagePair(buffer, OperationalMessage.JOIN);
 }