public void Constructor_WithNonNullReceiver_ShouldSuccess() { var receiver = BitcoinAddress.Create("TQmbucVmyc8YWrxA8YcirCdJwcFLYK9PPH", ZcoinNetworks.Instance.Regtest); var tx = new FakeExodusTransaction(null, receiver); Assert.Same(receiver, tx.Receiver); }
public void Encode_WithUnsupportedTransaction_ShouldThrow(int id) { var tx = new FakeExodusTransaction(null, null, id, 0); Assert.Throws <ArgumentException>( "transaction", () => this.subject.Encode(tx) ); }
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); } }
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); }
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); }