From 82fb470e0e85cbad9e674854304ca0bac049072a Mon Sep 17 00:00:00 2001 From: ajlopez Date: Sat, 17 Aug 2019 10:31:20 -0300 Subject: [PATCH] Transaction equals, used in TransactionPool --- .../ajlopez/blockchain/core/Transaction.java | 19 ++++++++++++++ .../blockchain/core/TransactionTest.java | 25 +++++++++++++++++++ .../processors/TransactionPoolTest.java | 22 +++++++++++++++- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ajlopez/blockchain/core/Transaction.java b/src/main/java/com/ajlopez/blockchain/core/Transaction.java index d8ec30b4..7b38c152 100644 --- a/src/main/java/com/ajlopez/blockchain/core/Transaction.java +++ b/src/main/java/com/ajlopez/blockchain/core/Transaction.java @@ -70,4 +70,23 @@ public Hash getHash() { private Hash calculateHash() { return HashUtils.calculateHash(TransactionEncoder.encode(this)); } + + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + + if (this == obj) + return true; + + if (!(obj instanceof Transaction)) + return false; + + return this.getHash().equals(((Transaction)obj).getHash()); + } + + @Override + public int hashCode() { + return this.getHash().hashCode(); + } } diff --git a/src/test/java/com/ajlopez/blockchain/core/TransactionTest.java b/src/test/java/com/ajlopez/blockchain/core/TransactionTest.java index c391be31..9d04ac16 100644 --- a/src/test/java/com/ajlopez/blockchain/core/TransactionTest.java +++ b/src/test/java/com/ajlopez/blockchain/core/TransactionTest.java @@ -95,4 +95,29 @@ public void createTransactionWithNoReceiver() { new Transaction(sender, null, value, 42, null, 6000000, Coin.ZERO); } + + @Test + public void equalTransaction() { + Address sender = FactoryHelper.createRandomAddress(); + Address receiver = FactoryHelper.createRandomAddress(); + Coin value = Coin.ONE; + + byte[] data = FactoryHelper.createRandomBytes(128); + + Transaction tx = new Transaction(sender, receiver, value, 42, data, 6000000, Coin.ZERO); + Transaction tx2 = new Transaction(sender, receiver, value, 42, data, 6000000, Coin.ZERO); + Transaction tx3 = new Transaction(sender, receiver, value, 42, data, 6000000, Coin.ONE); + + Assert.assertTrue(tx.equals(tx)); + Assert.assertTrue(tx.equals(tx2)); + Assert.assertTrue(tx2.equals(tx)); + Assert.assertEquals(tx.hashCode(), tx2.hashCode()); + + Assert.assertFalse(tx.equals(tx3)); + Assert.assertFalse(tx2.equals(tx3)); + Assert.assertFalse(tx3.equals(tx)); + Assert.assertFalse(tx3.equals(tx2)); + Assert.assertFalse(tx.equals(null)); + Assert.assertFalse(tx.equals("foo")); + } } diff --git a/src/test/java/com/ajlopez/blockchain/processors/TransactionPoolTest.java b/src/test/java/com/ajlopez/blockchain/processors/TransactionPoolTest.java index 4b0e5195..4b76ec5c 100644 --- a/src/test/java/com/ajlopez/blockchain/processors/TransactionPoolTest.java +++ b/src/test/java/com/ajlopez/blockchain/processors/TransactionPoolTest.java @@ -84,7 +84,7 @@ public void removeUnknownTransaction() { } @Test - public void addTransactionTwice() { + public void addSameTransactionTwice() { TransactionPool pool = new TransactionPool(); Transaction transaction = FactoryHelper.createTransaction(100); @@ -102,6 +102,26 @@ public void addTransactionTwice() { Assert.assertEquals(transaction, result.get(0)); } + @Test + public void addTransactionTwice() { + TransactionPool pool = new TransactionPool(); + Transaction transaction = FactoryHelper.createTransaction(100); + Transaction transaction2 = new Transaction(transaction.getSender(), transaction.getReceiver(), transaction.getValue(), transaction.getNonce(), transaction.getData(), transaction.getGas(), transaction.getGasPrice()); + + pool.addTransaction(transaction); + List added = pool.addTransaction(transaction2); + + Assert.assertNotNull(added); + Assert.assertTrue(added.isEmpty()); + + List result = pool.getTransactions(); + + Assert.assertNotNull(result); + Assert.assertFalse(result.isEmpty()); + Assert.assertEquals(1, result.size()); + Assert.assertEquals(transaction, result.get(0)); + } + @Test public void addTransactionGetListAddTransaction() { TransactionPool pool = new TransactionPool();