//[ExpectedException(typeof(InvalidOperationException), "")]
        public void TestWriteByWrongReqeustType()
        {
            // Arrange
            var msg = new DataMessage(new byte[] { 0, 0, 0, 2 })
            {
                Address = 1,
                CmdCode = 0x20,
                MessageType = MessageType.IncomingMessage
            };

            Mock<IDataLinkPort> comPort = new Mock<IDataLinkPort>();
            comPort.Setup(p => p.IsOpen).Returns(true);
            comPort.Setup(p => p.MessagesToRead).Returns(0);

            comPort.Setup(p => p.Write(It.IsAny<IMessage>()))
                .Raises(m => m.MessageReceived += null, new EventArgs());
            comPort.Setup(p => p.Read()).Returns(msg);

            var controller = new IncotexNetworkController();
            controller.Connection = comPort.Object;
            var device = new Mercury203();
            controller.Devices.Add(device);
            controller.Start();

            var request = new DataMessage()
            {
                Address = 0x1,
                CmdCode = Convert.ToByte(Mercury203CmdCode.ReadGroupAddress)
            };
            var wrongTrans = new Transaction(null, TransactionType.Undefined, request) { Sender = device }; // Ошибка !!!
            var networkRequest = new NetworkRequest(wrongTrans);

            // Act
            try
            {
                controller.Write(networkRequest);

                while (networkRequest.Status != NetworkRequestStatus.Failed)
                {
                    // Ждём, должно быть исключение
                }
            }
            catch (Exception ex)
            {
                // Assert
                Assert.AreEqual(typeof(InvalidOperationException), ex.GetType());
            }
        }
Beispiel #2
0
        /// <summary>
        /// Возвращает объект транзакции для провторного выполения запроса
        /// </summary>
        /// <returns></returns>
        public bool NextAttempt(out Transaction transaction)
        {
            if (Status != NetworkRequestStatus.Failed)
            {
                throw new InvalidOperationException(
                    "Невозможно выполнить повтор запроса, данная операция возможно только при неудачном предыдущем запросе");
            }

            if (_transactions.Count < _totalAttempts)
            {
                _transactions.Add(new Transaction(_transactions[0].Sender,
                    _transactions[0].TransactionType, _transactions[0].Request));
                transaction = _transactions[_transactions.Count - 1];
                return true;
            }
            else
            {
                // Кол-во попыток исчерпано
                transaction = null;
                return false;
            }
        }
Beispiel #3
0
        public NetworkRequest(Transaction transaction)
        {
			_asyncRequestResult = new AsyncRequestResult(this);
            _transactions.Insert(0, transaction);
        }