use of io.nem.symbol.sdk.api.SecretLockRepository in project nem2-sdk-java by nemtech.
the class StateProofServiceTest method secretLock.
@Test
void secretLock() throws Exception {
SecretLockRepository repository = mock(SecretLockRepository.class);
when(factory.createSecretLockRepository()).thenReturn(repository);
String id = "secret";
SecretLockInfo state = Mockito.mock(SecretLockInfo.class);
when(state.getCompositeHash()).thenReturn(id);
when(state.serialize()).thenReturn(ConvertUtils.fromHexToBytes(serialized));
when(repository.getSecretLock(eq(id))).thenReturn(Observable.just(state));
when(repository.getSecretLockMerkle(eq(id))).thenReturn(Observable.just(tree));
StateMerkleProof<SecretLockInfo> proof = service.secretLock(id).toFuture().get();
Assertions.assertTrue(proof.isValid());
Assertions.assertEquals(state, proof.getState());
}
use of io.nem.symbol.sdk.api.SecretLockRepository in project nem2-sdk-java by nemtech.
the class MerkleLoaderIntegrationTest method secretLocks.
public List<Arguments> secretLocks() {
RepositoryFactory repositoryFactory = getRepositoryFactory(DEFAULT_REPOSITORY_TYPE);
SecretLockRepository repository = repositoryFactory.createSecretLockRepository();
return getArguments(repository, new SecretLockSearchCriteria().order(ORDER_BY));
}
use of io.nem.symbol.sdk.api.SecretLockRepository in project nem2-sdk-java by nemtech.
the class SecretLockIntegrationTest method secretLockAndProofTransaction.
@ParameterizedTest
@MethodSource("provider")
void secretLockAndProofTransaction(RepositoryType type, LockHashAlgorithm lockHashAlgorithm) {
RepositoryFactory repositoryFactory = getRepositoryFactory(type);
byte[] secretSeed = RandomUtils.generateRandomBytes(20);
String secret = ConvertUtils.toHex(lockHashAlgorithm.hash(secretSeed));
String storedSecret = ConvertUtils.padHex(secret, LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE);
if (lockHashAlgorithm == LockHashAlgorithm.HASH_160) {
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, storedSecret.length());
Assertions.assertEquals(40, secret.length());
} else {
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, storedSecret.length());
Assertions.assertEquals(LockHashAlgorithm.DEFAULT_SECRET_HEX_SIZE, secret.length());
}
String proof = ConvertUtils.toHex(secretSeed);
Account account = config().getNemesisAccount1();
Account account2 = config().getNemesisAccount2();
Currency currency = get(repositoryFactory.getNetworkCurrency());
Mosaic mosaic = currency.createAbsolute(BigInteger.valueOf(1));
BigInteger amount = mosaic.getAmount();
BigInteger duration = BigInteger.valueOf(10000);
SecretLockTransaction secretLockTransaction = SecretLockTransactionFactory.create(getNetworkType(), getDeadline(), mosaic, duration, lockHashAlgorithm, secret, account2.getAddress()).maxFee(maxFee).build();
announceAndValidate(type, account, secretLockTransaction);
SecretProofTransaction secretProofTransaction = SecretProofTransactionFactory.create(getNetworkType(), getDeadline(), lockHashAlgorithm, account2.getAddress(), secret, proof).maxFee(maxFee).build();
SecretProofTransaction secretProofTransactionAnnounced = announceAndValidate(type, account, secretProofTransaction);
sleep(500);
Assertions.assertEquals(lockHashAlgorithm, secretProofTransactionAnnounced.getHashType());
Assertions.assertEquals(account2.getAddress(), secretProofTransactionAnnounced.getRecipient());
Assertions.assertEquals(storedSecret, secretProofTransactionAnnounced.getSecret());
Assertions.assertEquals(proof, secretProofTransactionAnnounced.getProof());
SecretLockRepository hashLockRepository = getRepositoryFactory(type).createSecretLockRepository();
SecretLockInfo info = get(hashLockRepository.search(new SecretLockSearchCriteria().address(account.getAddress()).secret(storedSecret))).getData().get(0);
Assertions.assertNotNull(info);
Assertions.assertEquals(account.getAddress(), info.getOwnerAddress());
Assertions.assertEquals(account2.getAddress(), info.getRecipientAddress());
Assertions.assertEquals(amount, info.getAmount());
Assertions.assertEquals(storedSecret, info.getSecret());
Assertions.assertEquals(lockHashAlgorithm, info.getHashAlgorithm());
Assertions.assertEquals(LockStatus.USED, info.getStatus());
Page<SecretLockInfo> page = get(hashLockRepository.search(new SecretLockSearchCriteria().address(account.getAddress()).order(OrderBy.DESC)));
Assertions.assertTrue(page.getData().stream().anyMatch(m -> m.getSecret().equals(storedSecret)));
Assertions.assertEquals(20, page.getPageSize());
SecretLockInfo infoSearch = page.getData().stream().filter(m -> m.getSecret().equals(storedSecret)).findFirst().get();
Assertions.assertNotNull(infoSearch);
Assertions.assertEquals(account.getAddress(), infoSearch.getOwnerAddress());
Assertions.assertEquals(account2.getAddress(), infoSearch.getRecipientAddress());
Assertions.assertEquals(amount, infoSearch.getAmount());
Assertions.assertEquals(lockHashAlgorithm, infoSearch.getHashAlgorithm());
Assertions.assertEquals(LockStatus.USED, infoSearch.getStatus());
Assertions.assertEquals(storedSecret, infoSearch.getSecret());
}
use of io.nem.symbol.sdk.api.SecretLockRepository in project nem2-sdk-java by nemtech.
the class SecretLockRepositoryIntegrationTest method searchWhenInvalidAddress.
@ParameterizedTest
@EnumSource(RepositoryType.class)
void searchWhenInvalidAddress(RepositoryType type) {
SecretLockRepository repository = getRepositoryFactory(type).createSecretLockRepository();
Address address = Address.generateRandom(getNetworkType());
Page<SecretLockInfo> page = get(repository.search(new SecretLockSearchCriteria().address(address)));
Assertions.assertTrue(page.isLast());
Assertions.assertTrue(page.getData().isEmpty());
Assertions.assertEquals(20, page.getPageSize());
}
Aggregations