public void Deserialize_WithUpsupportedTransaction_ShouldThrow() { // Arrange. var writer = SerializationTesting.CreateWriter(2, 0); // Act. var ex = Assert.Throws <TransactionSerializationException>( () => { var reader = SerializationTesting.CreateReader(writer); this.subject.Deserialize(null, null, ref reader); }); // Assert. Assert.Equal("Unknow transaction.", ex.Message); }
public void Deserialize_WithSupportedTransaction_ShouldInvokePayloadSerializer(int id, params byte[] payload) { // Arrange. var tx = new FakeTransaction( TestAddress.Regtest1, TestAddress.Regtest2, id, Elysium.Transaction.MaxVersion); var writer = SerializationTesting.CreateWriter(tx.Id, tx.Version); var(selected, other) = tx.Id switch { 0 => (this.payload1, this.payload2), 1 => (this.payload2, this.payload1), _ => throw new NotImplementedException() }; writer.Write(payload); selected.StubbedDeserialize .Setup(f => f(tx.Sender, tx.Receiver, payload, tx.Version)) .Returns(tx); // Act. var reader = SerializationTesting.CreateReader(writer); var result = this.subject.Deserialize(tx.Sender, tx.Receiver, ref reader); // Assert. Assert.Same(tx, result); Assert.Equal(0, reader.Remaining); selected.StubbedDeserialize.Verify( f => f(tx.Sender, tx.Receiver, payload, tx.Version), Times.Once()); other.StubbedDeserialize.Verify( f => f(It.IsAny <BitcoinAddress?>(), It.IsAny <BitcoinAddress?>(), It.IsAny <byte[]>(), It.IsAny <int>()), Times.Never()); }
public void Deserialize_WithUnsupportedVersion_ShouldThrow() { // Arrange. var writer = SerializationTesting.CreateWriter(0, 1); this.payload1.StubbedDeserialize .Setup(f => f(It.IsAny <BitcoinAddress?>(), It.IsAny <BitcoinAddress?>(), It.IsAny <byte[]>(), 1)) .Throws(new ArgumentOutOfRangeException("version")); // Act. var ex = Assert.Throws <TransactionSerializationException>( () => { var reader = SerializationTesting.CreateReader(writer); this.subject.Deserialize(null, null, ref reader); }); // Assert. Assert.Equal("Unknow version.", ex.Message); this.payload1.StubbedDeserialize.Verify( f => f(null, null, new byte[0], 1), Times.Once()); }