actionTraces = response.getActionTraces();
+ for (ActionTrace actionTrace : actionTraces) {
+ if (actionTrace.hasReturnValue()) {
+ try {
+ AbiEosSerializationObject deserializationObject = deserializeActionTraceReturnValue(actionTrace, chainId, abiProvider);
+ if (actionTrace.isQueryItAction()) {
+ actionTrace.setDeserializedReturnValue(convertAbieosQueryItJsonToUsableJson(deserializationObject.getJson()));
+ } else {
+ actionTrace.setDeserializedReturnValue(deserializationObject.getJson());
+ }
+ } catch (DeserializeReturnValueError transactionCreateSignatureRequestError) {
+ throw new TransactionFormatPushTransactionResponseError(transactionCreateSignatureRequestError);
+ }
+ }
+ }
+ return response;
+ }
+
+ /**
+ * Convert json to AnyVar type and then convert that to human-readable queryit json
+ * @param json - the json to convert
+ * @return converted human-readable queryit json
+ */
+ private String convertAbieosQueryItJsonToUsableJson(String json) {
+ AnyVar anyVar = Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(json, AnyVar.class);
+ return Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).toJson(anyVar);
+ }
+
/**
* Return transaction in JSON string format.
*
@@ -780,6 +828,26 @@ private PushTransactionResponse pushTransaction(PushTransactionRequest pushTrans
}
}
+ /**
+ * Send signed transaction to blockchain.
+ *
+ * Check sendTransaction() flow in "Complete Workflow" document for more details.
+ *
+ * @param sendTransactionRequest the request
+ * @return Response from chain
+ */
+ @NotNull
+ private SendTransactionResponse sendTransaction(SendTransactionRequest sendTransactionRequest)
+ throws TransactionPushTransactionError {
+ try {
+ return this.rpcProvider.sendTransaction(sendTransactionRequest);
+ } catch (SendTransactionRpcError pushTransactionRpcError) {
+ throw new TransactionPushTransactionError(
+ ErrorConstants.TRANSACTION_PROCESSOR_RPC_PUSH_TRANSACTION,
+ pushTransactionRpcError);
+ }
+ }
+
/**
* Serialize current transaction
*
@@ -968,8 +1036,7 @@ private AbiEosSerializationObject setupAbiEosSerializationObject(Action action,
}
AbiEosSerializationObject actionAbiEosSerializationObject = new AbiEosSerializationObject(
- action.getAccount(), action.getName(),
- null, actionAbiJSON);
+ action.getAccount(), action.getName(), actionAbiJSON);
actionAbiEosSerializationObject.setHex("");
// !!! At this step, the data field of the action is still in JSON format.
@@ -978,6 +1045,47 @@ private AbiEosSerializationObject setupAbiEosSerializationObject(Action action,
return actionAbiEosSerializationObject;
}
+ private AbiEosSerializationObject deserializeActionTraceReturnValue(ActionTrace actionTrace, String chainId, IABIProvider abiProvider)
+ throws DeserializeReturnValueError {
+ String actionAbiJSON;
+ try {
+ actionAbiJSON = abiProvider
+ .getAbi(chainId, new EOSIOName(actionTrace.getAccountName()));
+ } catch (GetAbiError getAbiError) {
+ throw new DeserializeReturnValueError(
+ String.format(ErrorConstants.TRANSACTION_PROCESSOR_GET_ABI_ERROR,
+ actionTrace.getAccountName()), getAbiError);
+ }
+
+ AbiEosSerializationObject actionAbiEosSerializationObject;
+ Abi abi = Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(actionAbiJSON, Abi.class);
+
+ if (actionTrace.isQueryItAction()) {
+ actionAbiEosSerializationObject = new AbiEosSerializationObject(
+ abi.getQueryItReturnType(actionTrace.getReturnValue()), actionAbiJSON);
+ } else {
+ actionAbiEosSerializationObject = new AbiEosSerializationObject(
+ abi.getActionReturnTypeByActionName(actionTrace.getActionName()), actionAbiJSON);
+ }
+
+ // !!! At this step, the data field of the action is still in HEX format.
+ actionAbiEosSerializationObject.setHex(actionTrace.getReturnValue());
+
+ try {
+ this.serializationProvider.deserialize(actionAbiEosSerializationObject);
+ if (actionAbiEosSerializationObject.getJson().isEmpty()) {
+ throw new DeserializeReturnValueError(
+ ErrorConstants.TRANSACTION_PROCESSOR_DESERIALIZE_RETURN_VALUE_EMPTY);
+ }
+ } catch (DeserializeError | DeserializeReturnValueError deserializeError) {
+ throw new DeserializeReturnValueError(
+ String.format(ErrorConstants.TRANSACTION_PROCESSOR_DESERIALIZE_RETURN_VALUE_ERROR,
+ actionTrace.getAccountName()), deserializeError);
+ }
+
+ return actionAbiEosSerializationObject;
+ }
+
/**
* Getting deep clone of the transaction
*/
diff --git a/eosiojava/src/main/java/one/block/eosiojava/utilities/Utils.java b/eosiojava/src/main/java/one/block/eosiojava/utilities/Utils.java
index e8df846..875f905 100644
--- a/eosiojava/src/main/java/one/block/eosiojava/utilities/Utils.java
+++ b/eosiojava/src/main/java/one/block/eosiojava/utilities/Utils.java
@@ -8,6 +8,9 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import one.block.eosiojava.models.queryit.AnyVar;
+import one.block.eosiojava.models.queryit.AnyVarDeserializer;
+import one.block.eosiojava.models.queryit.AnyVarSerializer;
/**
* This class provides generic utility methods
@@ -41,6 +44,8 @@ public static T clone(T object) throws IOException, Cla
*/
public static Gson getGson(String datePattern) {
return new GsonBuilder()
+ .registerTypeAdapter(AnyVar.class, new AnyVarDeserializer())
+ .registerTypeAdapter(AnyVar.class, new AnyVarSerializer())
.setDateFormat(datePattern)
.disableHtmlEscaping()
.create();
diff --git a/eosiojava/src/test/java/one/block/eosiojava/RpcModelTest.java b/eosiojava/src/test/java/one/block/eosiojava/RpcModelTest.java
index f029417..731ac28 100644
--- a/eosiojava/src/test/java/one/block/eosiojava/RpcModelTest.java
+++ b/eosiojava/src/test/java/one/block/eosiojava/RpcModelTest.java
@@ -12,11 +12,14 @@
import one.block.eosiojava.models.rpcProvider.request.GetRawAbiRequest;
import one.block.eosiojava.models.rpcProvider.request.GetRequiredKeysRequest;
import one.block.eosiojava.models.rpcProvider.request.PushTransactionRequest;
+import one.block.eosiojava.models.rpcProvider.response.ActionTrace;
import one.block.eosiojava.models.rpcProvider.response.GetBlockResponse;
import one.block.eosiojava.models.rpcProvider.response.GetInfoResponse;
import one.block.eosiojava.models.rpcProvider.response.GetRawAbiResponse;
import one.block.eosiojava.models.rpcProvider.response.GetRequiredKeysResponse;
+import one.block.eosiojava.models.rpcProvider.response.ProcessedTransactionResponse;
import one.block.eosiojava.models.rpcProvider.response.PushTransactionResponse;
+import static junit.framework.TestCase.*;
import org.junit.Before;
import org.junit.Test;
@@ -29,7 +32,8 @@ public class RpcModelTest {
@Before
public void setUpGSON() {
- this.gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'hh:mm:ss zzz")
+ this.gson = new GsonBuilder()
+ .setDateFormat("yyyy-MM-dd'T'hh:mm:ss zzz")
.disableHtmlEscaping().create();
}
@@ -285,7 +289,8 @@ public void PushTransactionResponseTest() {
.fromJson(jsonContent, PushTransactionResponse.class);
assertNotNull(pushTransactionResponse);
assertEquals("dump_transaction_id", pushTransactionResponse.getTransactionId());
- assertEquals("dump_id", pushTransactionResponse.getProcessed().get("id"));
+ assertEquals("dump_id", pushTransactionResponse.getProcessed().getId());
+ assertEquals(2, pushTransactionResponse.getActionTraces().size());
// ToJSON test
String toJSON = this.gson.toJson(pushTransactionResponse);
@@ -294,6 +299,28 @@ public void PushTransactionResponseTest() {
// This test does not do verify toJSON with original json content because they are generated different values due to deep level model which is not defined in the source code.
}
+ @Test
+ public void PushTransactionResponseWithReturnValuesTest() {
+ String jsonContent = "{\"transaction_id\":\"dump_transaction_id\",\"processed\":{\"id\":\"dump_id\",\"block_num\":1231214214,\"block_time\":\"2019-12-12T12:12:12.500\",\"receipt\":{\"status\":\"executed\",\"cpu_usage_us\":1,\"net_usage_words\":1},\"elapsed\":1,\"net_usage\":1,\"scheduled\":false,\"action_traces\":[{\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"},{\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"0000000000408608\"}]}}";
+
+ // FromJSON test
+ PushTransactionResponse pushTransactionResponse = this.gson
+ .fromJson(jsonContent, PushTransactionResponse.class);
+ assertNotNull(pushTransactionResponse);
+ assertEquals("dump_transaction_id", pushTransactionResponse.getTransactionId());
+ assertEquals("dump_id", pushTransactionResponse.getProcessed().getId());
+ assertEquals(2, pushTransactionResponse.getActionTraces().size());
+ assertEquals("000000000090b1ca", pushTransactionResponse.getActionTraces().get(0).getReturnValue());
+ assertEquals(null, pushTransactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ assertEquals("0000000000408608", pushTransactionResponse.getActionTraces().get(1).getReturnValue());
+ assertEquals(null, pushTransactionResponse.getActionTraces().get(1).getDeserializedReturnValue());
+
+ // ToJSON test
+ String toJSON = this.gson.toJson(pushTransactionResponse);
+ assertNotNull(toJSON);
+ assertNotEquals("", toJSON);
+ }
+
/**
* Test GetInfoResponse
*/
@@ -329,5 +356,80 @@ public void GetInfoResponseTest() {
assertEquals(jsonContent, toJSON);
}
+ /**
+ * Test ProcessedTransactionResponse
+ */
+ @Test
+ public void ProcessedTransactionResponseTest() {
+ String jsonContent = "{\"id\":\"dump_id\",\"block_num\":1231214214,\"block_time\":\"2019-12-12T12:12:12.500\",\"producer_block_id\":\"test\",\"receipt\":{\"status\":\"executed\",\"cpu_usage_us\":1,\"net_usage_words\":1},\"elapsed\":1,\"net_usage\":1,\"scheduled\":false,\"account_ram_delta\":\"test\",\"except\":\"test\",\"error_code\":\"test\",\"action_traces\":[{\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"},{\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"0000000000408608\"}]}";
+
+ // FromJSON test
+ ProcessedTransactionResponse processedTransactionResponse = this.gson
+ .fromJson(jsonContent, ProcessedTransactionResponse.class);
+ assertNotNull(processedTransactionResponse);
+ assertEquals("dump_id", processedTransactionResponse.getId());
+ assertNotNull(processedTransactionResponse.getBlockTime());
+ assertNotNull(processedTransactionResponse.getProducerBlockId());
+ assertNotNull(processedTransactionResponse.getReceipt());
+ assertNotNull(processedTransactionResponse.getElapsed());
+ assertNotNull(processedTransactionResponse.getNetUsage());
+ assertNotNull(processedTransactionResponse.getScheduled());
+ assertNotNull(processedTransactionResponse.getAccountRamDelta());
+ assertNotNull(processedTransactionResponse.getExcept());
+ assertNotNull(processedTransactionResponse.getErrorCode());
+ assertEquals(2, processedTransactionResponse.getActionTraces().size());
+ assertEquals("000000000090b1ca", processedTransactionResponse.getActionTraces().get(0).getReturnValue());
+ assertEquals("0000000000408608", processedTransactionResponse.getActionTraces().get(1).getReturnValue());
+
+ // ToJSON test
+ String toJSON = this.gson.toJson(processedTransactionResponse);
+ assertNotNull(toJSON);
+ assertNotEquals("", toJSON);
+ }
+
+ /**
+ * Test ActionTrace
+ */
+ @Test
+ public void ActionTraceTest() {
+ String jsonContent = "{\"action_ordinal\":\"1\",\"creator_action_ordinal\":\"1\",\"closest_unnotified_ancestor_action_ordinal\":\"1\",\"receiver\":\"test\",\"producer_block_id\":\"test\",\"account_ram_deltas\":{},\"account_disk_deltas\":{},\"except\":\"test\",\"error_code\":\"test\",\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"}";
+ String deserializedReturnValue = "test";
+
+ // FromJSON test
+ ActionTrace actionTrace = this.gson
+ .fromJson(jsonContent, ActionTrace.class);
+ actionTrace.setDeserializedReturnValue(deserializedReturnValue);
+
+ assertNotNull(actionTrace);
+ assertNotNull(actionTrace.getActionOrdinal());
+ assertNotNull(actionTrace.getCreatorActionOrdinal());
+ assertNotNull(actionTrace.getClosestUnnotifiedAncestorActionOrdinal());
+ assertNotNull(actionTrace.getReceipt());
+ assertNotNull(actionTrace.getReceiver());
+ assertNotNull(actionTrace.getAct());
+ assertNotNull(actionTrace.getContextFree());
+ assertNotNull(actionTrace.getElapsed());
+ assertNotNull(actionTrace.getConsole());
+ assertNotNull(actionTrace.getTransactionId());
+ assertNotNull(actionTrace.getBlockNumber());
+ assertNotNull(actionTrace.getBlockTime());
+ assertNotNull(actionTrace.getProducerBlockId());
+ assertNotNull(actionTrace.getAccountRamDeltas());
+ assertNotNull(actionTrace.getAccountDiskDeltas());
+ assertNotNull(actionTrace.getExcept());
+ assertNotNull(actionTrace.getErrorCode());
+ assertTrue(actionTrace.hasReturnValue());
+ assertEquals("000000000090b1ca", actionTrace.getReturnValue());
+ assertEquals(deserializedReturnValue, actionTrace.getDeserializedReturnValue());
+ assertEquals("eosio.assert", actionTrace.getAccountName());
+ assertEquals("require", actionTrace.getActionName());
+
+ // ToJSON test
+ String toJSON = this.gson.toJson(actionTrace);
+ assertNotNull(toJSON);
+ assertNotEquals("", toJSON);
+ }
+
+
//endregion
}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/AbiEosSerializationObjectTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/AbiEosSerializationObjectTest.java
new file mode 100644
index 0000000..a8aa3d5
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/AbiEosSerializationObjectTest.java
@@ -0,0 +1,43 @@
+package one.block.eosiojava.models;
+
+import org.junit.Test;
+import static junit.framework.TestCase.*;
+
+public class AbiEosSerializationObjectTest {
+ private static final String CONTRACT_NAME = "contractName";
+ private static final String ACTION_NAME = "actionName";
+ private static final String TYPE = "type";
+ private static final String ABI = "abi";
+
+ private AbiEosSerializationObject serializationObject;
+
+ @Test
+ public void testCreateAbiEosSerializationObjectWithAllFields() {
+ this.serializationObject = new AbiEosSerializationObject(CONTRACT_NAME, ACTION_NAME, TYPE, ABI);
+
+ assertEquals(this.serializationObject.getContract(), CONTRACT_NAME);
+ assertEquals(this.serializationObject.getName(), ACTION_NAME);
+ assertEquals(this.serializationObject.getType(), TYPE);
+ assertEquals(this.serializationObject.getAbi(), ABI);
+ }
+
+ @Test
+ public void testCreateAbiEosSerializationObjectWithoutTypeShouldDefaultToNull() {
+ this.serializationObject = new AbiEosSerializationObject(CONTRACT_NAME, ACTION_NAME, ABI);
+
+ assertEquals(this.serializationObject.getContract(), CONTRACT_NAME);
+ assertEquals(this.serializationObject.getName(), ACTION_NAME);
+ assertNull(this.serializationObject.getType());
+ assertEquals(this.serializationObject.getAbi(), ABI);
+ }
+
+ @Test
+ public void testCreateAbiEosSerializationObjectWithoutContractOrActionNameShouldDefaultToNull() {
+ this.serializationObject = new AbiEosSerializationObject(TYPE, ABI);
+
+ assertNull(this.serializationObject.getContract());
+ assertNull(this.serializationObject.getName());
+ assertEquals(this.serializationObject.getType(), TYPE);
+ assertEquals(this.serializationObject.getAbi(), ABI);
+ }
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/AbiTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/AbiTest.java
new file mode 100644
index 0000000..c0927c2
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/AbiTest.java
@@ -0,0 +1,143 @@
+package one.block.eosiojava.models;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static junit.framework.TestCase.*;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import java.nio.ByteBuffer;
+import java.util.List;
+import one.block.eosiojava.models.abiProvider.Abi;
+import org.bouncycastle.util.encoders.Hex;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test JSON serialization/Deserialization for All models in RPC Provider
+ */
+public class AbiTest {
+
+ private Gson gson;
+
+ @Before
+ public void setUpGSON() {
+ this.gson = new GsonBuilder()
+ .setDateFormat("yyyy-MM-dd'T'hh:mm:ss zzz")
+ .disableHtmlEscaping().create();
+ }
+
+ //region Request Models
+
+ /**
+ * Test Abi
+ */
+ @Test
+ public void AbiTest() {
+ String jsonContent = "{\"____comment\":\"Test comment\",\"version\":\"eosio::abi/1.2\",\"types\":[{\"new_type_name\":\"account_name\",\"type\":\"name\"}],\"structs\":[{\"name\":\"transfer\",\"base\":\"\",\"fields\":[{\"name\":\"from\",\"type\":\"account_name\"},{\"name\":\"to\",\"type\":\"account_name\"},{\"name\":\"quantity\",\"type\":\"asset\"},{\"name\":\"memo\",\"type\":\"string\"}]},{\"name\":\"create\",\"base\":\"\",\"fields\":[{\"name\":\"issuer\",\"type\":\"account_name\"},{\"name\":\"maximum_supply\",\"type\":\"asset\"}]},{\"name\":\"issue\",\"base\":\"\",\"fields\":[{\"name\":\"to\",\"type\":\"account_name\"},{\"name\":\"quantity\",\"type\":\"asset\"},{\"name\":\"memo\",\"type\":\"string\"}]},{\"name\":\"account\",\"base\":\"\",\"fields\":[{\"name\":\"balance\",\"type\":\"asset\"}]},{\"name\":\"currency_stats\",\"base\":\"\",\"fields\":[{\"name\":\"supply\",\"type\":\"asset\"},{\"name\":\"max_supply\",\"type\":\"asset\"},{\"name\":\"issuer\",\"type\":\"account_name\"}]},{\"name\":\"retval_test\",\"base\":\"\",\"fields\":[{\"name\":\"user\",\"type\":\"name\"}]},{\"name\":\"returnValue\",\"base\":\"\",\"fields\":[{\"name\":\"id\",\"type\":\"uint32\"},{\"name\":\"name\",\"type\":\"name\"}]}],\"actions\":[{\"name\":\"transfer\",\"type\":\"transfer\",\"ricardian_contract\":\"---\\ntitle: Token Transfer\\nsummary: Transfer tokens from one account to another.\\nicon: https://cdn.testnet.dev.b1ops.net/token-transfer.png#ce51ef9f9eeca3434e85507e0ed49e76fff1265422bded0255f3196ea59c8b0c\\n---\\n\\n## Transfer Terms & Conditions\\n\\nI, {{from}}, certify the following to be true to the best of my knowledge:\\n\\n1. I certify that {{quantity}} is not the proceeds of fraudulent or violent activities.\\n2. I certify that, to the best of my knowledge, {{to}} is not supporting initiation of violence against others.\\n3. I have disclosed any contractual terms & conditions with respect to {{quantity}} to {{to}}.\\n\\nI understand that funds transfers are not reversible after the {{$transaction.delay_sec}} seconds or other delay as configured by {{from}}'s permissions.\\n\\nIf this action fails to be irreversibly confirmed after receiving goods or services from '{{to}}', I agree to either return the goods or services or resend {{quantity}} in a timely manner.\"},{\"name\":\"issue\",\"type\":\"issue\",\"ricardian_contract\":\"\"},{\"name\":\"create\",\"type\":\"create\",\"ricardian_contract\":\"\"},{\"name\":\"retval_test\",\"type\":\"retval_test\",\"ricardian_contract\":\"\"}],\"tables\":[{\"name\":\"accounts\",\"index_type\":\"i64\",\"key_names\":[\"currency\"],\"key_types\":[\"uint64\"],\"type\":\"account\"},{\"name\":\"stat\",\"index_type\":\"i64\",\"key_names\":[\"currency\"],\"key_types\":[\"uint64\"],\"type\":\"currency_stats\"}],\"ricardian_clauses\":[],\"variants\":[],\"action_results\":[{\"name\":\"retval_test\",\"result_type\":\"returnValue\"}]}";
+
+ // FromJSON test
+ Abi abi = this.gson
+ .fromJson(jsonContent, Abi.class);
+ assertNotNull(abi);
+ assertNotNull(abi.getComment());
+ assertNotNull(abi.getVersion());
+ assertNotNull(abi.getTypes());
+ assertEquals(1, abi.getTypes().size());
+ assertNotNull(abi.getStructs());
+ assertEquals(7, abi.getStructs().size());
+ assertNotNull(abi.getActions());
+ assertEquals(4, abi.getActions().size());
+ assertNotNull(abi.getTables());
+ assertEquals(2, abi.getTables().size());
+ assertNotNull(abi.getRicardianClauses());
+ assertEquals(0, abi.getRicardianClauses().size());
+ assertNotNull(abi.getVariants());
+ assertEquals(0, abi.getVariants().size());
+ assertNotNull(abi.getActionResults());
+ assertEquals(1, abi.getActionResults().size());
+
+ // ToJSON test
+ String toJSON = this.gson.toJson(abi);
+ assertNotNull(toJSON);
+ assertNotEquals("", toJSON);
+ assertEquals(jsonContent, toJSON);
+ }
+
+ @Test
+ public void AbiGetVariantTypesByNameTest() {
+ String jsonContent = "{\"version\":\"eosio::abi/1.1\",\"types\":[{\"new_type_name\":\"any_array\",\"type\":\"anyvar[]\"},{\"new_type_name\":\"any_object\",\"type\":\"field[]\"}],\"structs\":[{\"name\":\"null_t\",\"base\":\"\",\"fields\":[]},{\"name\":\"field\",\"base\":\"\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"anyvar\"}]},{\"name\":\"query\",\"base\":\"\",\"fields\":[{\"name\":\"method\",\"type\":\"string\"},{\"name\":\"arg\",\"type\":\"anyvar?\"},{\"name\":\"filter\",\"type\":\"query[]\"}]}],\"variants\":[{\"name\":\"anyvar\",\"types\":[\"null_t\",\"int64\",\"uint64\",\"int32\",\"uint32\",\"int16\",\"uint16\",\"int8\",\"uint8\",\"time_point\",\"checksum256\",\"float64\",\"string\",\"any_object\",\"any_array\",\"bytes\",\"symbol\",\"symbol_code\",\"asset\"]}]}";
+
+ // FromJSON test
+ Abi abi = this.gson
+ .fromJson(jsonContent, Abi.class);
+
+ assertEquals(19, abi.getVariantTypesByName("anyvar").size());
+ }
+
+ @Test
+ public void AbiGetQueryItReturnTypeTest() {
+ String jsonContent = "{\"version\":\"eosio::abi/1.1\",\"types\":[{\"new_type_name\":\"any_array\",\"type\":\"anyvar[]\"},{\"new_type_name\":\"any_object\",\"type\":\"field[]\"}],\"structs\":[{\"name\":\"null_t\",\"base\":\"\",\"fields\":[]},{\"name\":\"field\",\"base\":\"\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"anyvar\"}]},{\"name\":\"query\",\"base\":\"\",\"fields\":[{\"name\":\"method\",\"type\":\"string\"},{\"name\":\"arg\",\"type\":\"anyvar?\"},{\"name\":\"filter\",\"type\":\"query[]\"}]}],\"variants\":[{\"name\":\"anyvar\",\"types\":[\"null_t\",\"int64\",\"uint64\",\"int32\",\"uint32\",\"int16\",\"uint16\",\"int8\",\"uint8\",\"time_point\",\"checksum256\",\"float64\",\"string\",\"any_object\",\"any_array\",\"bytes\",\"symbol\",\"symbol_code\",\"asset\"]}]}";
+
+ // FromJSON test
+ Abi abi = this.gson
+ .fromJson(jsonContent, Abi.class);
+
+ List anyvarVariantTypes = abi.getVariantTypesByName("anyvar");
+
+ Integer variantTypeIndex = 12;
+ String stringVal = "[\"string\",\"test\"]";
+ byte[] stringValBytes = stringVal.getBytes();
+
+ ByteBuffer buffer = ByteBuffer.allocate(stringValBytes.length + 4);
+ buffer.putInt(variantTypeIndex);
+ buffer.put(stringValBytes);
+
+ String variantType = abi.getQueryItReturnType(Hex.toHexString(buffer.array()));
+
+ assertEquals(variantType, anyvarVariantTypes.get(variantTypeIndex));
+ }
+
+ @Test
+ public void AbiGetQueryItReturnTypeNotFoundIndexBelowZeroTest() {
+ String jsonContent = "{\"version\":\"eosio::abi/1.1\",\"types\":[{\"new_type_name\":\"any_array\",\"type\":\"anyvar[]\"},{\"new_type_name\":\"any_object\",\"type\":\"field[]\"}],\"structs\":[{\"name\":\"null_t\",\"base\":\"\",\"fields\":[]},{\"name\":\"field\",\"base\":\"\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"anyvar\"}]},{\"name\":\"query\",\"base\":\"\",\"fields\":[{\"name\":\"method\",\"type\":\"string\"},{\"name\":\"arg\",\"type\":\"anyvar?\"},{\"name\":\"filter\",\"type\":\"query[]\"}]}],\"variants\":[{\"name\":\"anyvar\",\"types\":[\"null_t\",\"int64\",\"uint64\",\"int32\",\"uint32\",\"int16\",\"uint16\",\"int8\",\"uint8\",\"time_point\",\"checksum256\",\"float64\",\"string\",\"any_object\",\"any_array\",\"bytes\",\"symbol\",\"symbol_code\",\"asset\"]}]}";
+
+ // FromJSON test
+ Abi abi = this.gson
+ .fromJson(jsonContent, Abi.class);
+
+ Integer variantTypeIndex = -1;
+ String stringVal = "[\"string\",\"test\"]";
+ byte[] stringValBytes = stringVal.getBytes();
+
+ ByteBuffer buffer = ByteBuffer.allocate(stringValBytes.length + 4);
+ buffer.putInt(variantTypeIndex);
+ buffer.put(stringValBytes);
+
+ assertNull(abi.getQueryItReturnType(Hex.toHexString(buffer.array())));
+ }
+
+ @Test
+ public void AbiGetQueryItReturnTypeNotFoundIndexAboveVariantTypesLengthTest() {
+ String jsonContent = "{\"version\":\"eosio::abi/1.1\",\"types\":[{\"new_type_name\":\"any_array\",\"type\":\"anyvar[]\"},{\"new_type_name\":\"any_object\",\"type\":\"field[]\"}],\"structs\":[{\"name\":\"null_t\",\"base\":\"\",\"fields\":[]},{\"name\":\"field\",\"base\":\"\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"anyvar\"}]},{\"name\":\"query\",\"base\":\"\",\"fields\":[{\"name\":\"method\",\"type\":\"string\"},{\"name\":\"arg\",\"type\":\"anyvar?\"},{\"name\":\"filter\",\"type\":\"query[]\"}]}],\"variants\":[{\"name\":\"anyvar\",\"types\":[\"null_t\",\"int64\",\"uint64\",\"int32\",\"uint32\",\"int16\",\"uint16\",\"int8\",\"uint8\",\"time_point\",\"checksum256\",\"float64\",\"string\",\"any_object\",\"any_array\",\"bytes\",\"symbol\",\"symbol_code\",\"asset\"]}]}";
+
+ // FromJSON test
+ Abi abi = this.gson
+ .fromJson(jsonContent, Abi.class);
+
+ List anyvarVariantTypes = abi.getVariantTypesByName("anyvar");
+
+ Integer variantTypeIndex = anyvarVariantTypes.size() + 1;
+ String stringVal = "[\"string\",\"test\"]";
+ byte[] stringValBytes = stringVal.getBytes();
+
+ ByteBuffer buffer = ByteBuffer.allocate(stringValBytes.length + 4);
+ buffer.putInt(variantTypeIndex);
+ buffer.put(stringValBytes);
+
+ assertNull(abi.getQueryItReturnType(Hex.toHexString(buffer.array())));
+ }
+
+ //endregion
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/ActionResultTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/ActionResultTest.java
new file mode 100644
index 0000000..2fc307c
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/ActionResultTest.java
@@ -0,0 +1,48 @@
+package one.block.eosiojava.models;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import one.block.eosiojava.models.abiProvider.ActionResult;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ActionResultTest {
+
+ private Gson gson;
+
+ @Before
+ public void setUpGSON() {
+ this.gson = new GsonBuilder()
+ .setDateFormat("yyyy-MM-dd'T'hh:mm:ss zzz")
+ .disableHtmlEscaping().create();
+ }
+
+ /**
+ * Test ActionResult
+ */
+ @Test
+ public void ActionResultTest() {
+ String actionName = "test_action";
+ String returnType = "testReturnType";
+ String jsonContent = "{\"name\":\"" + actionName + "\",\"result_type\":\"" + returnType + "\"}";
+
+ // FromJSON test
+ ActionResult actionResult = this.gson
+ .fromJson(jsonContent, ActionResult.class);
+ assertNotNull(actionResult);
+ assertEquals(actionName, actionResult.getName());
+ assertTrue(actionResult.hasActionName(actionName));
+ assertEquals(returnType, actionResult.getReturnType());
+
+ // ToJSON test
+ String toJSON = this.gson.toJson(actionResult);
+ assertNotNull(toJSON);
+ assertNotEquals("", toJSON);
+ assertEquals(jsonContent, toJSON);
+ }
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/ActionTraceTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/ActionTraceTest.java
new file mode 100644
index 0000000..dc50ebc
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/ActionTraceTest.java
@@ -0,0 +1,67 @@
+package one.block.eosiojava.models;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import one.block.eosiojava.models.rpcProvider.response.ActionTrace;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ActionTraceTest {
+ private Gson gson;
+
+ @Before
+ public void setUpGSON() {
+ this.gson = new GsonBuilder()
+ .setDateFormat("yyyy-MM-dd'T'hh:mm:ss zzz")
+ .disableHtmlEscaping().create();
+ }
+
+ @Test
+ public void ActionTraceHasReturnValueTest() {
+ String jsonContent = "{\"action_ordinal\":\"1\",\"creator_action_ordinal\":\"1\",\"closest_unnotified_ancestor_action_ordinal\":\"1\",\"receiver\":\"test\",\"producer_block_id\":\"test\",\"account_ram_deltas\":{},\"account_disk_deltas\":{},\"except\":\"test\",\"error_code\":\"test\",\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"}";
+
+ // FromJSON test
+ ActionTrace actionTrace = this.gson
+ .fromJson(jsonContent, ActionTrace.class);
+
+ assertTrue(actionTrace.hasReturnValue());
+ }
+
+ @Test
+ public void ActionTraceHasReturnNoValueTest() {
+ String jsonContent = "{\"action_ordinal\":\"1\",\"creator_action_ordinal\":\"1\",\"closest_unnotified_ancestor_action_ordinal\":\"1\",\"receiver\":\"test\",\"producer_block_id\":\"test\",\"account_ram_deltas\":{},\"account_disk_deltas\":{},\"except\":\"test\",\"error_code\":\"test\",\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"require\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"\"}";
+
+ // FromJSON test
+ ActionTrace actionTrace = this.gson
+ .fromJson(jsonContent, ActionTrace.class);
+
+ assertFalse(actionTrace.hasReturnValue());
+ }
+
+ @Test
+ public void ActionTraceIsQueryItActionTest() {
+ String queryItActionName = "queryit";
+ String jsonContent = "{\"action_ordinal\":\"1\",\"creator_action_ordinal\":\"1\",\"closest_unnotified_ancestor_action_ordinal\":\"1\",\"receiver\":\"test\",\"producer_block_id\":\"test\",\"account_ram_deltas\":{},\"account_disk_deltas\":{},\"except\":\"test\",\"error_code\":\"test\",\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"" + queryItActionName + "\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"}";
+
+ // FromJSON test
+ ActionTrace actionTrace = this.gson
+ .fromJson(jsonContent, ActionTrace.class);
+
+ assertTrue(actionTrace.isQueryItAction());
+ }
+
+ @Test
+ public void ActionTraceIsNotQueryItActionTest() {
+ String nonQueryItActionName = "someactionname";
+ String jsonContent = "{\"action_ordinal\":\"1\",\"creator_action_ordinal\":\"1\",\"closest_unnotified_ancestor_action_ordinal\":\"1\",\"receiver\":\"test\",\"producer_block_id\":\"test\",\"account_ram_deltas\":{},\"account_disk_deltas\":{},\"except\":\"test\",\"error_code\":\"test\",\"receipt\":{\"receiver\":\"eosio.assert\",\"act_digest\":\"digest\",\"global_sequence\":1,\"recv_sequence\":1,\"auth_sequence\":[],\"code_sequence\":1,\"abi_sequence\":1},\"act\":{\"account\":\"eosio.assert\",\"name\":\"" + nonQueryItActionName + "\",\"authorization\":[],\"data\":{\"chain_params_hash\":\"hash\",\"manifest_id\":\"manifest id\",\"actions\":[{\"contract\":\"eosio.token\",\"action\":\"transfer\"}],\"abi_hashes\":[\"abi hashes\"]},\"hex_data\":\"hex data\"},\"context_free\":false,\"elapsed\":1,\"cpu_usage\":0,\"console\":\"\",\"total_cpu_usage\":0,\"trx_id\":\"transaction id\",\"block_num\":1,\"block_time\":\"2019-12-12T12:12:12.500\",\"account_ram_deltas\":[],\"inline_traces\":[], \"return_value\": \"000000000090b1ca\"}";
+
+ // FromJSON test
+ ActionTrace actionTrace = this.gson
+ .fromJson(jsonContent, ActionTrace.class);
+
+ assertFalse(actionTrace.isQueryItAction());
+ }
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/queryit/AnyVarTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/queryit/AnyVarTest.java
new file mode 100644
index 0000000..6e2a1f5
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/queryit/AnyVarTest.java
@@ -0,0 +1,514 @@
+package one.block.eosiojava.models.queryit;
+
+import static junit.framework.TestCase.*;
+import static org.junit.Assert.assertNotNull;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import java.math.BigInteger;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AnyVarTest {
+
+ private Gson gson;
+ private AnyVar testAnyVar;
+
+ @Before
+ public void setUpGSON() {
+ String datePattern = "yyyy-MM-dd'T'hh:mm:ss zzz";
+ this.gson = new GsonBuilder()
+ .registerTypeAdapter(AnyVar.class, new AnyVarDeserializer())
+ .registerTypeAdapter(AnyVar.class, new AnyVarSerializer())
+ .setDateFormat(datePattern)
+ .disableHtmlEscaping().create();
+
+ testAnyVar = new AnyVar();
+ }
+
+ @Test
+ public void testConstructor() {
+ assertTrue(testAnyVar.isEmpty());
+ }
+
+ @Test
+ public void testHasNoValue() {
+ assertFalse(testAnyVar.hasValue());
+ }
+
+ @Test
+ public void testHasValueWithString() {
+ testAnyVar.setValue("anything");
+ assertTrue(testAnyVar.hasValue());
+ }
+
+ @Test
+ public void testHasValueWithInteger() {
+ testAnyVar.setValue(1);
+ assertTrue(testAnyVar.hasValue());
+ }
+
+ @Test
+ public void testHasValueWithObject() {
+ testAnyVar.setValue(new Object());
+ assertTrue(testAnyVar.hasValue());
+ }
+
+ @Test
+ public void testConvertNull() {
+ String jsonContent = "[]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertNull(anyVar.getValue());
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, jsonContent);
+ }
+
+ @Test
+ public void testConvertString() {
+ String expectedValue = "someValue";
+ String jsonContent = "[\"string\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertChecksum256() {
+ String expectedValue = "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25";
+ String jsonContent = "[\"checksum256\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertSymbol() {
+ String expectedValue = "10.0000 EOS";
+ String jsonContent = "[\"symbol\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertSymbolCode() {
+ String expectedValue = "EOS";
+ String jsonContent = "[\"symbol_code\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertAsset() {
+ String expectedValue = "10.0000 EOS";
+ String jsonContent = "[\"asset\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxUInt64() {
+ BigInteger expectedValue = new BigInteger("18446744073709551615");
+ String jsonContent = "[\"uint64\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinUInt64() {
+ BigInteger expectedValue = new BigInteger("0");
+ String jsonContent = "[\"uint64\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxInt64() {
+ Long expectedValue = 9223372036854775807L;
+ String jsonContent = "[\"int64\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinInt64() {
+ Long expectedValue = -9223372036854775808L;
+ String jsonContent = "[\"int64\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxUInt32() {
+ Long expectedValue = 4294967295L;
+ String jsonContent = "[\"uint32\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinUInt32() {
+ Long expectedValue = 0L;
+ String jsonContent = "[\"uint32\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxInt32() {
+ Integer expectedValue = 2147483647;
+ String jsonContent = "[\"int32\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinInt32() {
+ Integer expectedValue = -2147483648;
+ String jsonContent = "[\"int32\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxUInt16() {
+ Integer expectedValue = 65535;
+ String jsonContent = "[\"uint16\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinUInt16() {
+ Integer expectedValue = 0;
+ String jsonContent = "[\"uint16\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxInt16() {
+ Integer expectedValue = 32767;
+ String jsonContent = "[\"int16\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinInt16() {
+ Integer expectedValue = -32768;
+ String jsonContent = "[\"int16\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxUInt8() {
+ Integer expectedValue = 256;
+ String jsonContent = "[\"uint8\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinUInt8() {
+ Integer expectedValue = 0;
+ String jsonContent = "[\"uint8\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxInt8() {
+ Integer expectedValue = 127;
+ String jsonContent = "[\"int8\",\"" + expectedValue.toString() + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinInt8() {
+ Integer expectedValue = -128;
+ String jsonContent = "[\"int8\",\"" + expectedValue.toString() + "\"]";
+ String expectedJsonContent = "-128";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMaxFloat64() {
+ Float expectedValue = Float.parseFloat("3.40282e+038");
+ String jsonContent = "[\"float64\",\"" + expectedValue.toString() + "\"]";
+ String expectedJsonContent = "3.40282E38";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertMinFloat64() {
+ Float expectedValue = Float.parseFloat("1.17549e-038");
+ String jsonContent = "[\"float64\",\"" + expectedValue.toString() + "\"]";
+ String expectedJsonContent = "1.17549e-038";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertTimepointWithoutZone() {
+ String expectedValue = "2020-07-16T10:38:46.000";
+ String jsonContent = "[\"time_point\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertTimepointWithZone() {
+ String expectedValue = "2020-07-16T10:38:46.500Z";
+ String jsonContent = "[\"time_point\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testConvertBytes() {
+ String expectedValue = "0110";
+ String jsonContent = "[\"bytes\",\"" + expectedValue + "\"]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getValue());
+ }
+
+ @Test
+ public void testEmptyAnyArray() {
+ int expectedSubQueriesCount = 0;
+ String expectedJsonContent = "[]";
+ String jsonContent = "[\"any_array\", " + expectedJsonContent + "]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedSubQueriesCount, anyVar.getAnyVars().size());
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, expectedJsonContent);
+ }
+
+ @Test
+ public void testSimpleAnyArray() {
+ String expectedSubqueryValue = "test";
+ int expectedSubQueriesCount = 1;
+ String expectedJsonContent = "[[\"string\", \"" + expectedSubqueryValue + "\"]]";
+ String jsonContent = "[\"any_array\", " + expectedJsonContent + "]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedSubQueriesCount, anyVar.getAnyVars().size());
+ assertEquals(expectedSubqueryValue, anyVar.getAnyVars().get(0).getValue());
+ }
+
+ @Test
+ public void testAnyArrayWithMultipleAnyVars() {
+ String expectedSubqueryStringValue = "test";
+ Long expectedSubqueryIntValue = 1234L;
+ int expectedSubQueriesCount = 2;
+ String jsonContent = "[\"any_array\", [[\"string\", \"" + expectedSubqueryStringValue + "\"], [\"uint32\", " + expectedSubqueryIntValue + "]]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedSubQueriesCount, anyVar.getAnyVars().size());
+ assertEquals(expectedSubqueryStringValue, anyVar.getAnyVars().get(0).getValue());
+ assertEquals(expectedSubqueryIntValue, anyVar.getAnyVars().get(1).getValue());
+ }
+
+ @Test
+ public void testEmptyNestedAnyArray() {
+ int expectedValue = 1;
+ int expectedNestedArrays = 0;
+ String jsonContent = "[\"any_array\", [[\"any_array\", []]]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getAnyVars().size());
+ assertEquals(expectedNestedArrays, anyVar.getAnyVars().get(0).getAnyVars().size());
+ }
+
+ @Test
+ public void testSimpleNestedAnyArray() {
+ int expectedValue = 1;
+ int expectedNestedArrays = 1;
+ String jsonContent = "[\"any_array\", [[\"any_array\", [[\"string\", \"test\"]]]]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedValue, anyVar.getAnyVars().size());
+ assertEquals(expectedNestedArrays, anyVar.getAnyVars().get(0).getAnyVars().size());
+ }
+
+ @Test
+ public void testEmptyValueAnyObject() {
+ String expectedName = "test";
+ int expectedNestedArrays = 1;
+ String jsonContent = "[\"any_object\",[{\"name\":\"" + expectedName + "\",\"value\":[]}]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedNestedArrays, anyVar.getFields().size());
+ assertEquals(expectedName, anyVar.getFields().get(0).getName());
+ }
+
+ @Test
+ public void testSimpleAnyObject() {
+ String expectedName = "test";
+ BigInteger expectedIntValue = new BigInteger("7");
+ String expectedJsonContent = "{\"" + expectedName + "\":\"" + expectedIntValue + "\"}";
+ int expectedNestedArrays = 1;
+ String jsonContent = "[\"any_object\",[{\"name\":\"" + expectedName + "\",\"value\":[\"uint64\"," + expectedIntValue + "]}]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedNestedArrays, anyVar.getFields().size());
+ assertEquals(expectedName, anyVar.getFields().get(0).getName());
+ assertEquals(expectedIntValue, anyVar.getFields().get(0).getValue().getValue());
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, expectedJsonContent);
+ }
+
+ @Test
+ public void testAnyObjectWithAnyArray() {
+ String expectedName = "test";
+ String expectedJsonContent = "{\"test\":[\"test2\"]}";
+ String jsonContent = "[\"any_object\",[{\"name\":\"" + expectedName + "\",\"value\":[\"any_array\", [[\"string\", \"test2\"]]]}]]";
+
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, expectedJsonContent);
+ }
+
+ @Test
+ public void testNestedAnyObjects() {
+ String expectedName = "test";
+ int expectedNestedArrays = 1;
+ int expectedSubNestedArrays = 1;
+ String jsonContent = "[\"any_object\",[{\"name\":\"quote1\",\"value\":[\"any_object\",[{\"name\":\"quote2\",\"value\":\"" + expectedName + "\"}]]}]]";
+ String expectedJsonContent = "{\"quote1\":{\"quote2\":\"" + expectedName + "\"}}";
+
+ // FromJSON test
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedNestedArrays, anyVar.getFields().size());
+ assertEquals(expectedSubNestedArrays, anyVar.getFields().get(0).getValue().getFields().size());
+ assertEquals(expectedName, anyVar.getFields().get(0).getValue().getFields().get(0).getValue().getValue());
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, expectedJsonContent);
+ }
+
+ @Test
+ public void testFullAnyObjectConversion() {
+ int expectedNestedArrays = 7;
+ int expectedBidsNestedArrays = 1;
+ int expectedBidsEdgesNestedArrays = 4;
+ String jsonContent = "[\"any_object\",[{\"name\":\"quote\",\"value\":[\"string\",\"538059690.21 USD\"]},{\"name\":\"base\",\"value\":[\"string\",\"89352.54000000 BTC\"]},{\"name\":\"bancorPrice\",\"value\":[\"string\",\"6021.76 USD\"]},{\"name\":\"lastTradePrice\",\"value\":[\"string\",\"6010.87 USD\"]},{\"name\":\"lastTradeQuantity\",\"value\":[\"string\",\"161.89085947 BTC\"]},{\"name\":\"asks\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[]]}]]},{\"name\":\"bids\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"4\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867124500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:38:46.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"9\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867454500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:44:15.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"10\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867537500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:45:38.500\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"7\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867290500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5199.50 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:41:31.000\"]}]]}]]]]}]]}]]";
+ String expectedJsonContent = "{\"quote\":\"538059690.21 USD\",\"base\":\"89352.54000000 BTC\",\"bancorPrice\":\"6021.76 USD\",\"lastTradePrice\":\"6010.87 USD\",\"lastTradeQuantity\":\"161.89085947 BTC\",\"asks\":{\"edges\":[]},\"bids\":{\"edges\":[{\"node\":{\"orderId\":\"4\",\"owner\":\"maker\",\"handle\":\"1594867124500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:38:46.000\"}},{\"node\":{\"orderId\":\"9\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867454500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:44:15.000\"}},{\"node\":{\"orderId\":\"10\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867537500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:45:38.500\"}},{\"node\":{\"orderId\":\"7\",\"owner\":\"maker\",\"handle\":\"1594867290500000\",\"price\":\"5199.50 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:41:31.000\"}}]}}";
+
+ // FromJSON test
+ AnyVar anyVar = this.gson.fromJson(jsonContent, AnyVar.class);
+
+ assertNotNull(anyVar);
+ assertEquals(expectedNestedArrays, anyVar.getFields().size());
+ assertEquals(expectedBidsNestedArrays, anyVar.getFields().get(6).getValue().getFields().size());
+ assertEquals(expectedBidsEdgesNestedArrays, anyVar.getFields().get(6).getValue().getFields().get(0).getValue().getAnyVars().size());
+
+ String toJSON = this.gson.toJson(anyVar);
+ assertEquals(toJSON, expectedJsonContent);
+ }
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/models/queryit/FieldTest.java b/eosiojava/src/test/java/one/block/eosiojava/models/queryit/FieldTest.java
new file mode 100644
index 0000000..32b9521
--- /dev/null
+++ b/eosiojava/src/test/java/one/block/eosiojava/models/queryit/FieldTest.java
@@ -0,0 +1,108 @@
+package one.block.eosiojava.models.queryit;
+
+import static junit.framework.TestCase.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class FieldTest {
+ private Field field;
+
+ @Before
+ public void setup() {
+ field = new Field();
+ }
+
+ @Test
+ public void testHasValueWithoutValue() {
+ assertFalse(field.hasValue());
+ }
+
+ @Test
+ public void testHasValue() {
+ field.setValue(new AnyVar());
+ assertTrue(field.hasValue());
+ }
+
+ @Test
+ public void testHasTypeWithoutValue() {
+ assertFalse(field.hasType());
+ }
+
+ @Test
+ public void testHasType() {
+ String type = "type";
+ setType(type);
+
+ assertTrue(field.hasType());
+ }
+
+ @Test
+ public void testHasTypeWithParamWithoutValue() {
+ String typeToCheck = "type";
+ assertFalse(field.hasType(typeToCheck));
+ }
+
+ @Test
+ public void testHasTypeWithParamWithoutCorrectValue() {
+ String typeToCheck = "type";
+ setType("othertype");
+ assertFalse(field.hasType(typeToCheck));
+ }
+
+ @Test
+ public void testHasTypeWithParam() {
+ String typeToCheck = "type";
+ setType(typeToCheck);
+ assertTrue(field.hasType(typeToCheck));
+ }
+
+ @Test
+ public void testGetTypeWithoutValue() {
+ assertNull(field.getType());
+ }
+
+ @Test
+ public void testGetType() {
+ String type = "type";
+ setType(type);
+
+ assertEquals(type, field.getType());
+ }
+
+ @Test
+ public void testGetAnyVarValueWithoutValue() {
+ assertNull(field.getAnyVarValue());
+ }
+
+ @Test
+ public void testGetAnyVarValue() {
+ Object test = "test";
+ setValue(test);
+ assertEquals(test, field.getAnyVarValue());
+ }
+
+ @Test
+ public void testHasPrimitiveValueWithoutValue() {
+ assertFalse(field.hasPrimitiveValue());
+ }
+
+ @Test
+ public void testHasPrimitiveValue() {
+ Object test = "test";
+ setValue(test);
+ assertTrue(field.hasPrimitiveValue());
+ }
+
+ private void setType(String type) {
+ AnyVar anyVar = new AnyVar();
+ anyVar.setType(type);
+ field.setValue(anyVar);
+ }
+
+ private void setValue(Object value) {
+ AnyVar anyVar = new AnyVar();
+ anyVar.setValue(value);
+ field.setValue(anyVar);
+ }
+}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/session/NegativeTransactionProcessorTest.java b/eosiojava/src/test/java/one/block/eosiojava/session/NegativeTransactionProcessorTest.java
index e5ffd5f..295c9f5 100644
--- a/eosiojava/src/test/java/one/block/eosiojava/session/NegativeTransactionProcessorTest.java
+++ b/eosiojava/src/test/java/one/block/eosiojava/session/NegativeTransactionProcessorTest.java
@@ -18,6 +18,7 @@
import one.block.eosiojava.error.rpcProvider.GetInfoRpcError;
import one.block.eosiojava.error.rpcProvider.GetRequiredKeysRpcError;
import one.block.eosiojava.error.rpcProvider.PushTransactionRpcError;
+import one.block.eosiojava.error.rpcProvider.SendTransactionRpcError;
import one.block.eosiojava.error.serializationProvider.DeserializeTransactionError;
import one.block.eosiojava.error.serializationProvider.SerializeError;
import one.block.eosiojava.error.serializationProvider.SerializeTransactionError;
@@ -47,6 +48,7 @@
import one.block.eosiojava.models.rpcProvider.request.GetBlockRequest;
import one.block.eosiojava.models.rpcProvider.request.GetRequiredKeysRequest;
import one.block.eosiojava.models.rpcProvider.request.PushTransactionRequest;
+import one.block.eosiojava.models.rpcProvider.request.SendTransactionRequest;
import one.block.eosiojava.models.rpcProvider.response.GetBlockResponse;
import one.block.eosiojava.models.rpcProvider.response.GetInfoResponse;
import one.block.eosiojava.models.rpcProvider.response.GetRequiredKeysResponse;
@@ -419,8 +421,8 @@ public void broadCast_thenFailWithPushTransactionError() throws TransactionBroad
// Mock PushTransaction RPC to throw error
try {
- when(this.mockedRpcProvider.pushTransaction(any(PushTransactionRequest.class))).thenThrow(new PushTransactionRpcError());
- } catch (PushTransactionRpcError pushTransactionRpcError) {
+ when(this.mockedRpcProvider.sendTransaction(any(SendTransactionRequest.class))).thenThrow(new SendTransactionRpcError());
+ } catch (SendTransactionRpcError pushTransactionRpcError) {
pushTransactionRpcError.printStackTrace();
fail("Exception should not be thrown here for mocking pushTransaction");
}
diff --git a/eosiojava/src/test/java/one/block/eosiojava/session/TransactionProcessorTest.java b/eosiojava/src/test/java/one/block/eosiojava/session/TransactionProcessorTest.java
index bbcb04c..01c3822 100644
--- a/eosiojava/src/test/java/one/block/eosiojava/session/TransactionProcessorTest.java
+++ b/eosiojava/src/test/java/one/block/eosiojava/session/TransactionProcessorTest.java
@@ -18,6 +18,8 @@
import one.block.eosiojava.error.rpcProvider.GetInfoRpcError;
import one.block.eosiojava.error.rpcProvider.GetRequiredKeysRpcError;
import one.block.eosiojava.error.rpcProvider.PushTransactionRpcError;
+import one.block.eosiojava.error.rpcProvider.SendTransactionRpcError;
+import one.block.eosiojava.error.serializationProvider.DeserializeError;
import one.block.eosiojava.error.serializationProvider.DeserializeTransactionError;
import one.block.eosiojava.error.serializationProvider.SerializeError;
import one.block.eosiojava.error.serializationProvider.SerializeTransactionError;
@@ -44,10 +46,13 @@
import one.block.eosiojava.models.rpcProvider.request.GetBlockRequest;
import one.block.eosiojava.models.rpcProvider.request.GetRequiredKeysRequest;
import one.block.eosiojava.models.rpcProvider.request.PushTransactionRequest;
+import one.block.eosiojava.models.rpcProvider.request.SendTransactionRequest;
import one.block.eosiojava.models.rpcProvider.response.GetBlockResponse;
import one.block.eosiojava.models.rpcProvider.response.GetInfoResponse;
import one.block.eosiojava.models.rpcProvider.response.GetRequiredKeysResponse;
import one.block.eosiojava.models.rpcProvider.response.PushTransactionResponse;
+import one.block.eosiojava.models.rpcProvider.response.SendTransactionResponse;
+import one.block.eosiojava.models.rpcProvider.response.TransactionResponse;
import one.block.eosiojava.models.signatureProvider.EosioTransactionSignatureRequest;
import one.block.eosiojava.models.signatureProvider.EosioTransactionSignatureResponse;
import one.block.eosiojava.utilities.DateFormatter;
@@ -144,9 +149,9 @@ public void broadcast() {
}
try {
- PushTransactionResponse pushTransactionResponse = processor.broadcast();
- assertNotNull(pushTransactionResponse);
- assertEquals(DUMP_TRANSACTION_ID, pushTransactionResponse.getTransactionId());
+ TransactionResponse transactionResponse = processor.broadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(DUMP_TRANSACTION_ID, transactionResponse.getTransactionId());
} catch (TransactionBroadCastError transactionBroadCastError) {
transactionBroadCastError.printStackTrace();
fail("Exception should not be thrown here for calling broadcast");
@@ -160,9 +165,9 @@ public void signAndBroadcast() {
assertNotNull(processor);
try {
- PushTransactionResponse pushTransactionResponse = processor.signAndBroadcast();
- assertNotNull(pushTransactionResponse);
- assertEquals(DUMP_TRANSACTION_ID, pushTransactionResponse.getTransactionId());
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(DUMP_TRANSACTION_ID, transactionResponse.getTransactionId());
} catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
transactionSignAndBroadCastError.printStackTrace();
fail("Exception should not be thrown here for calling signAndBroadcast");
@@ -377,9 +382,9 @@ public void setRequiredKeys() {
processor.setRequiredKeys(requiredKeys);
try {
- PushTransactionResponse pushTransactionResponse = processor.signAndBroadcast();
- assertNotNull(pushTransactionResponse);
- assertEquals(DUMP_TRANSACTION_ID, pushTransactionResponse.getTransactionId());
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(DUMP_TRANSACTION_ID, transactionResponse.getTransactionId());
} catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
transactionSignAndBroadCastError.printStackTrace();
fail("Exception should not be thrown here for calling signAndBroadcast");
@@ -392,10 +397,10 @@ public void isAllowTransactionToBeModified() {
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetInfoResponse, GetInfoResponse.class),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetBlockResponse, GetBlockResponse.class),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetRequiredKeysResponse, GetRequiredKeysResponse.class),
- Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(MOCKED_PUSHTRANSACTION_RESPONE_JSON, PushTransactionResponse.class));
+ Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(getMockedSendTransactionResponseJson(), SendTransactionResponse.class));
- this.mockAbiProvider(EOSIOTOKENABIJSON);
- this.mockSerializationProvider(MOCKED_ACTION_HEX, MOCKED_TRANSACTION_HEX, mockedDeserilizedTransaction);
+ this.mockAbiProvider(EOSIOABIJSON);
+ this.mockSerializationProvider(MOCKED_ACTION_HEX, MOCKED_TRANSACTION_HEX, mockedDeserilizedTransaction, MOCKED_RETURN_VALUE_JSON);
this.mockSignatureProvider(Arrays.asList("Key1", "Key2"),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN)
.fromJson(mockedEosioTransactionSignatureResponseModifiedTransactionJSON, EosioTransactionSignatureResponse.class));
@@ -415,9 +420,9 @@ public void isAllowTransactionToBeModified() {
assertTrue(processor.isTransactionModificationAllowed());
try {
- PushTransactionResponse pushTransactionResponse = processor.signAndBroadcast();
- assertNotNull(pushTransactionResponse);
- assertEquals(DUMP_TRANSACTION_ID, pushTransactionResponse.getTransactionId());
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(DUMP_TRANSACTION_ID, transactionResponse.getTransactionId());
// after signing and broadcast, serialized transaction is updated
assertEquals(MOCKED_TRANSACTION_HEX_MODIFIED, processor.getSerializedTransaction());
@@ -456,9 +461,9 @@ public void testPresetTransaction() {
}
try {
- PushTransactionResponse pushTransactionResponse = processor.signAndBroadcast();
- assertNotNull(pushTransactionResponse);
- assertEquals(DUMP_TRANSACTION_ID, pushTransactionResponse.getTransactionId());
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(DUMP_TRANSACTION_ID, transactionResponse.getTransactionId());
} catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
transactionSignAndBroadCastError.printStackTrace();
fail("Exception should not be thrown here for sign and broadcast");
@@ -584,15 +589,209 @@ public void testContextFreeActionPrepareWithData() {
}
}
+ @Test
+ public void testDeserializeActionTraceWithNoReturnValue() {
+ String mockedActionTraceWithSimpleReturnValue = getMockedProcessedActionTrace("", "retval_null");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithSimpleReturnValue);
+ String expectedJson = null;
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, EOSIOABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ @Test
+ public void testDeserializeActionTraceWithSimpleReturnValue() {
+ String mockedActionTraceWithSimpleReturnValue = getMockedProcessedActionTrace("0a000000", "retval_simple");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithSimpleReturnValue);
+ String expectedJson = "10";
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, EOSIOABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ @Test
+ public void testDeserializeActionTraceWithComplexReturnValue() {
+ String mockedActionTraceWithComplexReturnValue = getMockedProcessedActionTrace("d2040000000000000090b1ca", "retval_complex");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithComplexReturnValue);
+ String expectedJson = "{\"id\":1234,\"name\":\"test\"}";
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, EOSIOABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ @Test
+ public void testDeserializeQueryItActionTrace() {
+ String mockedActionTraceWithSimpleReturnValue = getMockedProcessedActionTrace("0000000c5b22737472696e67222c2274657374225d", "queryit");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithSimpleReturnValue);
+ String expectedJson = "\"test\"";
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, QUERYITABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ @Test
+ public void testDeserializeB1XQueryItActionTraceSignAndBroadcast() {
+ String returnValue = "0D070571756F74650C103533383035393639302E32312055534404626173650C1238393335322E3534303030303030204254430B62616E636F7250726963650C0B363032312E3736205553440E6C617374547261646550726963650C0B363031302E383720555344116C61737454726164655175616E746974790C103136312E3839303835393437204254430461736B730D010565646765730E0004626964730D010565646765730E040D01046E6F64650D08076F726465724964020400000000000000056F776E65720C056D616B65720668616E646C650220766BF085AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0E312E3030303030303030204254430473697A650C0E312E30303030303030302042544307637265617465640980791FA58CAA05000D01046E6F64650D08076F726465724964020900000000000000056F776E65720C0B6D61786E616D73746F726D0668616E646C6502A0DC160486AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0F31302E3030303030303030204254430473697A650C0F31302E303030303030303020425443076372656174656409C09DBBB88CAA05000D01046E6F64650D08076F726465724964020A00000000000000056F776E65720C0B6D61786E616D73746F726D0668616E646C65026057090986AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0F31302E3030303030303030204254430473697A650C0F31302E303030303030303020425443076372656174656409A0B9B5BD8CAA05000D01046E6F64650D08076F726465724964020700000000000000056F776E65720C056D616B65720668616E646C6502A06B50FA85AA05000570726963650C0B353139392E35302055534404636F73740C08302E3030205553440972656D61696E696E670C0E312E3030303030303030204254430473697A650C0E312E303030303030303020425443076372656174656409C02CF5AE8CAA0500";
+ String mockedActionTraceWithSimpleReturnValue = getMockedProcessedActionTrace(returnValue, "queryit");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithSimpleReturnValue);
+ String expectedJson = "[\"any_object\",[{\"name\":\"quote\",\"value\":[\"string\",\"538059690.21 USD\"]},{\"name\":\"base\",\"value\":[\"string\",\"89352.54000000 BTC\"]},{\"name\":\"bancorPrice\",\"value\":[\"string\",\"6021.76 USD\"]},{\"name\":\"lastTradePrice\",\"value\":[\"string\",\"6010.87 USD\"]},{\"name\":\"lastTradeQuantity\",\"value\":[\"string\",\"161.89085947 BTC\"]},{\"name\":\"asks\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[]]}]]},{\"name\":\"bids\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"4\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867124500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:38:46.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"9\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867454500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:44:15.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"10\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867537500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:45:38.500\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"7\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867290500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5199.50 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:41:31.000\"]}]]}]]]]}]]}]]";
+ String expectedSerializedJson = "{\"quote\":\"538059690.21 USD\",\"base\":\"89352.54000000 BTC\",\"bancorPrice\":\"6021.76 USD\",\"lastTradePrice\":\"6010.87 USD\",\"lastTradeQuantity\":\"161.89085947 BTC\",\"asks\":{\"edges\":[]},\"bids\":{\"edges\":[{\"node\":{\"orderId\":\"4\",\"owner\":\"maker\",\"handle\":\"1594867124500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:38:46.000\"}},{\"node\":{\"orderId\":\"9\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867454500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:44:15.000\"}},{\"node\":{\"orderId\":\"10\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867537500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:45:38.500\"}},{\"node\":{\"orderId\":\"7\",\"owner\":\"maker\",\"handle\":\"1594867290500000\",\"price\":\"5199.50 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:41:31.000\"}}]}}";
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, QUERYITABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ TransactionResponse transactionResponse = processor.signAndBroadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedSerializedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionSignAndBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ @Test
+ public void testDeserializeB1XQueryItActionTraceBroadcast() {
+ String returnValue = "0D070571756F74650C103533383035393639302E32312055534404626173650C1238393335322E3534303030303030204254430B62616E636F7250726963650C0B363032312E3736205553440E6C617374547261646550726963650C0B363031302E383720555344116C61737454726164655175616E746974790C103136312E3839303835393437204254430461736B730D010565646765730E0004626964730D010565646765730E040D01046E6F64650D08076F726465724964020400000000000000056F776E65720C056D616B65720668616E646C650220766BF085AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0E312E3030303030303030204254430473697A650C0E312E30303030303030302042544307637265617465640980791FA58CAA05000D01046E6F64650D08076F726465724964020900000000000000056F776E65720C0B6D61786E616D73746F726D0668616E646C6502A0DC160486AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0F31302E3030303030303030204254430473697A650C0F31302E303030303030303020425443076372656174656409C09DBBB88CAA05000D01046E6F64650D08076F726465724964020A00000000000000056F776E65720C0B6D61786E616D73746F726D0668616E646C65026057090986AA05000570726963650C0B353030302E30302055534404636F73740C08302E3030205553440972656D61696E696E670C0F31302E3030303030303030204254430473697A650C0F31302E303030303030303020425443076372656174656409A0B9B5BD8CAA05000D01046E6F64650D08076F726465724964020700000000000000056F776E65720C056D616B65720668616E646C6502A06B50FA85AA05000570726963650C0B353139392E35302055534404636F73740C08302E3030205553440972656D61696E696E670C0E312E3030303030303030204254430473697A650C0E312E303030303030303020425443076372656174656409C02CF5AE8CAA0500";
+ String mockedActionTraceWithSimpleReturnValue = getMockedProcessedActionTrace(returnValue, "queryit");
+ String mockPushTransactionResponseJson = this.getMockedSendTransactionResponseJson(mockedActionTraceWithSimpleReturnValue);
+ String expectedJson = "[\"any_object\",[{\"name\":\"quote\",\"value\":[\"string\",\"538059690.21 USD\"]},{\"name\":\"base\",\"value\":[\"string\",\"89352.54000000 BTC\"]},{\"name\":\"bancorPrice\",\"value\":[\"string\",\"6021.76 USD\"]},{\"name\":\"lastTradePrice\",\"value\":[\"string\",\"6010.87 USD\"]},{\"name\":\"lastTradeQuantity\",\"value\":[\"string\",\"161.89085947 BTC\"]},{\"name\":\"asks\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[]]}]]},{\"name\":\"bids\",\"value\":[\"any_object\",[{\"name\":\"edges\",\"value\":[\"any_array\",[[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"4\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867124500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:38:46.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"9\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867454500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:44:15.000\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"10\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maxnamstorm\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867537500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5000.00 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"10.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:45:38.500\"]}]]}]],[\"any_object\",[{\"name\":\"node\",\"value\":[\"any_object\",[{\"name\":\"orderId\",\"value\":[\"uint64\",\"7\"]},{\"name\":\"owner\",\"value\":[\"string\",\"maker\"]},{\"name\":\"handle\",\"value\":[\"uint64\",\"1594867290500000\"]},{\"name\":\"price\",\"value\":[\"string\",\"5199.50 USD\"]},{\"name\":\"cost\",\"value\":[\"string\",\"0.00 USD\"]},{\"name\":\"remaining\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"size\",\"value\":[\"string\",\"1.00000000 BTC\"]},{\"name\":\"created\",\"value\":[\"time_point\",\"2020-07-16T10:41:31.000\"]}]]}]]]]}]]}]]";
+ String expectedSerializedJson = "{\"quote\":\"538059690.21 USD\",\"base\":\"89352.54000000 BTC\",\"bancorPrice\":\"6021.76 USD\",\"lastTradePrice\":\"6010.87 USD\",\"lastTradeQuantity\":\"161.89085947 BTC\",\"asks\":{\"edges\":[]},\"bids\":{\"edges\":[{\"node\":{\"orderId\":\"4\",\"owner\":\"maker\",\"handle\":\"1594867124500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:38:46.000\"}},{\"node\":{\"orderId\":\"9\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867454500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:44:15.000\"}},{\"node\":{\"orderId\":\"10\",\"owner\":\"maxnamstorm\",\"handle\":\"1594867537500000\",\"price\":\"5000.00 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"10.00000000 BTC\",\"size\":\"10.00000000 BTC\",\"created\":\"2020-07-16T10:45:38.500\"}},{\"node\":{\"orderId\":\"7\",\"owner\":\"maker\",\"handle\":\"1594867290500000\",\"price\":\"5199.50 USD\",\"cost\":\"0.00 USD\",\"remaining\":\"1.00000000 BTC\",\"size\":\"1.00000000 BTC\",\"created\":\"2020-07-16T10:41:31.000\"}}]}}";
+ this.mockDefaultSuccessData(mockPushTransactionResponseJson, expectedJson, QUERYITABIJSON);
+
+ TransactionProcessor processor = createAndPrepareTransaction(this.defaultActions());
+ assertNotNull(processor);
+
+ try {
+ assertTrue(processor.sign());
+ } catch (TransactionSignError transactionSignError) {
+ transactionSignError.printStackTrace();
+ fail("Exception should not be thrown here for calling sign");
+ }
+
+ try {
+ TransactionResponse transactionResponse = processor.broadcast();
+ assertNotNull(transactionResponse);
+ assertEquals(expectedSerializedJson, transactionResponse.getActionTraces().get(0).getDeserializedReturnValue());
+ } catch (TransactionBroadCastError transactionSignAndBroadCastError) {
+ transactionSignAndBroadCastError.printStackTrace();
+ fail("Exception should not be thrown here for calling signAndBroadcast");
+ }
+ }
+
+ private String getMockedProcessedActionTrace(String returnValueHex, String actionName) {
+ return "{\n"
+ + " \"action_ordinal\": 1,\n"
+ + " \"creator_action_ordinal\": 0,\n"
+ + " \"closest_unnotified_ancestor_action_ordinal\": 0,\n"
+ + " \"receipt\": {\n"
+ + " \"receiver\": \"account\",\n"
+ + " \"act_digest\": \"8f6c4be57658986020e3fc61294d339965a4491ddfae0ceacf598fcaf9955da0\",\n"
+ + " \"global_sequence\": 275242,\n"
+ + " \"recv_sequence\": 48,\n"
+ + " \"auth_sequence\": [[\n"
+ + " \"actor\",\n"
+ + " 40\n"
+ + " ]\n"
+ + " ],\n"
+ + " \"code_sequence\": 14,\n"
+ + " \"abi_sequence\": 14\n"
+ + " },\n"
+ + " \"receiver\": \"account\",\n"
+ + " \"act\": {\n"
+ + " \"account\": \"account\",\n"
+ + " \"name\": \"" + actionName + "\",\n"
+ + " \"authorization\": [{\n"
+ + " \"actor\": \"actor\",\n"
+ + " \"permission\": \"active\"\n"
+ + " }\n"
+ + " ],\n"
+ + " \"data\": {\n"
+ + " \"user\": \"test\"\n"
+ + " },\n"
+ + " \"hex_data\": \"000000000090b1ca\"\n"
+ + " },\n"
+ + " \"context_free\": false,\n"
+ + " \"elapsed\": 760,\n"
+ + " \"console\": \"Hi, test\",\n"
+ + " \"trx_id\": \"7f2ccf898efcb08dd64cadf4ca2bcd61f2577f40162928283038a6a6950e6683\",\n"
+ + " \"block_num\": 275159,\n"
+ + " \"block_time\": \"2020-06-25T17:24:18.000\",\n"
+ + " \"producer_block_id\": null,\n"
+ + " \"account_ram_deltas\": [],\n"
+ + " \"account_disk_deltas\": [],\n"
+ + " \"except\": null,\n"
+ + " \"error_code\": null,\n"
+ + " \"return_value\": \"" + returnValueHex + "\"\n"
+ + " }";
+ }
+
+ private String getMockedSendTransactionResponseJson() {
+ return getMockedSendTransactionResponseJson(null);
+ }
+
+ private String getMockedSendTransactionResponseJson(@Nullable String mockedProcessedActionTrace) {
+ if (mockedProcessedActionTrace != null) {
+ return "{\"transaction_id\":\"" + DUMP_TRANSACTION_ID + "\", \"processed\": { \"action_traces\": [" + mockedProcessedActionTrace + "]}}";
+ }
+
+ return "{\"transaction_id\":\"" + DUMP_TRANSACTION_ID + "\"}";
+ }
+
private void mockDefaultSuccessData() {
+ mockDefaultSuccessData(getMockedSendTransactionResponseJson(), MOCKED_RETURN_VALUE_JSON, EOSIOABIJSON);
+ }
+
+ private void mockDefaultSuccessData(String mockedPushTransactionResponseJson, String mockedReturnValueJson, String mockedAbiJson) {
this.mockRPC(
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetInfoResponse, GetInfoResponse.class),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetBlockResponse, GetBlockResponse.class),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedGetRequiredKeysResponse, GetRequiredKeysResponse.class),
- Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(MOCKED_PUSHTRANSACTION_RESPONE_JSON, PushTransactionResponse.class));
+ Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedPushTransactionResponseJson, SendTransactionResponse.class));
- this.mockAbiProvider(EOSIOTOKENABIJSON);
- this.mockSerializationProvider(MOCKED_ACTION_HEX, MOCKED_TRANSACTION_HEX, mockedDeserilizedTransaction);
+ this.mockAbiProvider(mockedAbiJson);
+ this.mockSerializationProvider(MOCKED_ACTION_HEX, MOCKED_TRANSACTION_HEX, mockedDeserilizedTransaction, mockedReturnValueJson);
this.mockSignatureProvider(Arrays.asList("Key1", "Key2"),
Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).fromJson(mockedEosioTransactionSignatureResponseJSON, EosioTransactionSignatureResponse.class));
}
@@ -664,7 +863,7 @@ private void mockRPC(
@Nullable GetInfoResponse getInfoResponse,
@Nullable GetBlockResponse getBlockResponse,
@Nullable GetRequiredKeysResponse getRequiredKeysResponse,
- @Nullable PushTransactionResponse pushTransactionResponse) {
+ @Nullable SendTransactionResponse sendTransactionResponse) {
if (getInfoResponse != null) {
try {
@@ -693,10 +892,10 @@ private void mockRPC(
}
}
- if (pushTransactionResponse != null) {
+ if (sendTransactionResponse != null) {
try {
- when(this.mockedRpcProvider.pushTransaction(any(PushTransactionRequest.class))).thenReturn(pushTransactionResponse);
- } catch (PushTransactionRpcError pushTransactionRpcError) {
+ when(this.mockedRpcProvider.sendTransaction(any(SendTransactionRequest.class))).thenReturn(sendTransactionResponse);
+ } catch (SendTransactionRpcError pushTransactionRpcError) {
pushTransactionRpcError.printStackTrace();
fail("Exception should not be thrown here for mocking pushTransaction");
}
@@ -715,7 +914,8 @@ private void mockAbiProvider(String abiJSON) {
private void mockSerializationProvider(
@Nullable final String mockedActionHex,
@Nullable String mockedTransactionHex,
- @Nullable String mockedDeserializedTransaction) {
+ @Nullable String mockedDeserializedTransaction,
+ @Nullable String mockedReturnValueJson) {
if (mockedActionHex != null) {
try {
@@ -750,6 +950,22 @@ public Object answer(InvocationOnMock invocationOnMock) {
fail("Exception should not be thrown here for mocking deserializeTransaction");
}
}
+
+ if (mockedReturnValueJson != null) {
+ try {
+ doAnswer(new Answer() {
+ @Override
+ public Object answer(InvocationOnMock invocationOnMock) {
+ Object[] args = invocationOnMock.getArguments();
+ ((AbiEosSerializationObject) args[0]).setJson(mockedReturnValueJson);
+ return null;
+ }
+ }).when(this.mockedSerializationProvider).deserialize(any(AbiEosSerializationObject.class));
+ } catch (DeserializeError deserializeTransactionError) {
+ deserializeTransactionError.printStackTrace();
+ fail("Exception should not be thrown here for mocking deserializeTransaction");
+ }
+ }
}
private void mockSignatureProvider(List mockedAvaialbleKeys, EosioTransactionSignatureResponse mockedResponse) {
@@ -768,10 +984,294 @@ private void mockSignatureProvider(List mockedAvaialbleKeys, EosioTransa
}
}
- private static final String EOSIOTOKENABIJSON = "{\"version\":\"eosio::abi/1.0\",\"types\":[{\"new_type_name\":\"account_name\",\"type\":\"name\"}],\"structs\":[{\"name\":\"transfer\",\"base\":\"\",\"fields\":[{\"name\":\"from\",\"type\":\"account_name\"},{\"name\":\"to\",\"type\":\"account_name\"},{\"name\":\"quantity\",\"type\":\"asset\"},{\"name\":\"memo\",\"type\":\"string\"}]},{\"name\":\"create\",\"base\":\"\",\"fields\":[{\"name\":\"issuer\",\"type\":\"account_name\"},{\"name\":\"maximum_supply\",\"type\":\"asset\"}]},{\"name\":\"issue\",\"base\":\"\",\"fields\":[{\"name\":\"to\",\"type\":\"account_name\"},{\"name\":\"quantity\",\"type\":\"asset\"},{\"name\":\"memo\",\"type\":\"string\"}]},{\"name\":\"account\",\"base\":\"\",\"fields\":[{\"name\":\"balance\",\"type\":\"asset\"}]},{\"name\":\"currency_stats\",\"base\":\"\",\"fields\":[{\"name\":\"supply\",\"type\":\"asset\"},{\"name\":\"max_supply\",\"type\":\"asset\"},{\"name\":\"issuer\",\"type\":\"account_name\"}]}],\"actions\":[{\"name\":\"transfer\",\"type\":\"transfer\",\"ricardian_contract\":\"---\\ntitle: Token Transfer\\nsummary: Transfer tokens from one account to another.\\nicon: https://cdn.testnet.dev.b1ops.net/token-transfer.png#ce51ef9f9eeca3434e85507e0ed49e76fff1265422bded0255f3196ea59c8b0c\\n---\\n\\n## Transfer Terms & Conditions\\n\\nI, {{from}}, certify the following to be true to the best of my knowledge:\\n\\n1. I certify that {{quantity}} is not the proceeds of fraudulent or violent activities.\\n2. I certify that, to the best of my knowledge, {{to}} is not supporting initiation of violence against others.\\n3. I have disclosed any contractual terms & conditions with respect to {{quantity}} to {{to}}.\\n\\nI understand that funds transfers are not reversible after the {{$transaction.delay_sec}} seconds or other delay as configured by {{from}}'s permissions.\\n\\nIf this action fails to be irreversibly confirmed after receiving goods or services from '{{to}}', I agree to either return the goods or services or resend {{quantity}} in a timely manner.\"},{\"name\":\"issue\",\"type\":\"issue\",\"ricardian_contract\":\"\"},{\"name\":\"create\",\"type\":\"create\",\"ricardian_contract\":\"\"}],\"tables\":[{\"name\":\"accounts\",\"index_type\":\"i64\",\"key_names\":[\"currency\"],\"key_types\":[\"uint64\"],\"type\":\"account\"},{\"name\":\"stat\",\"index_type\":\"i64\",\"key_names\":[\"currency\"],\"key_types\":[\"uint64\"],\"type\":\"currency_stats\"}],\"ricardian_clauses\":[],\"error_messages\":[],\"abi_extensions\":[],\"variants\":[]}";
+ private static final String EOSIOABIJSON = "{\n"
+ + " \"version\":\"eosio::abi/1.2\",\n"
+ + " \"types\":[\n"
+ + " {\n"
+ + " \"new_type_name\":\"account_name\",\n"
+ + " \"type\":\"name\"\n"
+ + " }\n"
+ + " ],\n"
+ + " \"structs\":[\n"
+ + " {\n"
+ + " \"name\":\"transfer\",\n"
+ + " \"base\":\"\",\n"
+ + " \"fields\":[\n"
+ + " {\n"
+ + " \"name\":\"from\",\n"
+ + " \"type\":\"account_name\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"to\",\n"
+ + " \"type\":\"account_name\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"quantity\",\n"
+ + " \"type\":\"asset\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"memo\",\n"
+ + " \"type\":\"string\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"create\",\n"
+ + " \"base\":\"\",\n"
+ + " \"fields\":[\n"
+ + " {\n"
+ + " \"name\":\"issuer\",\n"
+ + " \"type\":\"account_name\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"maximum_supply\",\n"
+ + " \"type\":\"asset\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"issue\",\n"
+ + " \"base\":\"\",\n"
+ + " \"fields\":[\n"
+ + " {\n"
+ + " \"name\":\"to\",\n"
+ + " \"type\":\"account_name\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"quantity\",\n"
+ + " \"type\":\"asset\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"memo\",\n"
+ + " \"type\":\"string\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"account\",\n"
+ + " \"base\":\"\",\n"
+ + " \"fields\":[\n"
+ + " {\n"
+ + " \"name\":\"balance\",\n"
+ + " \"type\":\"asset\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"currency_stats\",\n"
+ + " \"base\":\"\",\n"
+ + " \"fields\":[\n"
+ + " {\n"
+ + " \"name\":\"supply\",\n"
+ + " \"type\":\"asset\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"max_supply\",\n"
+ + " \"type\":\"asset\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"issuer\",\n"
+ + " \"type\":\"account_name\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_complex\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"user\",\n"
+ + " \"type\": \"name\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_simple\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"user\",\n"
+ + " \"type\": \"name\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_null\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"user\",\n"
+ + " \"type\": \"name\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"returnValue\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"id\",\n"
+ + " \"type\": \"uint32\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"name\",\n"
+ + " \"type\": \"name\"\n"
+ + " }\n"
+ + " ]\n"
+ + " }\n"
+ + " ],\n"
+ + " \"actions\":[\n"
+ + " {\n"
+ + " \"name\":\"transfer\",\n"
+ + " \"type\":\"transfer\",\n"
+ + " \"ricardian_contract\":\"---\\ntitle: Token Transfer\\nsummary: Transfer tokens from one account to another.\\nicon: https://cdn.testnet.dev.b1ops.net/token-transfer.png#ce51ef9f9eeca3434e85507e0ed49e76fff1265422bded0255f3196ea59c8b0c\\n---\\n\\n## Transfer Terms & Conditions\\n\\nI, {{from}}, certify the following to be true to the best of my knowledge:\\n\\n1. I certify that {{quantity}} is not the proceeds of fraudulent or violent activities.\\n2. I certify that, to the best of my knowledge, {{to}} is not supporting initiation of violence against others.\\n3. I have disclosed any contractual terms & conditions with respect to {{quantity}} to {{to}}.\\n\\nI understand that funds transfers are not reversible after the {{$transaction.delay_sec}} seconds or other delay as configured by {{from}}'s permissions.\\n\\nIf this action fails to be irreversibly confirmed after receiving goods or services from '{{to}}', I agree to either return the goods or services or resend {{quantity}} in a timely manner.\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"issue\",\n"
+ + " \"type\":\"issue\",\n"
+ + " \"ricardian_contract\":\"\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"create\",\n"
+ + " \"type\":\"create\",\n"
+ + " \"ricardian_contract\":\"\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_complex\",\n"
+ + " \"type\": \"retval_complex\",\n"
+ + " \"ricardian_contract\": \"\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_simple\",\n"
+ + " \"type\": \"retval_simple\",\n"
+ + " \"ricardian_contract\": \"\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_null\",\n"
+ + " \"type\": \"retval_null\",\n"
+ + " \"ricardian_contract\": \"\"\n"
+ + " }\n"
+ + " ],\n"
+ + " \"tables\":[\n"
+ + " {\n"
+ + " \"name\":\"accounts\",\n"
+ + " \"index_type\":\"i64\",\n"
+ + " \"key_names\":[\n"
+ + " \"currency\"\n"
+ + " ],\n"
+ + " \"key_types\":[\n"
+ + " \"uint64\"\n"
+ + " ],\n"
+ + " \"type\":\"account\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\":\"stat\",\n"
+ + " \"index_type\":\"i64\",\n"
+ + " \"key_names\":[\n"
+ + " \"currency\"\n"
+ + " ],\n"
+ + " \"key_types\":[\n"
+ + " \"uint64\"\n"
+ + " ],\n"
+ + " \"type\":\"currency_stats\"\n"
+ + " }\n"
+ + " ],\n"
+ + " \"ricardian_clauses\":[],\n"
+ + " \"error_messages\":[],\n"
+ + " \"abi_extensions\":[],\n"
+ + " \"variants\":[],\n"
+ + " \"action_results\": [\n"
+ + " {\n"
+ + " \"name\": \"retval_complex\",\n"
+ + " \"result_type\": \"returnValue\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"retval_simple\",\n"
+ + " \"result_type\": \"uint32\"\n"
+ + " }\n"
+ + " ]\n"
+ + "}";
+
+ private static final String QUERYITABIJSON = "{\n"
+ + " \"version\": \"eosio::abi/1.1\",\n"
+ + " \"types\": [\n"
+ + " {\n"
+ + " \"new_type_name\": \"any_array\",\n"
+ + " \"type\": \"anyvar[]\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"new_type_name\": \"any_object\",\n"
+ + " \"type\": \"field[]\"\n"
+ + " }\n"
+ + " ],\n"
+ + " \"structs\": [\n"
+ + " {\n"
+ + " \"name\": \"null_t\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": []\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"field\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"name\",\n"
+ + " \"type\": \"string\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"value\",\n"
+ + " \"type\": \"anyvar\"\n"
+ + " }\n"
+ + " ]\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"query\",\n"
+ + " \"base\": \"\",\n"
+ + " \"fields\": [\n"
+ + " {\n"
+ + " \"name\": \"method\",\n"
+ + " \"type\": \"string\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"arg\",\n"
+ + " \"type\": \"anyvar?\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"filter\",\n"
+ + " \"type\": \"query[]\"\n"
+ + " }\n"
+ + " ]\n"
+ + " }\n"
+ + " ],\n"
+ + " \"variants\": [\n"
+ + " {\n"
+ + " \"name\": \"anyvar\",\n"
+ + " \"types\": [\n"
+ + " \"null_t\",\n"
+ + " \"int64\",\n"
+ + " \"uint64\",\n"
+ + " \"int32\",\n"
+ + " \"uint32\",\n"
+ + " \"int16\",\n"
+ + " \"uint16\",\n"
+ + " \"int8\",\n"
+ + " \"uint8\",\n"
+ + " \"time_point\",\n"
+ + " \"checksum256\",\n"
+ + " \"float64\",\n"
+ + " \"string\",\n"
+ + " \"any_object\",\n"
+ + " \"any_array\",\n"
+ + " \"bytes\",\n"
+ + " \"symbol\",\n"
+ + " \"symbol_code\",\n"
+ + " \"asset\"\n"
+ + " ]\n"
+ + " }\n"
+ + " ]\n"
+ + "}";
private static final String DUMP_TRANSACTION_ID = "17335a29eae22e531966f3775e44f8b02173e780c9549881e01e470ff0ab46ce";
- private static final String MOCKED_PUSHTRANSACTION_RESPONE_JSON = "{\"transaction_id\":\"" + DUMP_TRANSACTION_ID + "\"}";
private static final BigInteger headBlockNum = BigInteger.valueOf(31984402L);
private static final String headBlockTime = "2019-04-01T22:08:40.000";
@@ -782,10 +1282,9 @@ private void mockSignatureProvider(List mockedAvaialbleKeys, EosioTransa
private static final String MOCKED_SIGNATURE = "SIG_R1_KsHAyy6EvQq2E6c7oxzxCtus5Jd4wP8KZkSxuhZUfxprU56okEWFjopjwy7wGH4fAjJKgTcceG4iUhZGRsWfYiDaTK5X5y";
private static final String MOCKED_CHAIN_ID = "Mocked chain id";
private static final String MOCKED_TRANSACTION_HEX_MODIFIED = "1ec3a35c1a706e886c51000000000100a6823403ea3055000000572d3ccdcd01000000000000c03400000000a8ed32322a000000000000c034000000000000a682a08601000000000004454f530000000009536f6d657468696e6700";
+ private static final String MOCKED_RETURN_VALUE_JSON = "{\"id\":1234,\"name\":\"test\"}";
private static final String MOCKED_CONTEXT_FREE_DATA_HEX = "C21BFB5AD4B64BFD04838B3B14F0CE0C7B92136CAC69BFED41BEF92F95A9BB20";
-
-
// Expectation
// headBlockTime + default 5 minutes
private static final String expectedExpiration = "2019-04-01T22:13:40.000";
@@ -868,5 +1367,4 @@ private void mockSignatureProvider(List mockedAvaialbleKeys, EosioTransa
",\n" +
"\"transaction_extensions\" : []\n" +
"}";
-
}