From 730b5033d17156fb995d487d0f0394c6d223b9cf Mon Sep 17 00:00:00 2001 From: Kc Date: Thu, 4 Oct 2018 22:58:04 +0200 Subject: [PATCH] CHANGED: switched to JUnit5 CHANGED: globalization tests --- pom.xml | 10 ++ src/Start.java | 6 +- src/globalization/ContextPaths.java | 11 +- .../TranslationXmlStreamReader.java | 6 +- src/test/ATTests.java | 5 +- src/test/BlockTests.java | 9 +- src/test/BlockchainTests.java | 3 +- src/test/Common.java | 10 +- src/test/CompatibilityTests.java | 5 +- src/test/CryptoTests.java | 9 +- src/test/ExceptionTests.java | 4 +- src/test/GenesisTests.java | 15 +- src/test/GlobalizationTests.java | 105 ++++++++++++- src/test/LoadTests.java | 29 ++-- src/test/NavigationTests.java | 15 +- src/test/RepositoryTests.java | 4 +- src/test/SaveTests.java | 3 +- src/test/SerializationTests.java | 11 +- src/test/SignatureTests.java | 5 +- src/test/TransactionTests.java | 142 +++++++++--------- src/test/utils/AssertExtensions.java | 43 +++++- 21 files changed, 294 insertions(+), 156 deletions(-) diff --git a/pom.xml b/pom.xml index 72da220b..53655871 100644 --- a/pom.xml +++ b/pom.xml @@ -118,5 +118,15 @@ 2.4.1 test + + org.junit.jupiter + junit-jupiter-engine + 5.3.1 + + + org.hamcrest + hamcrest-library + 1.3 + \ No newline at end of file diff --git a/src/Start.java b/src/Start.java index 5afe3589..585f65c6 100644 --- a/src/Start.java +++ b/src/Start.java @@ -18,8 +18,8 @@ public class Start { apiService.start(); //// testing the API client - ApiClient client = ApiClient.getInstance(); - String test = client.executeCommand("GET blocks/height"); - System.out.println(test); + //ApiClient client = ApiClient.getInstance(); + //String test = client.executeCommand("GET blocks/height"); + //System.out.println(test); } } diff --git a/src/globalization/ContextPaths.java b/src/globalization/ContextPaths.java index 6f6a35a0..e924b25d 100644 --- a/src/globalization/ContextPaths.java +++ b/src/globalization/ContextPaths.java @@ -1,13 +1,22 @@ package globalization; import java.nio.file.Paths; +import javax.xml.stream.XMLStreamException; public class ContextPaths { public static boolean isValidKey(String value) { - return !value.contains("/"); + return !value.contains("/") && !ContextPaths.containsParentReference(value); } + public static boolean containsParentReference(String value) { + for(String part : value.split("/")) { + if(part.equalsIgnoreCase("..")) + return true; + } + return false; + } + public static String combinePaths(String left, String right) { return Paths.get("/", left, right).normalize().toString(); } diff --git a/src/globalization/TranslationXmlStreamReader.java b/src/globalization/TranslationXmlStreamReader.java index 45a95a6b..db4f76be 100644 --- a/src/globalization/TranslationXmlStreamReader.java +++ b/src/globalization/TranslationXmlStreamReader.java @@ -212,10 +212,8 @@ public class TranslationXmlStreamReader { } private void assureIsValidPathExtension(String value) throws XMLStreamException { - for(String part : value.split("/")) { - if(part.equalsIgnoreCase("..")) - throw new javax.xml.stream.XMLStreamException("Parent reference .. is not allowed"); - } + if(ContextPaths.containsParentReference(value)) + throw new javax.xml.stream.XMLStreamException("Parent reference .. is not allowed"); } private void assureIsValidKey(String value) throws XMLStreamException { diff --git a/src/test/ATTests.java b/src/test/ATTests.java index 076bb927..4d2942eb 100644 --- a/src/test/ATTests.java +++ b/src/test/ATTests.java @@ -1,12 +1,11 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.math.BigDecimal; import java.util.Arrays; -import org.junit.Test; - import com.google.common.hash.HashCode; import data.block.BlockData; diff --git a/src/test/BlockTests.java b/src/test/BlockTests.java index b0485c3a..f70370f8 100644 --- a/src/test/BlockTests.java +++ b/src/test/BlockTests.java @@ -1,11 +1,10 @@ package test; -import static org.junit.Assert.*; - import java.math.BigDecimal; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import data.block.BlockData; import data.transaction.TransactionData; @@ -67,7 +66,7 @@ public class BlockTests extends Common { // 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); + assertNotNull(blockData, "Block 754 is required for this test"); Block block = new Block(repository, blockData); assertTrue(block.isSignatureValid()); @@ -108,7 +107,7 @@ public class BlockTests extends Common { // 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); + assertNotNull(blockData, "Block 754 is required for this test"); Block block = new Block(repository, blockData); assertTrue(block.isSignatureValid()); diff --git a/src/test/BlockchainTests.java b/src/test/BlockchainTests.java index 264f8773..bdb2662f 100644 --- a/src/test/BlockchainTests.java +++ b/src/test/BlockchainTests.java @@ -1,6 +1,7 @@ package test; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import qora.block.BlockChain; import repository.DataException; diff --git a/src/test/Common.java b/src/test/Common.java index e3734218..fe1788ef 100644 --- a/src/test/Common.java +++ b/src/test/Common.java @@ -1,7 +1,9 @@ package test; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.AfterAll; import repository.DataException; import repository.RepositoryFactory; @@ -13,13 +15,13 @@ public class Common { // public static final String connectionUrl = "jdbc:hsqldb:file:db/test;create=true;close_result=true;sql.strict_exec=true;sql.enforce_names=true;sql.syntax_mys=true;sql.pad_space=false"; public static final String connectionUrl = "jdbc:hsqldb:file:db/test;create=true"; - @BeforeClass + @BeforeAll public static void setRepository() throws DataException { RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(connectionUrl); RepositoryManager.setRepositoryFactory(repositoryFactory); } - @AfterClass + @AfterAll public static void closeRepository() throws DataException { RepositoryManager.closeRepositoryFactory(); } diff --git a/src/test/CompatibilityTests.java b/src/test/CompatibilityTests.java index 3c630697..d5c3e154 100644 --- a/src/test/CompatibilityTests.java +++ b/src/test/CompatibilityTests.java @@ -1,8 +1,7 @@ package test; -import static org.junit.Assert.*; - -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import com.google.common.hash.HashCode; diff --git a/src/test/CryptoTests.java b/src/test/CryptoTests.java index dfe7299b..b90e335a 100644 --- a/src/test/CryptoTests.java +++ b/src/test/CryptoTests.java @@ -1,8 +1,7 @@ package test; -import static org.junit.Assert.*; - -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import com.google.common.hash.HashCode; @@ -16,7 +15,7 @@ public class CryptoTests { byte[] digest = Crypto.digest(input); byte[] expected = HashCode.fromString("6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d").asBytes(); - assertArrayEquals(digest, expected); + assertArrayEquals(expected, digest); } @Test @@ -25,7 +24,7 @@ public class CryptoTests { byte[] digest = Crypto.doubleDigest(input); byte[] expected = HashCode.fromString("1406e05881e299367766d313e26c05564ec91bf721d31726bd6e46e60689539a").asBytes(); - assertArrayEquals(digest, expected); + assertArrayEquals(expected, digest); } @Test diff --git a/src/test/ExceptionTests.java b/src/test/ExceptionTests.java index 37100d53..b0029a8b 100644 --- a/src/test/ExceptionTests.java +++ b/src/test/ExceptionTests.java @@ -1,8 +1,8 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; -import org.junit.Test; import qora.block.Block; public class ExceptionTests { diff --git a/src/test/GenesisTests.java b/src/test/GenesisTests.java index aa2f002b..504c6c93 100644 --- a/src/test/GenesisTests.java +++ b/src/test/GenesisTests.java @@ -1,13 +1,12 @@ package test; -import static org.junit.Assert.*; - import java.math.BigDecimal; import java.util.List; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.AfterAll; import data.transaction.TransactionData; import qora.account.Account; @@ -26,13 +25,13 @@ public class GenesisTests { public static final String connectionUrl = "jdbc:hsqldb:mem:db/test;create=true;close_result=true;sql.strict_exec=true;sql.enforce_names=true;sql.syntax_mys=true"; - @BeforeClass + @BeforeAll public static void setRepository() throws DataException { RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(connectionUrl); RepositoryManager.setRepositoryFactory(repositoryFactory); } - @AfterClass + @AfterAll public static void closeRepository() throws DataException { RepositoryManager.closeRepositoryFactory(); } @@ -40,7 +39,7 @@ public class GenesisTests { @Test public void testGenesisBlockTransactions() throws DataException { try (final Repository repository = RepositoryManager.getRepository()) { - assertEquals("Blockchain should be empty for this test", 0, repository.getBlockRepository().getBlockchainHeight()); + assertEquals(0, repository.getBlockRepository().getBlockchainHeight(), "Blockchain should be empty for this test"); GenesisBlock block = new GenesisBlock(repository); diff --git a/src/test/GlobalizationTests.java b/src/test/GlobalizationTests.java index e38e290d..d1e385de 100644 --- a/src/test/GlobalizationTests.java +++ b/src/test/GlobalizationTests.java @@ -11,11 +11,14 @@ import java.util.List; import java.util.Locale; import java.util.Set; import javax.xml.stream.XMLStreamException; -import org.junit.Assert; -import static org.junit.Assert.*; -import static test.utils.AssertExtensions.*; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; +import static org.junit.jupiter.api.Assertions.*; + +import static test.utils.AssertExtensions.*; import test.utils.EqualityComparer; public class GlobalizationTests { @@ -54,7 +57,7 @@ public class GlobalizationTests { } @Test - public void TestTranslationXmlReader() throws XMLStreamException { + public void TestTranslationXmlReaderContextPaths() throws XMLStreamException { String xml = "\n" + "\n" + @@ -64,6 +67,9 @@ public class GlobalizationTests { " \n" + " \n" + " \n" + + " \n" + + " \n" + + " \n" + " \n" + " \n" + "\n"; @@ -71,12 +77,99 @@ public class GlobalizationTests { List expected = new ArrayList(); expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/key1", "1")); expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path2/path3/key2", "2")); + expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path4/key3", "3")); InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))); TranslationXmlStreamReader reader = new TranslationXmlStreamReader(); Iterable actual = reader.ReadFrom(is); - assertSetEquals(expected, actual, new TranslationEntryEqualityComparer()); + for(TranslationEntry i:expected)System.out.println(i);for(TranslationEntry i:actual)System.out.println(i); + assertItemsEqual(expected, actual, new TranslationEntryEqualityComparer()); } + @Test + public void TestTranslationXmlReaderLocales() throws XMLStreamException { + String xml = + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + + List expected = new ArrayList(); + expected.add(new TranslationEntry(Locale.forLanguageTag("default"), "/key1", "1")); + expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/key2", "2")); + expected.add(new TranslationEntry(Locale.forLanguageTag("de-DE"), "/path1/path2/key3", "3")); + + InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))); + TranslationXmlStreamReader reader = new TranslationXmlStreamReader(); + Iterable actual = reader.ReadFrom(is); + + assertItemsEqual(expected, actual, new TranslationEntryEqualityComparer()); + } + + @Test + public void TestTranslationXmlReader_BadPath() { + String xml = + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + + InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))); + TranslationXmlStreamReader reader = new TranslationXmlStreamReader(); + + assertThrows(XMLStreamException.class, () -> reader.ReadFrom(is)); + } + + @Test + public void TestTranslationXmlReader_BadKey1() { + String xml = + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + + InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))); + TranslationXmlStreamReader reader = new TranslationXmlStreamReader(); + + assertThrows(XMLStreamException.class, () -> reader.ReadFrom(is)); + } + + @Test + public void TestTranslationXmlReader_BadKey2() { + String xml = + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + + InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))); + TranslationXmlStreamReader reader = new TranslationXmlStreamReader(); + + assertThrows(XMLStreamException.class, () -> reader.ReadFrom(is)); + } } diff --git a/src/test/LoadTests.java b/src/test/LoadTests.java index aa617985..ab86a7c7 100644 --- a/src/test/LoadTests.java +++ b/src/test/LoadTests.java @@ -1,8 +1,7 @@ package test; -import static org.junit.Assert.*; - -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import data.transaction.PaymentTransactionData; import data.transaction.TransactionData; @@ -21,25 +20,25 @@ public class LoadTests extends Common { 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(repository.getBlockRepository().getBlockchainHeight() >= 49778, + "Migrate from old database to at least block 49778 before running this test"); 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()); - assertEquals(PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); + assertNotNull(transactionData, "Transaction data not loaded from repository"); + assertEquals(TransactionType.PAYMENT, transactionData.getType(), "Transaction data not PAYMENT type"); + assertEquals("QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E", PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey())); 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"); + assertEquals("QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E", PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey())); + assertEquals("QZsv8vbJ6QfrBNba4LMp5UtHhAzhrxvVUU", paymentTransactionData.getRecipient()); + assertEquals(1416209264000L, paymentTransactionData.getTimestamp()); + assertEquals("31dC6kHHBeG5vYb8LMaZDjLEmhc9kQB2VUApVd8xWncSRiXu7yMejdprjYFMP2rUnzZxWd4KJhkq6LsV7rQvU1kY", + Base58.encode(paymentTransactionData.getReference())); } } @@ -48,8 +47,8 @@ public class LoadTests extends Common { 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(repository.getBlockRepository().getBlockchainHeight() >= 49778, + "Migrate from old database to at least block 49778 before running this test"); String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; byte[] signature = Base58.decode(signature58); diff --git a/src/test/NavigationTests.java b/src/test/NavigationTests.java index 42cfdcb6..504b7d1b 100644 --- a/src/test/NavigationTests.java +++ b/src/test/NavigationTests.java @@ -1,8 +1,7 @@ package test; -import static org.junit.Assert.*; - -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import data.block.BlockData; import data.transaction.TransactionData; @@ -20,8 +19,8 @@ public class NavigationTests extends Common { 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(repository.getBlockRepository().getBlockchainHeight() >= 49778, + "Migrate from old database to at least block 49778 before running this test"); String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; byte[] signature = Base58.decode(signature58); @@ -29,11 +28,11 @@ public class NavigationTests extends Common { 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()); + assertNotNull(transactionData, "Transaction data not loaded from repository"); + assertEquals(TransactionType.PAYMENT, transactionData.getType(), "Transaction data not PAYMENT type"); BlockData blockData = transactionRepository.getBlockDataFromSignature(signature); - assertNotNull("Block 49778 not loaded from database", blockData); + assertNotNull(blockData, "Block 49778 not loaded from database"); System.out.println("Block " + blockData.getHeight() + ", signature: " + Base58.encode(blockData.getSignature())); diff --git a/src/test/RepositoryTests.java b/src/test/RepositoryTests.java index a37b71c6..0658d98a 100644 --- a/src/test/RepositoryTests.java +++ b/src/test/RepositoryTests.java @@ -1,10 +1,10 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.junit.Test; import repository.DataException; import repository.Repository; diff --git a/src/test/SaveTests.java b/src/test/SaveTests.java index 1338e3b8..80bbf74e 100644 --- a/src/test/SaveTests.java +++ b/src/test/SaveTests.java @@ -3,7 +3,8 @@ package test; import java.math.BigDecimal; import java.time.Instant; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import data.transaction.PaymentTransactionData; import qora.account.PublicKeyAccount; diff --git a/src/test/SerializationTests.java b/src/test/SerializationTests.java index ede95240..61a1b0e8 100644 --- a/src/test/SerializationTests.java +++ b/src/test/SerializationTests.java @@ -1,12 +1,11 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.Arrays; import java.util.List; -import org.junit.Test; - import data.block.BlockData; import data.transaction.GenesisTransactionData; import data.transaction.TransactionData; @@ -61,15 +60,15 @@ public class SerializationTests extends Common { TransactionData parsedTransactionData = TransactionTransformer.fromBytes(bytes); - assertTrue("Transaction signature mismatch", Arrays.equals(transactionData.getSignature(), parsedTransactionData.getSignature())); + assertTrue(Arrays.equals(transactionData.getSignature(), parsedTransactionData.getSignature()), "Transaction signature mismatch"); - assertEquals("Data length mismatch", TransactionTransformer.getDataLength(transactionData), bytes.length); + assertEquals(bytes.length, TransactionTransformer.getDataLength(transactionData), "Data length mismatch"); } private void testSpecificBlockTransactions(int height, TransactionType type) throws DataException, TransformationException { try (final Repository repository = RepositoryManager.getRepository()) { BlockData blockData = repository.getBlockRepository().fromHeight(height); - assertNotNull("Block " + height + " is required for this test", blockData); + assertNotNull(blockData, "Block " + height + " is required for this test"); Block block = new Block(repository, blockData); diff --git a/src/test/SignatureTests.java b/src/test/SignatureTests.java index bffc7144..54aeafa4 100644 --- a/src/test/SignatureTests.java +++ b/src/test/SignatureTests.java @@ -1,11 +1,10 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.math.BigDecimal; -import org.junit.Test; - import data.block.BlockData; import qora.account.PrivateKeyAccount; import qora.block.Block; diff --git a/src/test/TransactionTests.java b/src/test/TransactionTests.java index f976c59f..3d491db0 100644 --- a/src/test/TransactionTests.java +++ b/src/test/TransactionTests.java @@ -1,6 +1,8 @@ package test; -import static org.junit.Assert.*; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.AfterEach; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; @@ -10,8 +12,6 @@ import java.util.Arrays; import java.util.List; import org.json.simple.JSONObject; -import org.junit.After; -import org.junit.Test; import com.google.common.hash.HashCode; @@ -97,7 +97,7 @@ public class TransactionTests { RepositoryManager.setRepositoryFactory(repositoryFactory); try (final Repository repository = RepositoryManager.getRepository()) { - assertEquals("Blockchain should be empty for this test", 0, repository.getBlockRepository().getBlockchainHeight()); + assertEquals(0, repository.getBlockRepository().getBlockchainHeight(), "Blockchain should be empty for this test"); } // [Un]set genesis timestamp as required by test @@ -136,7 +136,7 @@ public class TransactionTests { repository.saveChanges(); } - @After + @AfterEach public void closeRepository() throws DataException { RepositoryManager.closeRepositoryFactory(); } @@ -176,8 +176,8 @@ public class TransactionTests { block.addTransaction(paymentTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -185,21 +185,21 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = initialSenderBalance.subtract(amount).subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Amount should be in recipient's balance expectedBalance = amount; actualBalance = accountRepository.getBalance(recipient.getAddress(), Asset.QORA).getBalance(); - assertTrue("Recipient's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Recipient's new balance incorrect"); // Check recipient's reference byte[] recipientsReference = recipient.getLastReference(); - assertTrue("Recipient's new reference incorrect", Arrays.equals(paymentTransaction.getTransactionData().getSignature(), recipientsReference)); + assertTrue(Arrays.equals(paymentTransaction.getTransactionData().getSignature(), recipientsReference), "Recipient's new reference incorrect"); // Orphan block block.orphan(); @@ -207,11 +207,11 @@ public class TransactionTests { // Check sender's balance actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's reverted balance incorrect", initialSenderBalance.compareTo(actualBalance) == 0); + assertTrue(initialSenderBalance.compareTo(actualBalance) == 0, "Sender's reverted balance incorrect"); // Check generator's balance actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", initialGeneratorBalance.compareTo(actualBalance) == 0); + assertTrue(initialGeneratorBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); } @Test @@ -237,8 +237,8 @@ public class TransactionTests { block.addTransaction(registerNameTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -246,19 +246,19 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = initialSenderBalance.subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Check name was registered NameData actualNameData = this.repository.getNameRepository().fromName(name); assertNotNull(actualNameData); // Check sender's reference - assertTrue("Sender's new reference incorrect", Arrays.equals(registerNameTransactionData.getSignature(), sender.getLastReference())); + assertTrue(Arrays.equals(registerNameTransactionData.getSignature(), sender.getLastReference()), "Sender's new reference incorrect"); // Update variables for use by other tests reference = sender.getLastReference(); @@ -293,8 +293,8 @@ public class TransactionTests { block.addTransaction(updateNameTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -338,8 +338,8 @@ public class TransactionTests { block.addTransaction(sellNameTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -389,8 +389,8 @@ public class TransactionTests { block.addTransaction(cancelSellNameTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -455,8 +455,8 @@ public class TransactionTests { block.addTransaction(buyNameTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -508,8 +508,8 @@ public class TransactionTests { block.addTransaction(createPollTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -517,19 +517,19 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = initialSenderBalance.subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Check poll was created PollData actualPollData = this.repository.getVotingRepository().fromPollName(pollName); assertNotNull(actualPollData); // Check sender's reference - assertTrue("Sender's new reference incorrect", Arrays.equals(createPollTransactionData.getSignature(), sender.getLastReference())); + assertTrue(Arrays.equals(createPollTransactionData.getSignature(), sender.getLastReference()), "Sender's new reference incorrect"); // Update variables for use by other tests reference = sender.getLastReference(); @@ -567,8 +567,8 @@ public class TransactionTests { block.addTransaction(voteOnPollTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -588,10 +588,10 @@ public class TransactionTests { List votes = repository.getVotingRepository().getVotes(pollName); assertNotNull(votes); - assertEquals("Only one vote expected", 1, votes.size()); + assertEquals(1, votes.size(), "Only one vote expected"); - assertEquals("Wrong vote option index", pollOptionsSize - 1, votes.get(0).getOptionIndex()); - assertTrue("Wrong voter public key", Arrays.equals(sender.getPublicKey(), votes.get(0).getVoterPublicKey())); + assertEquals(pollOptionsSize - 1, votes.get(0).getOptionIndex(), "Wrong vote option index"); + assertTrue(Arrays.equals(sender.getPublicKey(), votes.get(0).getVoterPublicKey()), "Wrong voter public key"); // Orphan last block BlockData lastBlockData = repository.getBlockRepository().getLastBlock(); @@ -603,10 +603,10 @@ public class TransactionTests { votes = repository.getVotingRepository().getVotes(pollName); assertNotNull(votes); - assertEquals("Only one vote expected", 1, votes.size()); + assertEquals(1, votes.size(), "Only one vote expected"); - assertEquals("Wrong vote option index", pollOptionsSize - 1 - 1, votes.get(0).getOptionIndex()); - assertTrue("Wrong voter public key", Arrays.equals(sender.getPublicKey(), votes.get(0).getVoterPublicKey())); + assertEquals(pollOptionsSize - 1 - 1, votes.get(0).getOptionIndex(), "Wrong vote option index"); + assertTrue(Arrays.equals(sender.getPublicKey(), votes.get(0).getVoterPublicKey()), "Wrong voter public key"); } @Test @@ -634,8 +634,8 @@ public class TransactionTests { block.addTransaction(issueAssetTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -643,12 +643,12 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = initialSenderBalance.subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Check we now have an assetId Long assetId = issueAssetTransactionData.getAssetId(); @@ -672,11 +672,11 @@ public class TransactionTests { // Check sender's balance actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's reverted balance incorrect", initialSenderBalance.compareTo(actualBalance) == 0); + assertTrue(initialSenderBalance.compareTo(actualBalance) == 0, "Sender's reverted balance incorrect"); // Check generator's balance actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's reverted balance incorrect", initialGeneratorBalance.compareTo(actualBalance) == 0); + assertTrue(initialGeneratorBalance.compareTo(actualBalance) == 0, "Generator's reverted balance incorrect"); // Check asset no longer exists assertFalse(assetRepo.assetExists(assetId)); @@ -724,8 +724,8 @@ public class TransactionTests { block.addTransaction(transferAssetTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -733,12 +733,12 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = originalSenderBalance.subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = originalGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Check asset balances BigDecimal actualSenderAssetBalance = sender.getConfirmedBalance(assetId); @@ -756,11 +756,11 @@ public class TransactionTests { // Check sender's balance actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's reverted balance incorrect", originalSenderBalance.compareTo(actualBalance) == 0); + assertTrue(originalSenderBalance.compareTo(actualBalance) == 0, "Sender's reverted balance incorrect"); // Check generator's balance actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's reverted balance incorrect", originalGeneratorBalance.compareTo(actualBalance) == 0); + assertTrue(originalGeneratorBalance.compareTo(actualBalance) == 0, "Generator's reverted balance incorrect"); // Check asset balances actualSenderAssetBalance = sender.getConfirmedBalance(assetId); @@ -828,8 +828,8 @@ public class TransactionTests { block.addTransaction(createOrderTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -909,8 +909,8 @@ public class TransactionTests { block.addTransaction(cancelOrderTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -984,8 +984,8 @@ public class TransactionTests { block.addTransaction(createOrderTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -998,7 +998,7 @@ public class TransactionTests { // Check order has trades List trades = assetRepo.getOrdersTrades(orderId); assertNotNull(trades); - assertEquals("Trade didn't happen", 1, trades.size()); + assertEquals(1, trades.size(), "Trade didn't happen"); TradeData tradeData = trades.get(0); // Check trade has correct values @@ -1093,20 +1093,20 @@ public class TransactionTests { block.addTransaction(multiPaymentTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); // Check sender's balance BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedSenderBalance.compareTo(actualBalance) == 0); + assertTrue(expectedSenderBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance BigDecimal expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Check recipients for (int i = 0; i < payments.size(); ++i) { @@ -1114,12 +1114,12 @@ public class TransactionTests { Account recipient = new Account(this.repository, paymentData.getRecipient()); byte[] recipientsReference = recipient.getLastReference(); - assertTrue("Recipient's new reference incorrect", Arrays.equals(multiPaymentTransaction.getTransactionData().getSignature(), recipientsReference)); + assertTrue(Arrays.equals(multiPaymentTransaction.getTransactionData().getSignature(), recipientsReference), "Recipient's new reference incorrect"); // Amount should be in recipient's balance expectedBalance = paymentData.getAmount(); actualBalance = accountRepository.getBalance(recipient.getAddress(), Asset.QORA).getBalance(); - assertTrue("Recipient's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Recipient's new balance incorrect"); } @@ -1129,11 +1129,11 @@ public class TransactionTests { // Check sender's balance actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's reverted balance incorrect", initialSenderBalance.compareTo(actualBalance) == 0); + assertTrue(initialSenderBalance.compareTo(actualBalance) == 0, "Sender's reverted balance incorrect"); // Check generator's balance actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", initialGeneratorBalance.compareTo(actualBalance) == 0); + assertTrue(initialGeneratorBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); } @Test @@ -1163,8 +1163,8 @@ public class TransactionTests { block.addTransaction(messageTransactionData); block.sign(); - assertTrue("Block signatures invalid", block.isSignatureValid()); - assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid()); + assertTrue(block.isSignatureValid(), "Block signatures invalid"); + assertEquals(Block.ValidationResult.OK, block.isValid(), "Block is invalid"); block.process(); repository.saveChanges(); @@ -1172,17 +1172,17 @@ public class TransactionTests { // Check sender's balance BigDecimal expectedBalance = initialSenderBalance.subtract(amount).subtract(fee); BigDecimal actualBalance = accountRepository.getBalance(sender.getAddress(), Asset.QORA).getBalance(); - assertTrue("Sender's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Sender's new balance incorrect"); // Fee should be in generator's balance expectedBalance = initialGeneratorBalance.add(fee); actualBalance = accountRepository.getBalance(generator.getAddress(), Asset.QORA).getBalance(); - assertTrue("Generator's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Generator's new balance incorrect"); // Amount should be in recipient's balance expectedBalance = amount; actualBalance = accountRepository.getBalance(recipient.getAddress(), Asset.QORA).getBalance(); - assertTrue("Recipient's new balance incorrect", expectedBalance.compareTo(actualBalance) == 0); + assertTrue(expectedBalance.compareTo(actualBalance) == 0, "Recipient's new balance incorrect"); } } \ No newline at end of file diff --git a/src/test/utils/AssertExtensions.java b/src/test/utils/AssertExtensions.java index 25ce1f55..bc45db0c 100644 --- a/src/test/utils/AssertExtensions.java +++ b/src/test/utils/AssertExtensions.java @@ -1,21 +1,54 @@ package test.utils; +import com.google.common.collect.Iterables; +import java.lang.reflect.Array; +import java.lang.Class; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; -import org.junit.Assert; + +import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; +import static org.hamcrest.MatcherAssert.assertThat; public class AssertExtensions { + + public static void assertItemsEqual(Iterable expected, Iterable actual, EqualityComparer comparer) { + assertItemsEqual(expected, actual, comparer, (String)null); + } - public static void assertSetEquals(Iterable expected, Iterable actual, EqualityComparer comparer) { - Set> expectedSet = new HashSet>(); + public static void assertItemsEqual(Iterable expected, Iterable actual, EqualityComparer comparer, String message) { + List> expectedSet = new ArrayList>(); for(T item: expected) expectedSet.add(new EquatableWrapper(item, comparer)); - Set> actualSet = new HashSet>(); + List> actualSet = new ArrayList>(); for(T item: actual) actualSet.add(new EquatableWrapper(item, comparer)); - Assert.assertEquals(expectedSet, actualSet); + assertItemsEqual(expectedSet, actualSet, message); } + public static void assertItemsEqual(Iterable expected, Iterable actual) { + assertItemsEqual(expected, actual, (String)null); + } + + public static void assertItemsEqual(Iterable expected, Iterable actual, String message) { + List list = new ArrayList(); + T[] expectedArray = getArray(expected); + assertThat(message, actual, containsInAnyOrder(expectedArray)); + } + + private static T[] getArray(Iterable iterable) { + // XXX: What a horrific way to create an array from an iterable. + // Isn't there a better solution? + List list = new ArrayList(); + for(T item : iterable) + list.add(item); + @SuppressWarnings("unchecked") + T[] result = (T[])new Object[list.size()]; + for(int i = 0; i < list.size(); i++) + result[i] = list.get(i); + return result; + } }