Create tests

This commit is contained in:
Aelita4 2023-01-26 21:05:37 +01:00
parent b791bef037
commit 098e21c3ec
8 changed files with 262 additions and 1 deletions

View File

@ -14,5 +14,15 @@
<orderEntry type="library" name="mysql.connector.java" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.30" level="project" />
<orderEntry type="library" name="Maven: com.github.davidmoten:commons-csv:1.6.002" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.9.2" level="project" />
</component>
</module>

12
pom.xml
View File

@ -25,5 +25,17 @@
<artifactId>commons-csv</artifactId>
<version>1.6.002</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -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<Transaction> 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<Transaction> 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<Transaction> 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);
}
}

View File

@ -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<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> 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
}
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -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<Map<String, Object>> rows = db.query("SELECT * FROM test");
int numRows = rows.size();
assertEquals(0, numRows);
}
@Test
void insertAndDelete() {
DatabaseConnection db = new DatabaseConnection();
List<Map<String, Object>> before = db.query("SELECT * FROM test");
int numRowsBefore = before.size();
db.update("INSERT INTO test VALUES (null, 'aaa')");
List<Map<String, Object>> rowsAfter = db.query("SELECT * FROM test");
int numRowsAfter = rowsAfter.size();
assertEquals(numRowsBefore + 1, numRowsAfter);
db.update("DELETE FROM test");
List<Map<String, Object>> rowsDeleted = db.query("SELECT * FROM test");
int numRowsDeleted = rowsDeleted.size();
assertEquals(numRowsAfter - 1, numRowsDeleted);
}
}