Added SellNameTransactions + tests

This commit is contained in:
catbref
2018-07-02 18:09:36 +01:00
parent c79bec90bc
commit 0fc17d76ae
11 changed files with 461 additions and 9 deletions

View File

@@ -59,11 +59,14 @@ public class LoadTests extends Common {
if (transactionData == null)
break;
if (transactionData.getType() != TransactionType.PAYMENT)
break;
PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData;
System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount()
+ " QORA to " + paymentTransactionData.getRecipient());
signature = paymentTransactionData.getReference();
signature = transactionData.getReference();
}
}
}

View File

@@ -99,6 +99,11 @@ public class SerializationTests extends Common {
testSpecificBlockTransactions(673, TransactionType.UPDATE_NAME);
}
@Test
public void testSellNameSerialization() throws TransformationException, DataException {
testSpecificBlockTransactions(673, TransactionType.SELL_NAME);
}
@Test
public void testCreatePollSerialization() throws TransformationException, DataException {
// Block 10537 has only create poll transactions

View File

@@ -19,6 +19,7 @@ import data.naming.NameData;
import data.transaction.CreatePollTransactionData;
import data.transaction.PaymentTransactionData;
import data.transaction.RegisterNameTransactionData;
import data.transaction.SellNameTransactionData;
import data.transaction.UpdateNameTransactionData;
import data.transaction.VoteOnPollTransactionData;
import data.voting.PollData;
@@ -33,6 +34,7 @@ import qora.block.BlockChain;
import qora.transaction.CreatePollTransaction;
import qora.transaction.PaymentTransaction;
import qora.transaction.RegisterNameTransaction;
import qora.transaction.SellNameTransaction;
import qora.transaction.Transaction;
import qora.transaction.Transaction.ValidationResult;
import qora.transaction.UpdateNameTransaction;
@@ -208,7 +210,7 @@ public class TransactionTests {
}
@Test
public void testUpdateNamesTransaction() throws DataException {
public void testUpdateNameTransaction() throws DataException {
// Register name using another test
testRegisterNameTransaction();
@@ -256,6 +258,51 @@ public class TransactionTests {
assertEquals(originalNameData.getData(), actualNameData.getData());
}
@Test
public void testSellNameTransaction() throws DataException {
// Register name using another test
testRegisterNameTransaction();
String name = "test name";
// Sale price
BigDecimal amount = BigDecimal.valueOf(1234L).setScale(8);
BigDecimal fee = BigDecimal.ONE;
long timestamp = parentBlockData.getTimestamp() + 2_000;
SellNameTransactionData sellNameTransactionData = new SellNameTransactionData(sender.getPublicKey(), name, amount, fee, timestamp, reference);
Transaction sellNameTransaction = new SellNameTransaction(repository, sellNameTransactionData);
sellNameTransaction.calcSignature(sender);
assertTrue(sellNameTransaction.isSignatureValid());
assertEquals(ValidationResult.OK, sellNameTransaction.isValid());
// Forge new block with transaction
Block block = new Block(repository, parentBlockData, generator, null, null);
block.addTransaction(sellNameTransactionData);
block.sign();
assertTrue("Block signatures invalid", block.isSignatureValid());
assertEquals("Block is invalid", Block.ValidationResult.OK, block.isValid());
block.process();
repository.saveChanges();
// Check name was updated
NameData actualNameData = this.repository.getNameRepository().fromName(name);
assertTrue(actualNameData.getIsForSale());
assertEquals(amount, actualNameData.getSalePrice());
// Now orphan block
block.orphan();
repository.saveChanges();
// Check name has been reverted correctly
actualNameData = this.repository.getNameRepository().fromName(name);
assertFalse(actualNameData.getIsForSale());
assertNull(actualNameData.getSalePrice());
}
@Test
public void testCreatePollTransaction() throws DataException {
// This test requires GenesisBlock's timestamp is set to something after BlockChain.VOTING_RELEASE_TIMESTAMP