public void Constructor_WithNonNullReceiver_ShouldSuccess()
        {
            var receiver = BitcoinAddress.Create("TQmbucVmyc8YWrxA8YcirCdJwcFLYK9PPH", ZcoinNetworks.Instance.Regtest);
            var tx       = new FakeExodusTransaction(null, receiver);

            Assert.Same(receiver, tx.Receiver);
        }
Пример #2
0
        public void Encode_WithUnsupportedTransaction_ShouldThrow(int id)
        {
            var tx = new FakeExodusTransaction(null, null, id, 0);

            Assert.Throws <ArgumentException>(
                "transaction",
                () => this.subject.Encode(tx)
                );
        }
Пример #3
0
        public void Encode_WithValidArguments_ShouldSuccess()
        {
            var tx = new FakeExodusTransaction(TestAddress.Regtest1, TestAddress.Regtest2);

            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
                {
                    // Act.
                    this.subject.InvokeEncode(writer, tx);

                    // Assert.
                    this.subject.FakeEncode.Received(1)(writer, tx);
                }
        }
Пример #4
0
        public void Encode_WithValidData_ShouldSuccess(int version, int id, params byte[] payload)
        {
            // Arrange.
            ExodusTransaction tx = new FakeExodusTransaction(null, null, id, version);

            byte[] expected;
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream, Encoding.UTF8))
                {
                    writer.Write(IPAddress.HostToNetworkOrder((short)version));
                    writer.Write(IPAddress.HostToNetworkOrder((short)id));
                    writer.Write(payload);

                    expected = stream.ToArray();
                }

            ITransactionPayloadEncoder encoder;

            switch (id)
            {
            case 0:
                encoder = this.encoder0;
                break;

            case 1:
                encoder = this.encoder1;
                break;

            default:
                throw new InvalidOperationException("Type is not supported.");
            }

            encoder.When(e => e.Encode(Arg.Any <BinaryWriter>(), tx))
            .Do(info =>
            {
                var writer = info.ArgAt <BinaryWriter>(0);
                writer.Write(payload);
            });

            // Act.
            var result = this.subject.Encode(tx);

            // Assert.
            encoder.Received(1).Encode(Arg.Any <BinaryWriter>(), tx);
            Assert.Equal(expected, result);
        }
Пример #5
0
        public void Encode_WithNullArguments_ShouldThrow()
        {
            var tx = new FakeExodusTransaction(TestAddress.Regtest1, TestAddress.Regtest2);

            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
                {
                    Assert.Throws <ArgumentNullException>(
                        "writer",
                        () => this.subject.InvokeEncode(null, tx)
                        );

                    Assert.Throws <ArgumentNullException>(
                        "transaction",
                        () => this.subject.InvokeEncode(writer, null)
                        );
                }
        }
        public void Decode_WithValidTransactionType_ShouldInvokePayloadDecode()
        {
            // Arrange.
            ExodusTransaction tx = new FakeExodusTransaction(null, null);

            byte[] data;

            using (var stream = RawTransaction.Create(1, ExodusTransaction.MaxVersion))
            {
                data = stream.ToArray();
            }

            this.encoder1.Decode(
                Arg.Any <BitcoinAddress>(),
                Arg.Any <BitcoinAddress>(),
                Arg.Any <BinaryReader>(),
                Arg.Any <int>()
                ).Returns(tx);

            // Act.
            var result = this.subject.Decode(TestAddress.Regtest1, TestAddress.Regtest2, data);

            // Assert.
            Assert.Same(tx, result);

            this.encoder0.Received(0).Decode(
                Arg.Any <BitcoinAddress>(),
                Arg.Any <BitcoinAddress>(),
                Arg.Any <BinaryReader>(),
                Arg.Any <int>()
                );

            this.encoder1.Received(1).Decode(
                TestAddress.Regtest1,
                TestAddress.Regtest2,
                Arg.Is <BinaryReader>(r => r != null),
                ExodusTransaction.MaxVersion
                );
        }
        public void Constructor_WithNullSender_ShouldSuccess()
        {
            var tx = new FakeExodusTransaction(null, null);

            Assert.Null(tx.Sender);
        }