diff --git a/src/test/java/org/qortal/test/crosschain/BitcoinTests.java b/src/test/java/org/qortal/test/crosschain/BitcoinTests.java index 1096d7ad..684f1cd6 100644 --- a/src/test/java/org/qortal/test/crosschain/BitcoinTests.java +++ b/src/test/java/org/qortal/test/crosschain/BitcoinTests.java @@ -1,121 +1,59 @@ package org.qortal.test.crosschain; -import static org.junit.Assert.*; - -import java.util.Arrays; - -import org.bitcoinj.core.Transaction; -import org.bitcoinj.store.BlockStoreException; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.qortal.crosschain.Bitcoin; -import org.qortal.crosschain.ForeignBlockchainException; -import org.qortal.crosschain.BitcoinyHTLC; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; +import org.qortal.crosschain.Bitcoiny; -public class BitcoinTests extends Common { +public class BitcoinTests extends BitcoinyTests { - private Bitcoin bitcoin; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); // TestNet3 - bitcoin = Bitcoin.getInstance(); + @Override + protected String getCoinName() { + return "Bitcoin"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "BTC"; + } + + @Override + protected Bitcoiny getCoin() { + return Bitcoin.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Bitcoin.resetForTesting(); - bitcoin = null; + } + + @Override + protected String getDeterministicKey58() { + return "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; + } + + @Override + protected String getRecipient() { + return "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; } @Test @Ignore("Often fails due to unreliable BTC testnet ElectrumX servers") - public void testGetMedianBlockTime() throws BlockStoreException, ForeignBlockchainException { - System.out.println(String.format("Starting BTC instance...")); - System.out.println(String.format("BTC instance started")); - - long before = System.currentTimeMillis(); - System.out.println(String.format("Bitcoin median blocktime: %d", bitcoin.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); - - System.out.println(String.format("Bitcoin median blocktime: %d", bitcoin.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); - - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); - } + public void testGetMedianBlockTime() {} @Test @Ignore("Often fails due to unreliable BTC testnet ElectrumX servers") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(bitcoin, p2shAddress); - - assertNotNull(secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } + public void testFindHtlcSecret() {} @Test @Ignore("Often fails due to unreliable BTC testnet ElectrumX servers") - public void testBuildSpend() { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String recipient = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - long amount = 1000L; - - Transaction transaction = bitcoin.buildSpend(xprv58, recipient, amount); - assertNotNull(transaction); - - // Check spent key caching doesn't affect outcome - - transaction = bitcoin.buildSpend(xprv58, recipient, amount); - assertNotNull(transaction); - } + public void testBuildSpend() {} @Test @Ignore("Often fails due to unreliable BTC testnet ElectrumX servers") - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - Long balance = bitcoin.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(bitcoin.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = bitcoin.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(bitcoin.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } + public void testGetWalletBalance() {} @Test @Ignore("Often fails due to unreliable BTC testnet ElectrumX servers") - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String address = bitcoin.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - + public void testGetUnusedReceiveAddress() {} } diff --git a/src/test/java/org/qortal/test/crosschain/BitcoinyTests.java b/src/test/java/org/qortal/test/crosschain/BitcoinyTests.java new file mode 100644 index 00000000..b29fffd4 --- /dev/null +++ b/src/test/java/org/qortal/test/crosschain/BitcoinyTests.java @@ -0,0 +1,130 @@ +package org.qortal.test.crosschain; + +import org.bitcoinj.core.Transaction; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.qortal.crosschain.Bitcoiny; +import org.qortal.crosschain.BitcoinyHTLC; +import org.qortal.crosschain.ForeignBlockchainException; +import org.qortal.repository.DataException; +import org.qortal.test.common.Common; + +import java.util.Arrays; + +import static org.junit.Assert.*; + +public abstract class BitcoinyTests extends Common { + + protected Bitcoiny bitcoiny; + + protected abstract String getCoinName(); + + protected abstract String getCoinSymbol(); + + protected abstract Bitcoiny getCoin(); + + protected abstract void resetCoinForTesting(); + + protected abstract String getDeterministicKey58(); + + protected abstract String getRecipient(); + + @Before + public void beforeTest() throws DataException { + Common.useDefaultSettings(); // TestNet3 + bitcoiny = getCoin(); + } + + @After + public void afterTest() { + resetCoinForTesting(); + bitcoiny = null; + } + + @Test + public void testGetMedianBlockTime() throws ForeignBlockchainException { + System.out.println(String.format("Starting " + getCoinSymbol() + " instance...")); + System.out.println(String.format(getCoinSymbol() + " instance started")); + + long before = System.currentTimeMillis(); + System.out.println(String.format(getCoinName() + " median blocktime: %d", bitcoiny.getMedianBlockTime())); + long afterFirst = System.currentTimeMillis(); + + System.out.println(String.format(getCoinName() + " median blocktime: %d", bitcoiny.getMedianBlockTime())); + long afterSecond = System.currentTimeMillis(); + + long firstPeriod = afterFirst - before; + long secondPeriod = afterSecond - afterFirst; + + System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); + + makeGetMedianBlockTimeAssertions(firstPeriod, secondPeriod); + } + + public void makeGetMedianBlockTimeAssertions(long firstPeriod, long secondPeriod) { + assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); + assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + } + + @Test + public void testFindHtlcSecret() throws ForeignBlockchainException { + // This actually exists on TEST3 but can take a while to fetch + String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; + + byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); + byte[] secret = BitcoinyHTLC.findHtlcSecret(bitcoiny, p2shAddress); + + assertNotNull(secret); + assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); + } + + @Test + public void testBuildSpend() { + String xprv58 = getDeterministicKey58(); + + String recipient = getRecipient(); + long amount = 1000L; + + Transaction transaction = bitcoiny.buildSpend(xprv58, recipient, amount); + assertNotNull(transaction); + + // Check spent key caching doesn't affect outcome + + transaction = bitcoiny.buildSpend(xprv58, recipient, amount); + assertNotNull(transaction); + } + + @Test + public void testGetWalletBalance() throws ForeignBlockchainException { + String xprv58 = getDeterministicKey58(); + + Long balance = bitcoiny.getWalletBalance(xprv58); + + assertNotNull(balance); + + System.out.println(bitcoiny.format(balance)); + + // Check spent key caching doesn't affect outcome + + Long repeatBalance = bitcoiny.getWalletBalance(xprv58); + + assertNotNull(repeatBalance); + + System.out.println(bitcoiny.format(repeatBalance)); + + assertEquals(balance, repeatBalance); + } + + @Test + public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { + String xprv58 = getDeterministicKey58(); + + String address = bitcoiny.getUnusedReceiveAddress(xprv58); + + assertNotNull(address); + + System.out.println(address); + } + +} diff --git a/src/test/java/org/qortal/test/crosschain/DigibyteTests.java b/src/test/java/org/qortal/test/crosschain/DigibyteTests.java index dbe81c82..d95f1bd5 100644 --- a/src/test/java/org/qortal/test/crosschain/DigibyteTests.java +++ b/src/test/java/org/qortal/test/crosschain/DigibyteTests.java @@ -1,115 +1,48 @@ package org.qortal.test.crosschain; -import static org.junit.Assert.*; - -import java.util.Arrays; - -import org.bitcoinj.core.Transaction; -import org.bitcoinj.store.BlockStoreException; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.qortal.crosschain.ForeignBlockchainException; +import org.qortal.crosschain.Bitcoiny; import org.qortal.crosschain.Digibyte; -import org.qortal.crosschain.BitcoinyHTLC; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; -public class DigibyteTests extends Common { +public class DigibyteTests extends BitcoinyTests { - private Digibyte digibyte; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); // TestNet3 - digibyte = Digibyte.getInstance(); + @Override + protected String getCoinName() { + return "Digibyte"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "DGB"; + } + + @Override + protected Bitcoiny getCoin() { + return Digibyte.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Digibyte.resetForTesting(); - digibyte = null; } - @Test - public void testGetMedianBlockTime() throws BlockStoreException, ForeignBlockchainException { - long before = System.currentTimeMillis(); - System.out.println(String.format("Digibyte median blocktime: %d", digibyte.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); + @Override + protected String getDeterministicKey58() { + return "xpub661MyMwAqRbcEnabTLX5uebYcsE3uG5y7ve9jn1VK8iY1MaU3YLoLJEe8sTu2YVav5Zka5qf2dmMssfxmXJTqZnazZL2kL7M2tNKwEoC34R"; + } - System.out.println(String.format("Digibyte median blocktime: %d", digibyte.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); - - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + @Override + protected String getRecipient() { + return "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; } @Test @Ignore(value = "Doesn't work, to be fixed later") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(digibyte, p2shAddress); - - assertNotNull("secret not found", secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } + public void testFindHtlcSecret() {} @Test @Ignore(value = "No testnet nodes available, so we can't regularly test buildSpend yet") - public void testBuildSpend() { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; + public void testBuildSpend() {} - String recipient = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - long amount = 1000L; - - Transaction transaction = digibyte.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - - // Check spent key caching doesn't affect outcome - - transaction = digibyte.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); } - - @Test - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "xpub661MyMwAqRbcEnabTLX5uebYcsE3uG5y7ve9jn1VK8iY1MaU3YLoLJEe8sTu2YVav5Zka5qf2dmMssfxmXJTqZnazZL2kL7M2tNKwEoC34R"; - - Long balance = digibyte.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(digibyte.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = digibyte.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(digibyte.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } - - @Test - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "xpub661MyMwAqRbcEnabTLX5uebYcsE3uG5y7ve9jn1VK8iY1MaU3YLoLJEe8sTu2YVav5Zka5qf2dmMssfxmXJTqZnazZL2kL7M2tNKwEoC34R"; - - String address = digibyte.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - -} diff --git a/src/test/java/org/qortal/test/crosschain/DogecoinTests.java b/src/test/java/org/qortal/test/crosschain/DogecoinTests.java index 6c070d09..62982437 100644 --- a/src/test/java/org/qortal/test/crosschain/DogecoinTests.java +++ b/src/test/java/org/qortal/test/crosschain/DogecoinTests.java @@ -1,115 +1,47 @@ package org.qortal.test.crosschain; -import org.bitcoinj.core.Transaction; -import org.bitcoinj.store.BlockStoreException; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.qortal.crosschain.BitcoinyHTLC; -import org.qortal.crosschain.ForeignBlockchainException; +import org.qortal.crosschain.Bitcoiny; import org.qortal.crosschain.Dogecoin; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; -import java.util.Arrays; +public class DogecoinTests extends BitcoinyTests { -import static org.junit.Assert.*; - -public class DogecoinTests extends Common { - - private Dogecoin dogecoin; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); // TestNet3 - dogecoin = Dogecoin.getInstance(); + @Override + protected String getCoinName() { + return "Dogecoin"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "DOGE"; + } + + @Override + protected Bitcoiny getCoin() { + return Dogecoin.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Dogecoin.resetForTesting(); - dogecoin = null; } - @Test - public void testGetMedianBlockTime() throws BlockStoreException, ForeignBlockchainException { - long before = System.currentTimeMillis(); - System.out.println(String.format("Dogecoin median blocktime: %d", dogecoin.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); + @Override + protected String getDeterministicKey58() { + return "dgpv51eADS3spNJh9drNeW1Tc1P9z2LyaQRXPBortsq6yice1k47C2u2Prvgxycr2ihNBWzKZ2LthcBBGiYkWZ69KUTVkcLVbnjq7pD8mnApEru"; + } - System.out.println(String.format("Dogecoin median blocktime: %d", dogecoin.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); - - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + @Override + protected String getRecipient() { + return null; } @Test @Ignore(value = "Doesn't work, to be fixed later") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(dogecoin, p2shAddress); - - assertNotNull("secret not found", secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } + public void testFindHtlcSecret() {} @Test @Ignore(value = "No testnet nodes available, so we can't regularly test buildSpend yet") - public void testBuildSpend() { - String xprv58 = "dgpv51eADS3spNJh9drNeW1Tc1P9z2LyaQRXPBortsq6yice1k47C2u2Prvgxycr2ihNBWzKZ2LthcBBGiYkWZ69KUTVkcLVbnjq7pD8mnApEru"; - - String recipient = "DP1iFao33xdEPa5vaArpj7sykfzKNeiJeX"; - long amount = 1000L; - - Transaction transaction = dogecoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - - // Check spent key caching doesn't affect outcome - - transaction = dogecoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - } - - @Test - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "dgpv51eADS3spNJh9drNeW1Tc1P9z2LyaQRXPBortsq6yice1k47C2u2Prvgxycr2ihNBWzKZ2LthcBBGiYkWZ69KUTVkcLVbnjq7pD8mnApEru"; - - Long balance = dogecoin.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(dogecoin.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = dogecoin.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(dogecoin.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } - - @Test - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "dgpv51eADS3spNJh9drNeW1Tc1P9z2LyaQRXPBortsq6yice1k47C2u2Prvgxycr2ihNBWzKZ2LthcBBGiYkWZ69KUTVkcLVbnjq7pD8mnApEru"; - - String address = dogecoin.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - + public void testBuildSpend() {} } diff --git a/src/test/java/org/qortal/test/crosschain/LitecoinTests.java b/src/test/java/org/qortal/test/crosschain/LitecoinTests.java index 5ea7bc95..66c631e5 100644 --- a/src/test/java/org/qortal/test/crosschain/LitecoinTests.java +++ b/src/test/java/org/qortal/test/crosschain/LitecoinTests.java @@ -1,113 +1,43 @@ package org.qortal.test.crosschain; -import static org.junit.Assert.*; - -import java.util.Arrays; - -import org.bitcoinj.core.Transaction; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.qortal.crosschain.ForeignBlockchainException; +import org.qortal.crosschain.Bitcoiny; import org.qortal.crosschain.Litecoin; -import org.qortal.crosschain.BitcoinyHTLC; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; -public class LitecoinTests extends Common { +public class LitecoinTests extends BitcoinyTests { - private Litecoin litecoin; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); // TestNet3 - litecoin = Litecoin.getInstance(); + @Override + protected String getCoinName() { + return "Litecoin"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "LTC"; + } + + @Override + protected Bitcoiny getCoin() { + return Litecoin.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Litecoin.resetForTesting(); - litecoin = null; } - @Test - public void testGetMedianBlockTime() throws ForeignBlockchainException { - long before = System.currentTimeMillis(); - System.out.println(String.format("Litecoin median blocktime: %d", litecoin.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); + @Override + protected String getDeterministicKey58() { + return "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; + } - System.out.println(String.format("Litecoin median blocktime: %d", litecoin.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); - - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + @Override + protected String getRecipient() { + return "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; } @Test @Ignore(value = "Doesn't work, to be fixed later") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(litecoin, p2shAddress); - - assertNotNull("secret not found", secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } - - @Test - public void testBuildSpend() { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String recipient = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - long amount = 1000L; - - Transaction transaction = litecoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - - // Check spent key caching doesn't affect outcome - - transaction = litecoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - } - - @Test - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - Long balance = litecoin.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(litecoin.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = litecoin.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(litecoin.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } - - @Test - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String address = litecoin.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - + public void testFindHtlcSecret() {} } diff --git a/src/test/java/org/qortal/test/crosschain/PirateChainTests.java b/src/test/java/org/qortal/test/crosschain/PirateChainTests.java index 9502e45a..b212aea1 100644 --- a/src/test/java/org/qortal/test/crosschain/PirateChainTests.java +++ b/src/test/java/org/qortal/test/crosschain/PirateChainTests.java @@ -3,57 +3,53 @@ package org.qortal.test.crosschain; import cash.z.wallet.sdk.rpc.CompactFormats.*; import com.google.common.hash.HashCode; import com.google.common.primitives.Bytes; -import org.bitcoinj.core.Transaction; -import org.bitcoinj.store.BlockStoreException; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.qortal.controller.tradebot.TradeBot; import org.qortal.crosschain.*; import org.qortal.crypto.Crypto; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; import org.qortal.transform.TransformationException; -import java.util.Arrays; import java.util.List; import static org.junit.Assert.*; import static org.qortal.crosschain.BitcoinyHTLC.Status.*; -public class PirateChainTests extends Common { +public class PirateChainTests extends BitcoinyTests { - private PirateChain pirateChain; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); - pirateChain = PirateChain.getInstance(); + @Override + protected String getCoinName() { + return "PirateChain"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "ARRR"; + } + + @Override + protected Bitcoiny getCoin() { + return PirateChain.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Litecoin.resetForTesting(); - pirateChain = null; } - @Test - public void testGetMedianBlockTime() throws BlockStoreException, ForeignBlockchainException { - long before = System.currentTimeMillis(); - System.out.println(String.format("Pirate Chain median blocktime: %d", pirateChain.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); + @Override + protected String getDeterministicKey58() { + return null; + } - System.out.println(String.format("Pirate Chain median blocktime: %d", pirateChain.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); + @Override + protected String getRecipient() { + return null; + } - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("1st call should take less than 5 seconds", firstPeriod < 5000L); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + public void makeGetMedianBlockTimeAssertions(long firstPeriod, long secondPeriod) { + assertTrue("1st call should take less than 5 seconds", firstPeriod < 5000L); + assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); } @Test @@ -62,7 +58,7 @@ public class PirateChainTests extends Common { int count = 20; long before = System.currentTimeMillis(); - List compactBlocks = pirateChain.getCompactBlocks(startHeight, count); + List compactBlocks = ((PirateChain) bitcoiny).getCompactBlocks(startHeight, count); long after = System.currentTimeMillis(); System.out.println(String.format("Retrieval took: %d ms", after-before)); @@ -82,7 +78,7 @@ public class PirateChainTests extends Common { Bytes.reverse(txBytes); String txHashBE = HashCode.fromBytes(txBytes).toString(); - byte[] rawTransaction = pirateChain.getBlockchainProvider().getRawTransaction(txHashBE); + byte[] rawTransaction = bitcoiny.getBlockchainProvider().getRawTransaction(txHashBE); assertNotNull(rawTransaction); } @@ -121,7 +117,7 @@ public class PirateChainTests extends Common { String p2shAddress = "ba6Q5HWrWtmfU2WZqQbrFdRYsafA45cUAt"; long p2shFee = 10000; final long minimumAmount = 10000 + p2shFee; - BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(pirateChain.getBlockchainProvider(), p2shAddress, minimumAmount); + BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(bitcoiny.getBlockchainProvider(), p2shAddress, minimumAmount); assertEquals(FUNDED, htlcStatus); } @@ -130,7 +126,7 @@ public class PirateChainTests extends Common { String p2shAddress = "bYZrzSSgGp8aEGvihukoMGU8sXYrx19Wka"; long p2shFee = 10000; final long minimumAmount = 10000 + p2shFee; - BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(pirateChain.getBlockchainProvider(), p2shAddress, minimumAmount); + BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(bitcoiny.getBlockchainProvider(), p2shAddress, minimumAmount); assertEquals(REDEEMED, htlcStatus); } @@ -139,14 +135,14 @@ public class PirateChainTests extends Common { String p2shAddress = "bE49izfVxz8odhu8c2BcUaVFUnt7NLFRgv"; long p2shFee = 10000; final long minimumAmount = 10000 + p2shFee; - BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(pirateChain.getBlockchainProvider(), p2shAddress, minimumAmount); + BitcoinyHTLC.Status htlcStatus = PirateChainHTLC.determineHtlcStatus(bitcoiny.getBlockchainProvider(), p2shAddress, minimumAmount); assertEquals(REFUNDED, htlcStatus); } @Test public void testGetTxidForUnspentAddress() throws ForeignBlockchainException { String p2shAddress = "ba6Q5HWrWtmfU2WZqQbrFdRYsafA45cUAt"; - String txid = PirateChainHTLC.getFundingTxid(pirateChain.getBlockchainProvider(), p2shAddress); + String txid = PirateChainHTLC.getFundingTxid(bitcoiny.getBlockchainProvider(), p2shAddress); // Reverse the byte order of the txid used by block explorers, to get to big-endian form byte[] expectedTxidLE = HashCode.fromString("fea4b0c1abcf8f0f3ddc2fa2f9438501ee102aad62a9ff18a5ce7d08774755c0").asBytes(); @@ -161,7 +157,7 @@ public class PirateChainTests extends Common { String p2shAddress = "ba6Q5HWrWtmfU2WZqQbrFdRYsafA45cUAt"; long p2shFee = 10000; final long minimumAmount = 10000 + p2shFee; - String txid = PirateChainHTLC.getUnspentFundingTxid(pirateChain.getBlockchainProvider(), p2shAddress, minimumAmount); + String txid = PirateChainHTLC.getUnspentFundingTxid(bitcoiny.getBlockchainProvider(), p2shAddress, minimumAmount); // Reverse the byte order of the txid used by block explorers, to get to big-endian form byte[] expectedTxidLE = HashCode.fromString("fea4b0c1abcf8f0f3ddc2fa2f9438501ee102aad62a9ff18a5ce7d08774755c0").asBytes(); @@ -174,7 +170,7 @@ public class PirateChainTests extends Common { @Test public void testGetTxidForSpentAddress() throws ForeignBlockchainException { String p2shAddress = "bE49izfVxz8odhu8c2BcUaVFUnt7NLFRgv"; //"t3KtVxeEb8srJofo6atMEpMpEP6TjEi8VqA"; - String txid = PirateChainHTLC.getFundingTxid(pirateChain.getBlockchainProvider(), p2shAddress); + String txid = PirateChainHTLC.getFundingTxid(bitcoiny.getBlockchainProvider(), p2shAddress); // Reverse the byte order of the txid used by block explorers, to get to big-endian form byte[] expectedTxidLE = HashCode.fromString("fb386fc8eea0fbf3ea37047726b92c39441652b32d8d62a274331687f7a1eca8").asBytes(); @@ -187,7 +183,7 @@ public class PirateChainTests extends Common { @Test public void testGetTransactionsForAddress() throws ForeignBlockchainException { String p2shAddress = "bE49izfVxz8odhu8c2BcUaVFUnt7NLFRgv"; //"t3KtVxeEb8srJofo6atMEpMpEP6TjEi8VqA"; - List transactions = pirateChain.getBlockchainProvider() + List transactions = bitcoiny.getBlockchainProvider() .getAddressBitcoinyTransactions(p2shAddress, false); assertEquals(2, transactions.size()); @@ -232,66 +228,17 @@ public class PirateChainTests extends Common { @Test @Ignore(value = "Doesn't work, to be fixed later") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(pirateChain, p2shAddress); - - assertNotNull("secret not found", secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } + public void testFindHtlcSecret() {} @Test @Ignore(value = "Needs adapting for Pirate Chain") - public void testBuildSpend() { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String recipient = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - long amount = 1000L; - - Transaction transaction = pirateChain.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - - // Check spent key caching doesn't affect outcome - - transaction = pirateChain.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - } + public void testBuildSpend() {} @Test @Ignore(value = "Needs adapting for Pirate Chain") - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - Long balance = pirateChain.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(pirateChain.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = pirateChain.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(pirateChain.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } + public void testGetWalletBalance() {} @Test @Ignore(value = "Needs adapting for Pirate Chain") - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String address = pirateChain.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - -} + public void testGetUnusedReceiveAddress() {} +} \ No newline at end of file diff --git a/src/test/java/org/qortal/test/crosschain/RavencoinTests.java b/src/test/java/org/qortal/test/crosschain/RavencoinTests.java index 866c41a2..d7581f74 100644 --- a/src/test/java/org/qortal/test/crosschain/RavencoinTests.java +++ b/src/test/java/org/qortal/test/crosschain/RavencoinTests.java @@ -1,115 +1,47 @@ package org.qortal.test.crosschain; -import static org.junit.Assert.*; - -import java.util.Arrays; - -import org.bitcoinj.core.Transaction; -import org.bitcoinj.store.BlockStoreException; -import org.junit.After; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.qortal.crosschain.ForeignBlockchainException; +import org.qortal.crosschain.Bitcoiny; import org.qortal.crosschain.Ravencoin; -import org.qortal.crosschain.BitcoinyHTLC; -import org.qortal.repository.DataException; -import org.qortal.test.common.Common; -public class RavencoinTests extends Common { +public class RavencoinTests extends BitcoinyTests { - private Ravencoin ravencoin; - - @Before - public void beforeTest() throws DataException { - Common.useDefaultSettings(); // TestNet3 - ravencoin = Ravencoin.getInstance(); + @Override + protected String getCoinName() { + return "Ravencoin"; } - @After - public void afterTest() { + @Override + protected String getCoinSymbol() { + return "RVN"; + } + + @Override + protected Bitcoiny getCoin() { + return Ravencoin.getInstance(); + } + + @Override + protected void resetCoinForTesting() { Ravencoin.resetForTesting(); - ravencoin = null; } - @Test - public void testGetMedianBlockTime() throws BlockStoreException, ForeignBlockchainException { - long before = System.currentTimeMillis(); - System.out.println(String.format("Ravencoin median blocktime: %d", ravencoin.getMedianBlockTime())); - long afterFirst = System.currentTimeMillis(); + @Override + protected String getDeterministicKey58() { + return "xpub661MyMwAqRbcEt3Ge1wNmkagyb1J7yTQu4Kquvy77Ycg2iPoh7Urg8s9Jdwp7YmrqGkDKJpUVjsZXSSsQgmAVUC17ZVQQeoWMzm7vDTt1y7"; + } - System.out.println(String.format("Ravencoin median blocktime: %d", ravencoin.getMedianBlockTime())); - long afterSecond = System.currentTimeMillis(); - - long firstPeriod = afterFirst - before; - long secondPeriod = afterSecond - afterFirst; - - System.out.println(String.format("1st call: %d ms, 2nd call: %d ms", firstPeriod, secondPeriod)); - - assertTrue("2nd call should be quicker than 1st", secondPeriod < firstPeriod); - assertTrue("2nd call should take less than 5 seconds", secondPeriod < 5000L); + @Override + protected String getRecipient() { + return null; } @Test @Ignore(value = "Doesn't work, to be fixed later") - public void testFindHtlcSecret() throws ForeignBlockchainException { - // This actually exists on TEST3 but can take a while to fetch - String p2shAddress = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - - byte[] expectedSecret = "This string is exactly 32 bytes!".getBytes(); - byte[] secret = BitcoinyHTLC.findHtlcSecret(ravencoin, p2shAddress); - - assertNotNull("secret not found", secret); - assertTrue("secret incorrect", Arrays.equals(expectedSecret, secret)); - } + public void testFindHtlcSecret() {} @Test @Ignore(value = "No testnet nodes available, so we can't regularly test buildSpend yet") - public void testBuildSpend() { - String xprv58 = "tprv8ZgxMBicQKsPdahhFSrCdvC1bsWyzHHZfTneTVqUXN6s1wEtZLwAkZXzFP6TYLg2aQMecZLXLre5bTVGajEB55L1HYJcawpdFG66STVAWPJ"; - - String recipient = "2N8WCg52ULCtDSMjkgVTm5mtPdCsUptkHWE"; - long amount = 1000L; - - Transaction transaction = ravencoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - - // Check spent key caching doesn't affect outcome - - transaction = ravencoin.buildSpend(xprv58, recipient, amount); - assertNotNull("insufficient funds", transaction); - } - - @Test - public void testGetWalletBalance() throws ForeignBlockchainException { - String xprv58 = "xpub661MyMwAqRbcEt3Ge1wNmkagyb1J7yTQu4Kquvy77Ycg2iPoh7Urg8s9Jdwp7YmrqGkDKJpUVjsZXSSsQgmAVUC17ZVQQeoWMzm7vDTt1y7"; - - Long balance = ravencoin.getWalletBalance(xprv58); - - assertNotNull(balance); - - System.out.println(ravencoin.format(balance)); - - // Check spent key caching doesn't affect outcome - - Long repeatBalance = ravencoin.getWalletBalance(xprv58); - - assertNotNull(repeatBalance); - - System.out.println(ravencoin.format(repeatBalance)); - - assertEquals(balance, repeatBalance); - } - - @Test - public void testGetUnusedReceiveAddress() throws ForeignBlockchainException { - String xprv58 = "xpub661MyMwAqRbcEt3Ge1wNmkagyb1J7yTQu4Kquvy77Ycg2iPoh7Urg8s9Jdwp7YmrqGkDKJpUVjsZXSSsQgmAVUC17ZVQQeoWMzm7vDTt1y7"; - - String address = ravencoin.getUnusedReceiveAddress(xprv58); - - assertNotNull(address); - - System.out.println(address); - } - + public void testBuildSpend() {} }