public void Serialize_WithSupportedTransaction_ShouldInvokePayloadSerializer( int version, int id, params byte[] expected) { // Arrange. var tx = new FakeTransaction(null, null, id, version); var serializer = new FakeTransactionPayloadSerializer(tx.Id); var subject = new TransactionSerializer(new[] { serializer }); var writer = new ArrayBufferWriter <byte>(); serializer.StubbedSerialize .Setup(f => f(It.IsAny <IBufferWriter <byte> >(), It.IsAny <Elysium.Transaction>())) .Callback((IBufferWriter <byte> writer, Elysium.Transaction tx) => { writer.Write(new ReadOnlySpan <byte>(expected, 4, expected.Length - 4)); }); // Act. subject.Serialize(writer, tx); // Assert. Assert.Equal(expected, writer.WrittenSpan.ToArray()); serializer.StubbedSerialize.Verify(f => f(writer, tx), Times.Once()); }
public void Serialize_WithUnsupportedTransaction_ShouldThrow(int id) { var tx = new FakeTransaction(null, null, id, 0); var writer = new ArrayBufferWriter <byte>(); Assert.Throws <ArgumentException>("transaction", () => this.subject.Serialize(writer, tx)); }
public void Constructor_WithNonNullReceiver_ShouldSuccess() { var receiver = TestAddress.Regtest1; var tx = new FakeTransaction(null, receiver); Assert.Same(receiver, tx.Receiver); }
public void Constructor_WithNonNullSender_ShouldSuccess() { var sender = TestAddress.Regtest1; var tx = new FakeTransaction(sender, null); Assert.Same(sender, tx.Sender); }
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 Constructor_WithNullSender_ShouldSuccess() { var tx = new FakeTransaction(null, null); Assert.Null(tx.Sender); }