Exemple #1
0
        GetGmAgentConnections()
        {
            Stream agentToGmStream = new EchoStream();
            Stream gmToAgentStream = new EchoStream();
            Stream agentSideStream = new StreamRWJoin(gmToAgentStream, agentToGmStream);
            Stream gmSideStream    = new StreamRWJoin(agentToGmStream, gmToAgentStream);
            var    agentQueueAdapter
                = new SenderReceiverQueueAdapter(
                      new StreamMessageSenderReceiver(
                          agentSideStream,
                          new Parser()));
            var gmQueueAdapter
                = new SenderReceiverQueueAdapter(
                      new StreamMessageSenderReceiver(
                          gmSideStream,
                          new Parser()));

            return(agentQueueAdapter, gmQueueAdapter);
        }
        public void TestCallbackCalledOnParseError()
        {
            Exception receivedException = null;
            Stream    agentToGmStream   = new EchoStream();
            Stream    gmToAgentStream   = new EchoStream();
            Stream    agentSideStream   = new StreamRWJoin(gmToAgentStream, agentToGmStream);
            Stream    gmSideStream      = new StreamRWJoin(agentToGmStream, gmToAgentStream);

            StreamMessageSenderReceiver agentSenderReceiver
                = new StreamMessageSenderReceiver(agentSideStream, new Parser());
            Semaphore semaphore = new Semaphore(0, 100);

            agentSenderReceiver.StartReceiving(message => { }, e =>
                                               { receivedException = e; semaphore.Release(); });

            string messageText = System.Text.Json.JsonSerializer.Serialize(new { a = "abc" });

            byte[] messageBytes       = Encoding.UTF8.GetBytes(messageText);
            byte[] messageLengthBytes = BitConverter.GetBytes((ushort)messageBytes.Length);
            if (!BitConverter.IsLittleEndian)
            {
                Array.Reverse(messageLengthBytes);
            }

            //when
            gmSideStream.Write(messageLengthBytes, 0, 2);
            gmSideStream.Write(messageBytes, 0, messageBytes.Length);
            semaphore.WaitOne();

            //then
            Assert.IsNotNull(receivedException);
            Assert.IsInstanceOfType(receivedException, typeof(CommunicationLibrary.Exceptions.ParsingException));

            //after
            agentSenderReceiver.Dispose();
            gmSideStream.Close();
            semaphore.Dispose();
        }