diff --git a/src/qora/block/Block.java b/src/qora/block/Block.java index 8d69384c..986b5546 100644 --- a/src/qora/block/Block.java +++ b/src/qora/block/Block.java @@ -89,6 +89,8 @@ public class Block { this.generator = generator; this.blockData = new BlockData(version, reference, 0, BigDecimal.ZERO.setScale(8), null, 0, timestamp, generatingBalance, generator.getPublicKey(), null, atBytes, atFees); + + this.transactions = new ArrayList(); } // Getters/setters diff --git a/src/qora/block/BlockChain.java b/src/qora/block/BlockChain.java index e87c6682..05082e0e 100644 --- a/src/qora/block/BlockChain.java +++ b/src/qora/block/BlockChain.java @@ -46,35 +46,38 @@ public class BlockChain { } private static boolean isGenesisBlockValid() throws DataException { - BlockRepository blockRepository = RepositoryManager.getRepository().getBlockRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + BlockRepository blockRepository = repository.getBlockRepository(); - int blockchainHeight = blockRepository.getBlockchainHeight(); - if (blockchainHeight < 1) - return false; + int blockchainHeight = blockRepository.getBlockchainHeight(); + if (blockchainHeight < 1) + return false; - BlockData blockData = blockRepository.fromHeight(1); - if (blockData == null) - return false; + BlockData blockData = blockRepository.fromHeight(1); + if (blockData == null) + return false; - return GenesisBlock.isGenesisBlock(blockData); + return GenesisBlock.isGenesisBlock(blockData); + } } private static void rebuildBlockchain() throws DataException { // (Re)build repository - Repository repository = RepositoryManager.getRepository(); - repository.rebuild(); + try (final Repository repository = RepositoryManager.getRepository()) { + repository.rebuild(); - // Add Genesis Block - GenesisBlock genesisBlock = new GenesisBlock(repository); - genesisBlock.process(); + // Add Genesis Block + GenesisBlock genesisBlock = new GenesisBlock(repository); + genesisBlock.process(); - // Add QORA asset. - // NOTE: Asset's transaction reference is Genesis Block's generator signature which doesn't exist as a transaction! - AssetData qoraAssetData = new AssetData(Asset.QORA, genesisBlock.getGenerator().getAddress(), "Qora", "This is the simulated Qora asset.", 10_000_000_000L, true, - genesisBlock.getBlockData().getGeneratorSignature()); - repository.getAssetRepository().save(qoraAssetData); + // Add QORA asset. + // NOTE: Asset's transaction reference is Genesis Block's generator signature which doesn't exist as a transaction! + AssetData qoraAssetData = new AssetData(Asset.QORA, genesisBlock.getGenerator().getAddress(), "Qora", "This is the simulated Qora asset.", + 10_000_000_000L, true, genesisBlock.getBlockData().getGeneratorSignature()); + repository.getAssetRepository().save(qoraAssetData); - repository.saveChanges(); + repository.saveChanges(); + } } /** diff --git a/src/qora/block/GenesisBlock.java b/src/qora/block/GenesisBlock.java index ee8236c7..3737186c 100644 --- a/src/qora/block/GenesisBlock.java +++ b/src/qora/block/GenesisBlock.java @@ -3,6 +3,7 @@ package qora.block; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Arrays; import com.google.common.primitives.Bytes; @@ -32,6 +33,8 @@ public class GenesisBlock extends Block { super(repository, new BlockData(GENESIS_BLOCK_VERSION, GENESIS_REFERENCE, 0, BigDecimal.ZERO.setScale(8), GENESIS_TRANSACTIONS_SIGNATURE, 1, GENESIS_TIMESTAMP, GENESIS_GENERATING_BALANCE, GENESIS_GENERATOR_PUBLIC_KEY, GENESIS_GENERATOR_SIGNATURE, null, null)); + this.transactions = new ArrayList(); + // Genesis transactions addGenesisTransaction("QUD9y7NZqTtNwvSAUfewd7zKUGoVivVnTW", "7032468.191"); addGenesisTransaction("QVafvKkE5bZTkq8PcXvdaxwuLNN2DGCwYk", "1716146.084"); diff --git a/src/repository/Repository.java b/src/repository/Repository.java index 9a33c9ca..46685e59 100644 --- a/src/repository/Repository.java +++ b/src/repository/Repository.java @@ -1,6 +1,6 @@ package repository; -public interface Repository { +public interface Repository extends AutoCloseable { public AccountRepository getAccountRepository(); diff --git a/src/test/BlockTests.java b/src/test/BlockTests.java index 5b9cdc17..2c4d6c5e 100644 --- a/src/test/BlockTests.java +++ b/src/test/BlockTests.java @@ -22,100 +22,101 @@ public class BlockTests extends Common { @Test public void testGenesisBlockTransactions() throws DataException { - Repository repository = RepositoryManager.getRepository(); - GenesisBlock block = new GenesisBlock(repository); + try (final Repository repository = RepositoryManager.getRepository()) { + GenesisBlock block = new GenesisBlock(repository); - assertNotNull(block); - assertTrue(block.isSignatureValid()); - // only true if blockchain is empty - // assertTrue(block.isValid(connection)); + assertNotNull(block); + assertTrue(block.isSignatureValid()); + // only true if blockchain is empty + // assertTrue(block.isValid(connection)); - List transactions = block.getTransactions(); - assertNotNull(transactions); + List transactions = block.getTransactions(); + assertNotNull(transactions); - for (Transaction transaction : transactions) { - assertNotNull(transaction); + for (Transaction transaction : transactions) { + assertNotNull(transaction); - TransactionData transactionData = transaction.getTransactionData(); + TransactionData transactionData = transaction.getTransactionData(); + + assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); + assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); + assertNull(transactionData.getReference()); + assertTrue(transaction.isSignatureValid()); + assertEquals(Transaction.ValidationResult.OK, transaction.isValid()); + } + + // Attempt to load first transaction directly from database + TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature()); + assertNotNull(transactionData); assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); assertNull(transactionData.getReference()); + + Transaction transaction = Transaction.fromData(repository, transactionData); + assertNotNull(transaction); + assertTrue(transaction.isSignatureValid()); assertEquals(Transaction.ValidationResult.OK, transaction.isValid()); } - - // Attempt to load first transaction directly from database - TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature()); - assertNotNull(transactionData); - - assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); - assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); - assertNull(transactionData.getReference()); - - Transaction transaction = Transaction.fromData(repository, transactionData); - assertNotNull(transaction); - - assertTrue(transaction.isSignatureValid()); - assertEquals(Transaction.ValidationResult.OK, transaction.isValid()); } @Test public void testBlockPaymentTransactions() throws DataException { - Repository repository = RepositoryManager.getRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + // Block 949 has lots of varied transactions + // Blocks 390 & 754 have only payment transactions + BlockData blockData = repository.getBlockRepository().fromHeight(754); + assertNotNull("Block 754 is required for this test", blockData); - // Block 949 has lots of varied transactions - // Blocks 390 & 754 have only payment transactions - BlockData blockData = repository.getBlockRepository().fromHeight(754); - assertNotNull("Block 754 is required for this test", blockData); + Block block = new Block(repository, blockData); + assertTrue(block.isSignatureValid()); - Block block = new Block(repository, blockData); - assertTrue(block.isSignatureValid()); + List transactions = block.getTransactions(); + assertNotNull(transactions); - List transactions = block.getTransactions(); - assertNotNull(transactions); + for (Transaction transaction : transactions) { + assertNotNull(transaction); - for (Transaction transaction : transactions) { + TransactionData transactionData = transaction.getTransactionData(); + + assertEquals(Transaction.TransactionType.PAYMENT, transactionData.getType()); + assertFalse(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); + assertNotNull(transactionData.getReference()); + + assertTrue(transaction.isSignatureValid()); + } + + // Attempt to load first transaction directly from database + TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature()); + assertNotNull(transactionData); + + assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); + assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); + assertNull(transactionData.getReference()); + + Transaction transaction = Transaction.fromData(repository, transactionData); assertNotNull(transaction); - TransactionData transactionData = transaction.getTransactionData(); - - assertEquals(Transaction.TransactionType.PAYMENT, transactionData.getType()); - assertFalse(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); - assertNotNull(transactionData.getReference()); - assertTrue(transaction.isSignatureValid()); } - - // Attempt to load first transaction directly from database - TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature()); - assertNotNull(transactionData); - - assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); - assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); - assertNull(transactionData.getReference()); - - Transaction transaction = Transaction.fromData(repository, transactionData); - assertNotNull(transaction); - - assertTrue(transaction.isSignatureValid()); } @Test public void testBlockSerialization() throws DataException, TransformationException { - Repository repository = RepositoryManager.getRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + // Block 949 has lots of varied transactions + // Blocks 390 & 754 have only payment transactions + BlockData blockData = repository.getBlockRepository().fromHeight(754); + assertNotNull("Block 754 is required for this test", blockData); - // Block 949 has lots of varied transactions - // Blocks 390 & 754 have only payment transactions - BlockData blockData = repository.getBlockRepository().fromHeight(754); - assertNotNull("Block 754 is required for this test", blockData); + Block block = new Block(repository, blockData); + assertTrue(block.isSignatureValid()); - Block block = new Block(repository, blockData); - assertTrue(block.isSignatureValid()); + byte[] bytes = BlockTransformer.toBytes(block); - byte[] bytes = BlockTransformer.toBytes(block); - - assertEquals(BlockTransformer.getDataLength(block), bytes.length); + assertEquals(BlockTransformer.getDataLength(block), bytes.length); + } } } diff --git a/src/test/LoadTests.java b/src/test/LoadTests.java index 5fb0d0e3..1b40ac75 100644 --- a/src/test/LoadTests.java +++ b/src/test/LoadTests.java @@ -18,71 +18,74 @@ public class LoadTests extends Common { @Test public void testLoadPaymentTransaction() throws DataException { - Repository repository = RepositoryManager.getRepository(); - TransactionRepository transactionRepository = repository.getTransactionRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + TransactionRepository transactionRepository = repository.getTransactionRepository(); - assertTrue("Migrate from old database to at least block 49778 before running this test", - repository.getBlockRepository().getBlockchainHeight() >= 49778); + assertTrue("Migrate from old database to at least block 49778 before running this test", + repository.getBlockRepository().getBlockchainHeight() >= 49778); - String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; - byte[] signature = Base58.decode(signature58); + String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; + byte[] signature = Base58.decode(signature58); - TransactionData transactionData = transactionRepository.fromSignature(signature); - assertNotNull("Transaction data not loaded from repository", transactionData); - assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType().value); - assertEquals(PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); + TransactionData transactionData = transactionRepository.fromSignature(signature); + assertNotNull("Transaction data not loaded from repository", transactionData); + assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType()); + assertEquals(PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); - PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; + PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; - assertNotNull(paymentTransactionData); - assertEquals(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); - assertEquals(paymentTransactionData.getRecipient(), "QZsv8vbJ6QfrBNba4LMp5UtHhAzhrxvVUU"); - assertEquals(paymentTransactionData.getTimestamp(), 1416209264000L); - assertEquals(Base58.encode(paymentTransactionData.getReference()), - "31dC6kHHBeG5vYb8LMaZDjLEmhc9kQB2VUApVd8xWncSRiXu7yMejdprjYFMP2rUnzZxWd4KJhkq6LsV7rQvU1kY"); + assertNotNull(paymentTransactionData); + assertEquals(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); + assertEquals(paymentTransactionData.getRecipient(), "QZsv8vbJ6QfrBNba4LMp5UtHhAzhrxvVUU"); + assertEquals(paymentTransactionData.getTimestamp(), 1416209264000L); + assertEquals(Base58.encode(paymentTransactionData.getReference()), + "31dC6kHHBeG5vYb8LMaZDjLEmhc9kQB2VUApVd8xWncSRiXu7yMejdprjYFMP2rUnzZxWd4KJhkq6LsV7rQvU1kY"); + } } @Test public void testLoadFactory() throws DataException { - Repository repository = RepositoryManager.getRepository(); - TransactionRepository transactionRepository = repository.getTransactionRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + TransactionRepository transactionRepository = repository.getTransactionRepository(); - assertTrue("Migrate from old database to at least block 49778 before running this test", - repository.getBlockRepository().getBlockchainHeight() >= 49778); + assertTrue("Migrate from old database to at least block 49778 before running this test", + repository.getBlockRepository().getBlockchainHeight() >= 49778); - String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; - byte[] signature = Base58.decode(signature58); + String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; + byte[] signature = Base58.decode(signature58); - while (true) { - TransactionData transactionData = transactionRepository.fromSignature(signature); - if (transactionData == null) - break; + while (true) { + TransactionData transactionData = transactionRepository.fromSignature(signature); + if (transactionData == null) + break; - PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; - System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() - + " QORA to " + paymentTransactionData.getRecipient()); + PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; + System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() + + " QORA to " + paymentTransactionData.getRecipient()); - signature = paymentTransactionData.getReference(); + signature = paymentTransactionData.getReference(); + } } } @Test public void testLoadNonexistentTransaction() throws DataException { - Repository repository = RepositoryManager.getRepository(); - TransactionRepository transactionRepository = repository.getTransactionRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + TransactionRepository transactionRepository = repository.getTransactionRepository(); - String signature58 = "1111222233334444"; - byte[] signature = Base58.decode(signature58); + String signature58 = "1111222233334444"; + byte[] signature = Base58.decode(signature58); - TransactionData transactionData = transactionRepository.fromSignature(signature); + TransactionData transactionData = transactionRepository.fromSignature(signature); - if (transactionData != null) { - PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; + if (transactionData != null) { + PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; - System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() - + " QORA to " + paymentTransactionData.getRecipient()); + System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() + + " QORA to " + paymentTransactionData.getRecipient()); - fail(); + fail(); + } } } diff --git a/src/test/NavigationTests.java b/src/test/NavigationTests.java index 36336934..de9057e6 100644 --- a/src/test/NavigationTests.java +++ b/src/test/NavigationTests.java @@ -17,27 +17,28 @@ public class NavigationTests extends Common { @Test public void testNavigateFromTransactionToBlock() throws DataException { - Repository repository = RepositoryManager.getRepository(); - TransactionRepository transactionRepository = repository.getTransactionRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + TransactionRepository transactionRepository = repository.getTransactionRepository(); - assertTrue("Migrate from old database to at least block 49778 before running this test", - repository.getBlockRepository().getBlockchainHeight() >= 49778); + assertTrue("Migrate from old database to at least block 49778 before running this test", + repository.getBlockRepository().getBlockchainHeight() >= 49778); - String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; - byte[] signature = Base58.decode(signature58); + String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; + byte[] signature = Base58.decode(signature58); - System.out.println("Navigating to Block from transaction " + signature58); + System.out.println("Navigating to Block from transaction " + signature58); - TransactionData transactionData = transactionRepository.fromSignature(signature); - assertNotNull("Transaction data not loaded from repository", transactionData); - assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType().value); + TransactionData transactionData = transactionRepository.fromSignature(signature); + assertNotNull("Transaction data not loaded from repository", transactionData); + assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType()); - BlockData blockData = transactionRepository.toBlock(transactionData); - assertNotNull("Block 49778 not loaded from database", blockData); + BlockData blockData = transactionRepository.toBlock(transactionData); + assertNotNull("Block 49778 not loaded from database", blockData); - System.out.println("Block " + blockData.getHeight() + ", signature: " + Base58.encode(blockData.getSignature())); + System.out.println("Block " + blockData.getHeight() + ", signature: " + Base58.encode(blockData.getSignature())); - assertEquals(49778, blockData.getHeight()); + assertEquals(49778, blockData.getHeight()); + } } } diff --git a/src/test/RepositoryTests.java b/src/test/RepositoryTests.java index d4ac6cd7..5cc3e3c1 100644 --- a/src/test/RepositoryTests.java +++ b/src/test/RepositoryTests.java @@ -12,8 +12,9 @@ public class RepositoryTests extends Common { @Test public void testGetRepository() throws DataException { - Repository repository = RepositoryManager.getRepository(); - assertNotNull(repository); + try (final Repository repository = RepositoryManager.getRepository()) { + assertNotNull(repository); + } } @Test @@ -25,19 +26,24 @@ public class RepositoryTests extends Common { repositories[i] = RepositoryManager.getRepository(); assertNotNull(repositories[i]); } + + for (int i = 0; i < n_instances; ++i) { + repositories[i].close(); + repositories[i] = null; + } } @Test - public void testAccessAfterCommit() throws DataException { + public void testAccessAfterClose() throws DataException { Repository repository = RepositoryManager.getRepository(); assertNotNull(repository); - repository.saveChanges(); + repository.close(); try { repository.discardChanges(); fail(); - } catch (DataException e) { + } catch (NullPointerException | DataException e) { } } diff --git a/src/test/SaveTests.java b/src/test/SaveTests.java index 053e54e5..e57ab170 100644 --- a/src/test/SaveTests.java +++ b/src/test/SaveTests.java @@ -16,18 +16,18 @@ public class SaveTests extends Common { @Test public void testSavePaymentTransaction() throws DataException { - Repository repository = RepositoryManager.getRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + String reference58 = "rrrr"; + byte[] reference = Base58.decode(reference58); + String signature58 = "ssss"; + byte[] signature = Base58.decode(signature58); + PublicKeyAccount sender = new PublicKeyAccount(repository, "Qsender".getBytes()); - String reference58 = "rrrr"; - byte[] reference = Base58.decode(reference58); - String signature58 = "ssss"; - byte[] signature = Base58.decode(signature58); - PublicKeyAccount sender = new PublicKeyAccount(repository, "Qsender".getBytes()); + PaymentTransactionData paymentTransactionData = new PaymentTransactionData(sender.getPublicKey(), "Qrecipient", BigDecimal.valueOf(12345L), + BigDecimal.ONE, Instant.now().getEpochSecond(), reference, signature); - PaymentTransactionData paymentTransactionData = new PaymentTransactionData(sender.getPublicKey(), "Qrecipient", BigDecimal.valueOf(12345L), - BigDecimal.ONE, Instant.now().getEpochSecond(), reference, signature); - - repository.getTransactionRepository().save(paymentTransactionData); + repository.getTransactionRepository().save(paymentTransactionData); + } } } diff --git a/src/test/SignatureTests.java b/src/test/SignatureTests.java index 79267a96..9ac52073 100644 --- a/src/test/SignatureTests.java +++ b/src/test/SignatureTests.java @@ -22,13 +22,15 @@ public class SignatureTests extends Common { public void testGenesisBlockSignature() throws DataException { String expected58 = "6pHMBFif7jXFG654joT8GPaymau1fMtaxacRyqSrnAwQMQDvqRuLpHpfFyqX4gWVvj4pF1mwQhFgqWAvjVvPJUjmBZQvL751dM9cEcQBTaUcxtNLuWZCVUAtbnWN9f7FsLppHhkPbxwpoodL3UJYRGt3EZrG17mhv1RJbmq8j6rr7Mk"; - Repository repository = RepositoryManager.getRepository(); - GenesisBlock block = new GenesisBlock(repository); - BlockData blockData = block.getBlockData(); + try (final Repository repository = RepositoryManager.getRepository()) { + GenesisBlock block = new GenesisBlock(repository); + BlockData blockData = block.getBlockData(); - System.out.println("Generator: " + block.getGenerator().getAddress() + ", generator signature: " + Base58.encode(blockData.getGeneratorSignature())); + System.out + .println("Generator: " + block.getGenerator().getAddress() + ", generator signature: " + Base58.encode(blockData.getGeneratorSignature())); - assertEquals(expected58, Base58.encode(block.getSignature())); + assertEquals(expected58, Base58.encode(block.getSignature())); + } } @Test @@ -42,20 +44,21 @@ public class SignatureTests extends Common { BigDecimal generatingBalance = BigDecimal.valueOf(10_000_000L).setScale(8); - Repository repository = RepositoryManager.getRepository(); - PrivateKeyAccount generator = new PrivateKeyAccount(repository, - new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }); + try (final Repository repository = RepositoryManager.getRepository()) { + PrivateKeyAccount generator = new PrivateKeyAccount(repository, + new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }); - byte[] atBytes = null; + byte[] atBytes = null; - BigDecimal atFees = null; + BigDecimal atFees = null; - Block block = new Block(repository, version, reference, timestamp, generatingBalance, generator, atBytes, atFees); + Block block = new Block(repository, version, reference, timestamp, generatingBalance, generator, atBytes, atFees); - block.calcGeneratorSignature(); - block.calcTransactionsSignature(); + block.calcGeneratorSignature(); + block.calcTransactionsSignature(); - assertTrue(block.isSignatureValid()); + assertTrue(block.isSignatureValid()); + } } } diff --git a/src/test/TransactionTests.java b/src/test/TransactionTests.java index cfbaec7c..c0c6b989 100644 --- a/src/test/TransactionTests.java +++ b/src/test/TransactionTests.java @@ -25,25 +25,26 @@ public class TransactionTests extends Common { @Test public void testGenesisSerialization() throws TransformationException, DataException { - Repository repository = RepositoryManager.getRepository(); - GenesisBlock block = new GenesisBlock(repository); + try (final Repository repository = RepositoryManager.getRepository()) { + GenesisBlock block = new GenesisBlock(repository); - GenesisTransaction transaction = (GenesisTransaction) block.getTransactions().get(1); - assertNotNull(transaction); + GenesisTransaction transaction = (GenesisTransaction) block.getTransactions().get(1); + assertNotNull(transaction); - GenesisTransactionData genesisTransactionData = (GenesisTransactionData) transaction.getTransactionData(); + GenesisTransactionData genesisTransactionData = (GenesisTransactionData) transaction.getTransactionData(); - System.out.println(genesisTransactionData.getTimestamp() + ": " + genesisTransactionData.getRecipient() + " received " - + genesisTransactionData.getAmount().toPlainString()); + System.out.println(genesisTransactionData.getTimestamp() + ": " + genesisTransactionData.getRecipient() + " received " + + genesisTransactionData.getAmount().toPlainString()); - byte[] bytes = TransactionTransformer.toBytes(genesisTransactionData); + byte[] bytes = TransactionTransformer.toBytes(genesisTransactionData); - GenesisTransactionData parsedTransactionData = (GenesisTransactionData) TransactionTransformer.fromBytes(bytes); + GenesisTransactionData parsedTransactionData = (GenesisTransactionData) TransactionTransformer.fromBytes(bytes); - System.out.println(parsedTransactionData.getTimestamp() + ": " + parsedTransactionData.getRecipient() + " received " - + parsedTransactionData.getAmount().toPlainString()); + System.out.println(parsedTransactionData.getTimestamp() + ": " + parsedTransactionData.getRecipient() + " received " + + parsedTransactionData.getAmount().toPlainString()); - assertTrue(Arrays.equals(genesisTransactionData.getSignature(), parsedTransactionData.getSignature())); + assertTrue(Arrays.equals(genesisTransactionData.getSignature(), parsedTransactionData.getSignature())); + } } private void testGenericSerialization(TransactionData transactionData) throws TransformationException { @@ -60,21 +61,21 @@ public class TransactionTests extends Common { @Test public void testPaymentSerialization() throws TransformationException, DataException { - Repository repository = RepositoryManager.getRepository(); + try (final Repository repository = RepositoryManager.getRepository()) { + // Block 949 has lots of varied transactions + // Blocks 390 & 754 have only payment transactions + BlockData blockData = repository.getBlockRepository().fromHeight(754); + assertNotNull("Block 754 is required for this test", blockData); - // Block 949 has lots of varied transactions - // Blocks 390 & 754 have only payment transactions - BlockData blockData = repository.getBlockRepository().fromHeight(754); - assertNotNull("Block 754 is required for this test", blockData); + Block block = new Block(repository, blockData); + assertTrue(block.isSignatureValid()); - Block block = new Block(repository, blockData); - assertTrue(block.isSignatureValid()); + List transactions = block.getTransactions(); + assertNotNull(transactions); - List transactions = block.getTransactions(); - assertNotNull(transactions); - - for (Transaction transaction : transactions) - testGenericSerialization(transaction.getTransactionData()); + for (Transaction transaction : transactions) + testGenericSerialization(transaction.getTransactionData()); + } } @Test