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));
        }
示例#3
0
        public void Constructor_WithNonNullReceiver_ShouldSuccess()
        {
            var receiver = TestAddress.Regtest1;
            var tx       = new FakeTransaction(null, receiver);

            Assert.Same(receiver, tx.Receiver);
        }
示例#4
0
        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());
        }
示例#6
0
        public void Constructor_WithNullSender_ShouldSuccess()
        {
            var tx = new FakeTransaction(null, null);

            Assert.Null(tx.Sender);
        }