diff --git a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/node/PantheonNode.java b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/node/PantheonNode.java index 96161183f9..5c61e214a2 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/node/PantheonNode.java +++ b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/node/PantheonNode.java @@ -38,7 +38,6 @@ import com.google.common.io.MoreFiles; import com.google.common.io.RecursiveDeleteOption; import org.apache.logging.log4j.Logger; import org.web3j.protocol.Web3j; -import org.web3j.protocol.Web3jService; import org.web3j.protocol.http.HttpService; import org.web3j.protocol.websocket.WebSocketService; import org.web3j.utils.Async; @@ -131,31 +130,16 @@ public class PantheonNode implements Node, NodeConfiguration, RunnableNode, Auto return LOCALHOST; } - @Deprecated - public Web3j web3j() { - if (!jsonRpcBaseUrl().isPresent()) { - return web3j(new HttpService("http://" + LOCALHOST + ":8545")); - } + private Web3j web3j() { if (web3j == null) { - return web3j(new HttpService(jsonRpcBaseUrl().get())); - } - - return web3j; - } - - public void setWeb3j(final Web3jService web3jService) { - if (web3j != null) { - web3j.shutdown(); - } + if (!jsonRpcBaseUrl().isPresent()) { + return Web3j.build( + new HttpService("http://" + LOCALHOST + ":8545"), 2000, Async.defaultExecutorService()); + } - web3j = Web3j.build(web3jService, 2000, Async.defaultExecutorService()); - } - - @Deprecated - public Web3j web3j(final Web3jService web3jService) { - if (web3j == null) { - web3j = Web3j.build(web3jService, 2000, Async.defaultExecutorService()); + return Web3j.build( + new HttpService(jsonRpcBaseUrl().get()), 2000, Async.defaultExecutorService()); } return web3j; diff --git a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/DeploySmartContractTransaction.java b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/DeploySmartContractTransaction.java new file mode 100644 index 0000000000..c033fff97a --- /dev/null +++ b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/DeploySmartContractTransaction.java @@ -0,0 +1,62 @@ +/* + * Copyright 2018 ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package tech.pegasys.pantheon.tests.acceptance.dsl.transaction; + +import java.lang.reflect.Method; +import java.math.BigInteger; + +import org.web3j.crypto.Credentials; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.RemoteCall; +import org.web3j.tx.Contract; + +public class DeploySmartContractTransaction implements Transaction { + + private static final BigInteger DEFAULT_GAS_PRICE = BigInteger.valueOf(1000); + private static final BigInteger DEFAULT_GAS_LIMIT = BigInteger.valueOf(3000000); + private static final Credentials GENESIS_ACCOUNT_ONE_PRIVATE_KEY = + Credentials.create("0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"); + private static final Object METHOD_IS_STATIC = null; + + private final Class clazz; + + public DeploySmartContractTransaction(final Class clazz) { + this.clazz = clazz; + } + + @Override + public T execute(final Web3j node) { + try { + final Method method = + clazz.getMethod( + "deploy", Web3j.class, Credentials.class, BigInteger.class, BigInteger.class); + + final Object invoked = + method.invoke( + METHOD_IS_STATIC, + node, + GENESIS_ACCOUNT_ONE_PRIVATE_KEY, + DEFAULT_GAS_PRICE, + DEFAULT_GAS_LIMIT); + + return cast(invoked).send(); + } catch (final Exception e) { + throw new RuntimeException(e); + } + } + + @SuppressWarnings("unchecked") + private RemoteCall cast(final Object invokedMethod) { + return (RemoteCall) invokedMethod; + } +} diff --git a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/Transactions.java b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/Transactions.java index affc251c14..7ce0457f32 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/Transactions.java +++ b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/acceptance/dsl/transaction/Transactions.java @@ -20,6 +20,7 @@ import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.account.TransferTr import java.util.ArrayList; import java.util.List; +import org.web3j.tx.Contract; import org.web3j.utils.Convert.Unit; public class Transactions { @@ -49,4 +50,9 @@ public class Transactions { return new TransferTransactionSet(transfers); } + + public DeploySmartContractTransaction createSmartContract( + final Class clazz) { + return new DeploySmartContractTransaction<>(clazz); + } } diff --git a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/web3j/EventEmitterAcceptanceTest.java b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/web3j/EventEmitterAcceptanceTest.java index 09b4f68ade..d708528c76 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/web3j/EventEmitterAcceptanceTest.java +++ b/acceptance-tests/src/test/java/tech/pegasys/pantheon/tests/web3j/EventEmitterAcceptanceTest.java @@ -13,6 +13,7 @@ package tech.pegasys.pantheon.tests.web3j; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import tech.pegasys.pantheon.tests.acceptance.dsl.AcceptanceTestBase; @@ -26,23 +27,16 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.web3j.crypto.Credentials; import org.web3j.protocol.core.methods.request.EthFilter; import org.web3j.protocol.core.methods.response.TransactionReceipt; import rx.Observable; /* * This class is based around the EventEmitter solidity contract - * */ @Ignore public class EventEmitterAcceptanceTest extends AcceptanceTestBase { - public static final BigInteger DEFAULT_GAS_PRICE = BigInteger.valueOf(1000); - public static final BigInteger DEFAULT_GAS_LIMIT = BigInteger.valueOf(3000000); - Credentials MAIN_CREDENTIALS = - Credentials.create("0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"); - private PantheonNode node; @Before @@ -53,21 +47,23 @@ public class EventEmitterAcceptanceTest extends AcceptanceTestBase { @Test public void shouldDeployContractAndAllowLookupOfValuesAndEmittingEvents() throws Exception { - System.out.println("Sending Create Contract Transaction"); final EventEmitter eventEmitter = - EventEmitter.deploy(node.web3j(), MAIN_CREDENTIALS, DEFAULT_GAS_PRICE, DEFAULT_GAS_LIMIT) - .send(); + node.execute(transactions.createSmartContract(EventEmitter.class)); + final Observable storedEventResponseObservable = eventEmitter.storedEventObservable(new EthFilter()); + final AtomicBoolean subscriptionReceived = new AtomicBoolean(false); + storedEventResponseObservable.subscribe( storedEventResponse -> { subscriptionReceived.set(true); assertEquals(BigInteger.valueOf(12), storedEventResponse._amount); }); - final TransactionReceipt send = eventEmitter.store(BigInteger.valueOf(12)).send(); + final TransactionReceipt receipt = eventEmitter.store(BigInteger.valueOf(12)).send(); + assertNotNull(receipt); assertEquals(BigInteger.valueOf(12), eventEmitter.value().send()); assertTrue(subscriptionReceived.get()); }