forked from Qortal/qortal
CalDescent
3 years ago
2 changed files with 85 additions and 0 deletions
@ -0,0 +1,81 @@
|
||||
package org.qortal.test.arbitrary; |
||||
|
||||
import org.apache.commons.lang3.reflect.FieldUtils; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.qortal.account.PrivateKeyAccount; |
||||
import org.qortal.arbitrary.ArbitraryDataFile; |
||||
import org.qortal.arbitrary.exception.MissingDataException; |
||||
import org.qortal.arbitrary.misc.Service; |
||||
import org.qortal.controller.arbitrary.ArbitraryDataManager; |
||||
import org.qortal.data.transaction.ArbitraryTransactionData; |
||||
import org.qortal.data.transaction.RegisterNameTransactionData; |
||||
import org.qortal.data.transaction.TransactionData; |
||||
import org.qortal.repository.DataException; |
||||
import org.qortal.repository.Repository; |
||||
import org.qortal.repository.RepositoryManager; |
||||
import org.qortal.test.common.ArbitraryUtils; |
||||
import org.qortal.test.common.Common; |
||||
import org.qortal.test.common.TransactionUtils; |
||||
import org.qortal.test.common.transaction.TestTransaction; |
||||
import org.qortal.transaction.ArbitraryTransaction; |
||||
import org.qortal.utils.Base58; |
||||
|
||||
import java.io.IOException; |
||||
import java.nio.file.Path; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
public class ArbitraryTransactionTests extends Common { |
||||
|
||||
@Before |
||||
public void beforeTest() throws DataException, IllegalAccessException { |
||||
Common.useDefaultSettings(); |
||||
} |
||||
|
||||
@Test |
||||
public void testDifficultyTooLow() throws IllegalAccessException, DataException, IOException, MissingDataException { |
||||
try (final Repository repository = RepositoryManager.getRepository()) { |
||||
PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); |
||||
String publicKey58 = Base58.encode(alice.getPublicKey()); |
||||
String name = "TEST"; // Can be anything for this test
|
||||
String identifier = null; // Not used for this test
|
||||
Service service = Service.ARBITRARY_DATA; |
||||
int chunkSize = 100; |
||||
int dataLength = 900; // Actual data length will be longer due to encryption
|
||||
|
||||
// Register the name to Alice
|
||||
RegisterNameTransactionData registerNameTransactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, ""); |
||||
TransactionUtils.signAndMint(repository, registerNameTransactionData, alice); |
||||
|
||||
// Set difficulty to 1
|
||||
FieldUtils.writeField(ArbitraryDataManager.getInstance(), "powDifficulty", 1, true); |
||||
|
||||
// Create PUT transaction
|
||||
Path path1 = ArbitraryUtils.generateRandomDataPath(dataLength); |
||||
ArbitraryDataFile arbitraryDataFile = ArbitraryUtils.createAndMintTxn(repository, publicKey58, path1, name, identifier, ArbitraryTransactionData.Method.PUT, service, alice, chunkSize); |
||||
|
||||
// Check that nonce validation succeeds
|
||||
byte[] signature = arbitraryDataFile.getSignature(); |
||||
TransactionData transactionData = repository.getTransactionRepository().fromSignature(signature); |
||||
ArbitraryTransaction transaction = new ArbitraryTransaction(repository, transactionData); |
||||
assertTrue(transaction.isSignatureValid()); |
||||
|
||||
// Increase difficulty to 15
|
||||
FieldUtils.writeField(ArbitraryDataManager.getInstance(), "powDifficulty", 15, true); |
||||
|
||||
// Make sure the nonce validation fails
|
||||
// Note: there is a very tiny chance this could succeed due to being extremely lucky
|
||||
// and finding a high difficulty nonce in the first couple of cycles. It will be rare
|
||||
// enough that we shouldn't need to account for it.
|
||||
assertFalse(transaction.isSignatureValid()); |
||||
|
||||
// Reduce difficulty back to 1, to double check
|
||||
FieldUtils.writeField(ArbitraryDataManager.getInstance(), "powDifficulty", 1, true); |
||||
assertTrue(transaction.isSignatureValid()); |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue