diff --git a/DzieCoin.iml b/DzieCoin.iml index 23fef75..b3d20bc 100644 --- a/DzieCoin.iml +++ b/DzieCoin.iml @@ -14,5 +14,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 190571a..5721e49 100644 --- a/pom.xml +++ b/pom.xml @@ -25,5 +25,17 @@ commons-csv 1.6.002 + + junit + junit + RELEASE + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + \ No newline at end of file diff --git a/src/main/java/pl/mikorosa/dziecoin/NFT.java b/src/main/java/pl/mikorosa/dziecoin/NFT.java index 0e161b8..9c0904e 100644 --- a/src/main/java/pl/mikorosa/dziecoin/NFT.java +++ b/src/main/java/pl/mikorosa/dziecoin/NFT.java @@ -21,7 +21,7 @@ public class NFT extends BlockData { public String getContract() { return contract; } - + public String getData() { return data; } diff --git a/src/test/java/pl/mikorosa/dziecoin/BlockTest.java b/src/test/java/pl/mikorosa/dziecoin/BlockTest.java new file mode 100644 index 0000000..c7eb271 --- /dev/null +++ b/src/test/java/pl/mikorosa/dziecoin/BlockTest.java @@ -0,0 +1,58 @@ +package pl.mikorosa.dziecoin; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class BlockTest { + @Test + void mineBlock() { + Main.difficulty = 4; + + List transactions = new ArrayList<>(); + transactions.add(new Transaction("1", "2", 1)); + + Block block = new Block("0", 1, transactions); + block.mineBlock(); + + assertEquals(168149, block.getNonce()); + assertEquals("0000e4942b486fa4779fadc32a1d0dd483e117aa57bc84f6ff5912f9abefef0e", block.getHash()); + } + + @Test + void alterBlock() { + Main.difficulty = 2; + + List transactions = new ArrayList<>(); + transactions.add(new Transaction("1", "2", 1)); + + Block block = new Block("0", 1, transactions); + block.mineBlock(); + + block.getTransactions().add(new Transaction("2", "1", 1)); + + Block.VerifyCodes status = block.verifyBlock(); + + assertEquals(Block.VerifyCodes.INVALID_BLOCK_HASH, status); + } + + @Test + void invalidProofOfWork() { + Main.difficulty = 2; + + List transactions = new ArrayList<>(); + transactions.add(new Transaction("1", "2", 1)); + + Block block = new Block("0", 1, transactions); + block.mineBlock(); + + Main.difficulty = 4; + + Block.VerifyCodes status = block.verifyBlock(); + + assertEquals(Block.VerifyCodes.INVALID_POW_SIGNATURE, status); + } +} \ No newline at end of file diff --git a/src/test/java/pl/mikorosa/dziecoin/BlockchainTest.java b/src/test/java/pl/mikorosa/dziecoin/BlockchainTest.java new file mode 100644 index 0000000..f719966 --- /dev/null +++ b/src/test/java/pl/mikorosa/dziecoin/BlockchainTest.java @@ -0,0 +1,105 @@ +package pl.mikorosa.dziecoin; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class BlockchainTest { + @Test + void blockchainIntegrity() { + Main.difficulty = 2; + Blockchain b = new Blockchain("1", false); + + List transactions1 = new ArrayList<>(); + transactions1.add(new Transaction("1", "2", 1)); + + Block block1 = new Block(b.getLatestBlock().getHash(), 2, transactions1); + block1.mineBlock(); + + try { + b.addBlock(block1); + } catch(BlockchainIntegrityException e) { + e.printStackTrace(); + fail(); + } + + List transactions2 = new ArrayList<>(); + transactions2.add(new Transaction("2", "3", 1)); + + Block block2 = new Block(block1.getHash(), 3, transactions2); + block2.mineBlock(); + + try { + b.addBlock(block2); + } catch (BlockchainIntegrityException e) { + fail(); + } + } + + @Test + void blockchainVerify() { + Main.difficulty = 2; + Blockchain b = new Blockchain("1", false); + + List transactions1 = new ArrayList<>(); + transactions1.add(new Transaction("1", "2", 1)); + + Block block1 = new Block(b.getLatestBlock().getHash(), 2, transactions1); + block1.mineBlock(); + + try { + b.addBlock(block1); + } catch(BlockchainIntegrityException e) { + e.printStackTrace(); + fail(); + } + + List transactions2 = new ArrayList<>(); + transactions2.add(new Transaction("2", "3", 1)); + + Block block2 = new Block(block1.getHash(), 3, transactions2); + block2.mineBlock(); + + try { + b.addBlock(block2); + } catch (BlockchainIntegrityException e) { + fail(); + } + + assertTrue(b.validateChain() == Block.VerifyCodes.SUCCESS); + } + + @Test + void blockchainIntegrityExceptionThrown() { + Main.difficulty = 2; + Blockchain b = new Blockchain("1", false); + + List transactions1 = new ArrayList<>(); + transactions1.add(new Transaction("1", "2", 1)); + + Block block1 = new Block(b.getLatestBlock().getHash(), 2, transactions1); + block1.mineBlock(); + + try { + b.addBlock(block1); + } catch(BlockchainIntegrityException e) { + e.printStackTrace(); + fail(); + } + + List transactions2 = new ArrayList<>(); + transactions2.add(new Transaction("2", "3", 1)); + + Block block2 = new Block("asdf", 3, transactions2); + block2.mineBlock(); + + try { + b.addBlock(block2); + } catch (BlockchainIntegrityException e) { + return; // pass + } + } +} \ No newline at end of file diff --git a/src/test/java/pl/mikorosa/dziecoin/CalculateHashTest.java b/src/test/java/pl/mikorosa/dziecoin/CalculateHashTest.java new file mode 100644 index 0000000..4c1a4ae --- /dev/null +++ b/src/test/java/pl/mikorosa/dziecoin/CalculateHashTest.java @@ -0,0 +1,18 @@ +package pl.mikorosa.dziecoin; + +import static org.junit.jupiter.api.Assertions.*; + +class CalculateHashTest { + + @org.junit.jupiter.api.Test + void sha256sum() { + String resultingHash = CalculateHash.sha256sum("testing"); + assertEquals("cf80cd8aed482d5d1527d7dc72fceff84e6326592848447d2dc0b0e87dfc9a90", resultingHash); + } + + @org.junit.jupiter.api.Test + void md5sum() { + String resultingHash = CalculateHash.md5sum("testing"); + assertEquals("ae2b1fca515949e5d54fb22b8ed95575", resultingHash); + } +} \ No newline at end of file diff --git a/src/test/java/pl/mikorosa/dziecoin/NFTTest.java b/src/test/java/pl/mikorosa/dziecoin/NFTTest.java new file mode 100644 index 0000000..067ad75 --- /dev/null +++ b/src/test/java/pl/mikorosa/dziecoin/NFTTest.java @@ -0,0 +1,16 @@ +package pl.mikorosa.dziecoin; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class NFTTest { + @Test + void NFTContractGen() { + NFT nft = new NFT("stevejobs", "test"); + + String hash = CalculateHash.md5sum("stevejobstest"); + + assertEquals(hash, nft.getContract()); + } +} \ No newline at end of file diff --git a/src/test/java/pl/mikorosa/dziecoin/database/DatabaseConnectionTest.java b/src/test/java/pl/mikorosa/dziecoin/database/DatabaseConnectionTest.java new file mode 100644 index 0000000..93e229a --- /dev/null +++ b/src/test/java/pl/mikorosa/dziecoin/database/DatabaseConnectionTest.java @@ -0,0 +1,42 @@ +package pl.mikorosa.dziecoin.database; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class DatabaseConnectionTest { + + @Test + void select() { + DatabaseConnection db = new DatabaseConnection(); + List> rows = db.query("SELECT * FROM test"); + int numRows = rows.size(); + + assertEquals(0, numRows); + } + + @Test + void insertAndDelete() { + DatabaseConnection db = new DatabaseConnection(); + + List> before = db.query("SELECT * FROM test"); + int numRowsBefore = before.size(); + + db.update("INSERT INTO test VALUES (null, 'aaa')"); + + List> rowsAfter = db.query("SELECT * FROM test"); + int numRowsAfter = rowsAfter.size(); + + assertEquals(numRowsBefore + 1, numRowsAfter); + + db.update("DELETE FROM test"); + + List> rowsDeleted = db.query("SELECT * FROM test"); + int numRowsDeleted = rowsDeleted.size(); + + assertEquals(numRowsAfter - 1, numRowsDeleted); + } +} \ No newline at end of file