From ddd7e34f5ff8b1ed0753ec594c98b847fe184af3 Mon Sep 17 00:00:00 2001 From: davassi Date: Sun, 13 Nov 2016 11:20:20 +0100 Subject: [PATCH] 100% command coverage for IRI 1.1.0 --- README.md | 15 ++- pom.xml | 6 +- src/main/java/jota/IotaAPICommands.java | 10 +- src/main/java/jota/IotaAPIProxy.java | 80 +++++++++----- src/main/java/jota/IotaAPIService.java | 103 ++++++++++-------- .../request/IotaAttachToTangleRequest.java | 23 ++++ .../IotaBroadcastTransactionRequest.java | 17 +++ .../jota/dto/request/IotaCommandRequest.java | 4 + .../request/IotaFindTransactionsRequest.java | 3 - .../dto/request/IotaGetBalancesRequest.java | 21 ++++ .../IotaGetTransactionsToApproveRequest.java | 10 +- .../dto/request/IotaNeighborsRequest.java | 22 ++++ .../request/IotaStoreTransactionsRequest.java | 17 +++ .../dto/response/AddNeighborsResponse.java | 10 ++ .../BroadcastTransactionsResponse.java | 5 + .../response/GetAttachToTangleResponse.java | 10 ++ .../dto/response/GetBalancesResponse.java | 20 ++++ .../GetTransactionsToApproveResponse.java | 6 +- .../InterruptAttachingToTangleResponse.java | 5 + .../dto/response/RemoveNeighborsResponse.java | 10 ++ .../response/StoreTransactionsResponse.java | 6 + src/test/java/jota/IotaAPIProxyTest.java | 66 ++++++++--- 22 files changed, 353 insertions(+), 116 deletions(-) create mode 100644 src/main/java/jota/dto/request/IotaAttachToTangleRequest.java create mode 100644 src/main/java/jota/dto/request/IotaBroadcastTransactionRequest.java create mode 100644 src/main/java/jota/dto/request/IotaGetBalancesRequest.java create mode 100644 src/main/java/jota/dto/request/IotaNeighborsRequest.java create mode 100644 src/main/java/jota/dto/request/IotaStoreTransactionsRequest.java create mode 100644 src/main/java/jota/dto/response/AddNeighborsResponse.java create mode 100644 src/main/java/jota/dto/response/BroadcastTransactionsResponse.java create mode 100644 src/main/java/jota/dto/response/GetAttachToTangleResponse.java create mode 100644 src/main/java/jota/dto/response/GetBalancesResponse.java create mode 100644 src/main/java/jota/dto/response/InterruptAttachingToTangleResponse.java create mode 100644 src/main/java/jota/dto/response/RemoveNeighborsResponse.java create mode 100644 src/main/java/jota/dto/response/StoreTransactionsResponse.java diff --git a/README.md b/README.md index 9eac690..c0f5a0e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ ##Introduction -The JOTA library is a simple Java8 wrapper around [[IOTA]](http://www.iotatoken.com/) Node's JSON-REST HTTP interface. +The JOTA library is a simple Java wrapper around [[IOTA]](http://www.iotatoken.com/) Node's JSON-REST HTTP interface. It allows to connect easily using java directly to a local or a remote [[IOTA node]](https://iota.readme.io/docs/syncing-to-the-network). -* **Latest release:** 0.0.1 Snapshot +* **Latest release:** 1.0.0 Release * **Compatibility:** in development to be fully compatible with IOTA IRI v1.1.0 -* **API coverage:** 11 of 14 commands fully implemented +* **API coverage:** 14 of 14 commands fully implemented * **License:** Apache License 2.0 -* **Readme updated:** 2016-10-07 14:23:43 (UTC) +* **Readme updated:** 2016-11-12 21:05:02 (UTC) A list of all *IOTA* JSON-REST API commands currently supported by jota wrapper can be found in the `Commands` enum (see [here](https://github.com/davassi/JOTA/blob/master/src/main/java/jota/IotaAPICommands.java) for more details). @@ -17,7 +17,7 @@ All the boilerplate code for connecting to the node rest interface has been elim ##Technologies & dependencies -The JOTA library has been designed to be used exclusively with Java 8+. +The JOTA library has been designed to be used with Java6+, in order to promote compatibility with Android. Core dependencies: * Retrofit Client 2.1.0 [[link]](https://square.github.io/retrofit/) @@ -28,10 +28,9 @@ Other dependencies: * Simple Logging Facade for Java 1.7.21 [[link]](http://www.slf4j.org/) * Apache Commons Lang 3.3.2 [[link]](http://commons.apache.org/proper/commons-lang/) - ##Getting started -Connect to your local node with the default settings is quite straitforward: it requires only 2 lines of code. For example, in order to fetch the Node Info: +Connect to your local node with the default settings is quite straightforward: it requires only 2 lines of code. For example, in order to fetch the Node Info: IotaApiProxy api = new IotaApiProxy.Builder.build(); GetNodeInfoResponse response = api.getNodeInfo(); @@ -50,7 +49,6 @@ Jota is still *not* in the central maven repository. It will be available when i In order to communicate with *IOTA node*, JOTA needs to be aware of your node's exact configuration. The easiest way of providing this information is via a `node_config.properties` file, for example: - iota.node.protocol=http iota.node.host=127.0.0.1 iota.node.port=14265 @@ -68,3 +66,4 @@ If JOTA has been useful to you and you feel like contributing, consider posting * Bitcoin: `3FGCHqhG1SUpgn2eS1Agq2KnxJemWnQFbB` + diff --git a/pom.xml b/pom.xml index 8c7660e..cf6c74d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,12 @@ 4.0.0 com.iota jota - 0.0.1-SNAPSHOT + 1.0.0-RELEASE JOTA - JOTA library is a simple Java8 wrapper around IOTA Node's JSON-REST HTTP interface. + JOTA library is a simple Java wrapper around IOTA Node's JSON-REST HTTP interface. - 1.8 + 1.7 UTF-8 diff --git a/src/main/java/jota/IotaAPICommands.java b/src/main/java/jota/IotaAPICommands.java index 90dbfb1..96e0b5d 100644 --- a/src/main/java/jota/IotaAPICommands.java +++ b/src/main/java/jota/IotaAPICommands.java @@ -2,15 +2,17 @@ package jota; /** * IOTA's node command list + * + * 'params' is not currently used. */ public enum IotaAPICommands { GET_NODE_INFO("getNodeInfo", 0), GET_NEIGHBORS("getNeighbors", 0), - ADD_NEIGHBORS("addNeighbors", 0), - REMOVE_NEIGHBORS("removeNeighbors",0), + ADD_NEIGHBORS("addNeighbors", 1), + REMOVE_NEIGHBORS("removeNeighbors",1), GET_TIPS("getTips",0), - FIND_TRANSACTIONS("findTransactions", 0), + FIND_TRANSACTIONS("findTransactions", 1), GET_TRYTES("getTrytes", 0), GET_INCLUSIONS_STATES("getInclusionStates", 0), GET_BALANCES("getBalances", 0), @@ -20,7 +22,7 @@ public enum IotaAPICommands { BROADCAST_TRANSACTIONS("broadcastTransactions",0), STORE_TRANSACTIONS("storeTransactions", 0); - private IotaAPICommands(String command, int params) { + IotaAPICommands(String command, int params) { this.command = command; this.params = params; } diff --git a/src/main/java/jota/IotaAPIProxy.java b/src/main/java/jota/IotaAPIProxy.java index b9f84b1..3b4e49e 100644 --- a/src/main/java/jota/IotaAPIProxy.java +++ b/src/main/java/jota/IotaAPIProxy.java @@ -78,6 +78,16 @@ public class IotaAPIProxy { return wrapCheckedException(res).body(); } + public AddNeighborsResponse addNeighbors(String ... uris) { + final Call res = service.addNeighbors(IotaNeighborsRequest.createAddNeighborsRequest(uris)); + return wrapCheckedException(res).body(); + } + + public RemoveNeighborsResponse removeNeighbors(String ... uris) { + final Call res = service.removeNeighbors(IotaNeighborsRequest.createRemoveNeighborsRequest(uris)); + return wrapCheckedException(res).body(); + } + public GetTipsResponse getTips() { final Call res = service.getTips(IotaCommandRequest.createGetTipsRequest()); return wrapCheckedException(res).body(); @@ -129,11 +139,35 @@ public class IotaAPIProxy { return wrapCheckedException(res).body(); } - public GetTransactionsToApproveResponse getTransactionsToApprove(String milestone) { - final Call res = service.getTransactionsToApprove(IotaGetTransactionsToApproveRequest.createIotaGetTransactionsToApproveRequest(milestone)); + public GetTransactionsToApproveResponse getTransactionsToApprove(Integer depth) { + final Call res = service.getTransactionsToApprove(IotaGetTransactionsToApproveRequest.createIotaGetTransactionsToApproveRequest(depth)); return wrapCheckedException(res).body(); } + public GetBalancesResponse getBalances(Integer threshold, String [] addresses) { + final Call res = service.getBalances(IotaGetBalancesRequest.createIotaGetBalancesRequest(threshold, addresses)); + return wrapCheckedException(res).body(); + } + + public InterruptAttachingToTangleResponse interruptAttachingToTangle() { + final Call res = service.interruptAttachingToTangle(IotaCommandRequest.createInterruptAttachToTangleRequest()); + return wrapCheckedException(res).body(); + } + + public GetAttachToTangleResponse attachToTangle(String trunkTransaction, String branchTransaction, Integer minWeightMagnitude, String ... trytes) { + final Call res = service.attachToTangle(IotaAttachToTangleRequest.createAttachToTangleRequest(trunkTransaction, branchTransaction, minWeightMagnitude, trytes)); + return wrapCheckedException(res).body(); + } + + public StoreTransactionsResponse storeTransactions(String ... trytes) { + final Call res = service.storeTransactions(IotaStoreTransactionsRequest.createStoreTransactionsRequest(trytes)); + return wrapCheckedException(res).body(); + } + + public BroadcastTransactionsResponse broadcastTransactions(String ... trytes) { + final Call res = service.broadcastTransactions(IotaBroadcastTransactionRequest.createBroadcastTransactionsRequest(trytes)); + return wrapCheckedException(res).body(); + } protected static Response wrapCheckedException(final Call call) { try { @@ -159,11 +193,13 @@ public class IotaAPIProxy { } private static final String env(String env, String def) { - return Optional.ofNullable(System.getenv(env)).orElseGet(() -> { - log.warn("Enviroment variable '{}' is not defined, and actual value has not been specified. " + final String value = System.getenv(env); + if (value == null) { + log.warn("Environment variable '{}' is not defined, and actual value has not been specified. " + "Rolling back to default value: '{}'", env, def); return def; - }); + } + return value; } public static class Builder { @@ -192,17 +228,17 @@ public class IotaAPIProxy { final Properties nodeConfig = new Properties(); nodeConfig.load(reader); - Optional.ofNullable(nodeConfig.getProperty("iota.node.protocol")) - .filter(v -> protocol == null) - .ifPresent(v -> protocol = v); + if (nodeConfig.getProperty("iota.node.protocol") != null) { + protocol = nodeConfig.getProperty("iota.node.protocol"); + } - Optional.ofNullable(nodeConfig.getProperty("iota.node.host")) - .filter(v -> host == null) - .ifPresent(v -> host = v); + if (nodeConfig.getProperty("iota.node.host") != null) { + host = nodeConfig.getProperty("iota.node.host"); + } - Optional.ofNullable(nodeConfig.getProperty("iota.node.port")) - .filter(v -> port == null) - .ifPresent(v -> port = v); + if (nodeConfig.getProperty("iota.node.port") != null) { + port = nodeConfig.getProperty("iota.node.port"); + } } catch (IOException e1) { log.debug("node_config.properties not found. Rolling back for another solution..."); @@ -211,18 +247,9 @@ public class IotaAPIProxy { } private void checkEnviromentVariables() { - - Optional.of(env("IOTA_NODE_PROTOCOL", "http")) - .filter(v -> protocol == null) - .ifPresent(v -> protocol = v); - - Optional.ofNullable(env("IOTA_NODE_HOST", "localhost")) - .filter(v -> host == null) - .ifPresent(v -> host = v); - - Optional.ofNullable(env("IOTA_NODE_PORT", "14265")) - .filter(v -> port == null) - .ifPresent(v -> port = v); + protocol = env("IOTA_NODE_PROTOCOL", "http"); + host = env("IOTA_NODE_HOST", "localhost"); + port = env("IOTA_NODE_PORT", "14265"); } public Builder host(String host) { @@ -241,5 +268,4 @@ public class IotaAPIProxy { } } - } diff --git a/src/main/java/jota/IotaAPIService.java b/src/main/java/jota/IotaAPIService.java index a268ad1..d390a47 100644 --- a/src/main/java/jota/IotaAPIService.java +++ b/src/main/java/jota/IotaAPIService.java @@ -39,6 +39,26 @@ public interface IotaAPIService { @POST("./") Call getNeighbors(@Body IotaCommandRequest request); + /** + * Add a list of neighbors to your node. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "addNeighbors", "uris": ["udp://8.8.8.8:14265", "udp://8.8.8.5:14265"]}' + */ + @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) + @POST("./") + Call addNeighbors(@Body IotaNeighborsRequest request); + + /** + * Removes a list of neighbors to your node. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "removeNeighbors", "uris": ["udp://8.8.8.8:14265", "udp://8.8.8.5:14265"]}' + */ + @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) + @POST("./") + Call removeNeighbors(@Body IotaNeighborsRequest request); + /** * Get the list of latest tips (unconfirmed transactions). * @@ -85,68 +105,59 @@ public interface IotaAPIService { * Tip selection which returns trunkTransaction and branchTransaction. The input value is the latest coordinator milestone, as provided through the getNodeInfo API call. * * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' - * -d '{"command": "getTransactionsToApprove", "milestone": "SMYMAKKPSUKCKDRUEYCGZJTYCZ9HHDMDUWBAPXARGURPQRHTAJDASRWMIDTPTBNDKDEFBUTBGGAFX9999"}' + * -d '{"command": "getTransactionsToApprove", "depth": 27}' */ @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) @POST("./") Call getTransactionsToApprove(@Body IotaGetTransactionsToApproveRequest request); - /* + /** + * It returns the confirmed balance which a list of addresses have at the latest confirmed milestone. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "getBalances", "addresses": ["HBBYKAKTILIPVUKFOTSLHGENPTXYBNKXZFQFR9VQFWNBMTQNRVOUKPVPRNBSZVVILMAFBKOTBLGLWLOHQ"], "threshold": 100}' + */ + @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) + @POST("./") + Call getBalances(@Body IotaGetBalancesRequest request); + + /** + * Attaches the specified transactions (trytes) to the Tangle by doing Proof of Work. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "attachToTangle", "trunkTransaction": "JVMTDGDPDFYHMZPMWEKKANBQSLSDTIIHAYQUMZOKHXXXGJHJDQPOMDOMNRDKYCZRUFZROZDADTHZC9999", "branchTransaction": "P9KFSJVGSPLXAEBJSHWFZLGP9GGJTIO9YITDEHATDTGAFLPLBZ9FOFWWTKMAZXZHFGQHUOXLXUALY9999", "minWeightMagnitude": 18, "trytes": ["TRYTVALUEHERE"]}' + */ @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) @POST("./") Call attachToTangle(@Body IotaAttachToTangleRequest request); + /** + * Interrupts and completely aborts the attachToTangle process. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "interruptAttachingToTangle" } + */ @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) @POST("./") - Call interruptAttachingToTangle(@Body IotaInterruptAttachingToTangleRequest request); + Call interruptAttachingToTangle(@Body IotaCommandRequest request); + /** + * Broadcast a list of transactions to all neighbors. The input trytes for this call are provided by attachToTangle. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "broadcastTransactions", "trytes": ["BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999"]} + */ @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) @POST("./") - Call pushTransactions(@Body IotaPushTransactionsRequest request); + Call broadcastTransactions(@Body IotaBroadcastTransactionRequest request); + /** + * Store transactions into the local storage. The trytes to be used for this call are returned by attachToTangle. + * + * curl http://localhost:14265 -X POST -H 'Content-Type: application/json' + * -d '{"command": "storeTransactions", "trytes": ["BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999"]}' + */ @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) @POST("./") Call storeTransactions(@Body IotaStoreTransactionsRequest request); - - @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) - @POST("./") - Call transfer(@Body IotaTransferRequest request); - - @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) - @POST("./") - Call replayTransfer(@Body IotaReplayTransferRequest request); - - @Headers({ CONTENT_TYPE_HEADER, USER_AGENT_HEADER }) - @POST("./") - Call pullTransactions(@Body IotaPullTransactionsRequest request); - - * Get the list of transactions which were bundled with the specified tail transaction. - * This call returns the full value of all individual transactions, not just the hashes. - */ - - - - - - - - - - - - - - - - - - - - - - - - - - } diff --git a/src/main/java/jota/dto/request/IotaAttachToTangleRequest.java b/src/main/java/jota/dto/request/IotaAttachToTangleRequest.java new file mode 100644 index 0000000..765aa81 --- /dev/null +++ b/src/main/java/jota/dto/request/IotaAttachToTangleRequest.java @@ -0,0 +1,23 @@ +package jota.dto.request; + +import jota.IotaAPICommands; + +public class IotaAttachToTangleRequest extends IotaCommandRequest { + + private String trunkTransaction; + private String branchTransaction; + private Integer minWeightMagnitude; + private String [] trytes; + + private IotaAttachToTangleRequest(final String trunkTransaction, final String branchTransaction, final Integer minWeightMagnitude, final String ... trytes) { + super(IotaAPICommands.ATTACH_TO_TANGLE); + this.trunkTransaction = trunkTransaction; + this.branchTransaction = branchTransaction; + this.minWeightMagnitude = minWeightMagnitude; + this.trytes = trytes; + } + + public static IotaAttachToTangleRequest createAttachToTangleRequest(final String trunkTransaction, final String branchTransaction, final Integer minWeightMagnitude, final String ... trytes) { + return new IotaAttachToTangleRequest(trunkTransaction, branchTransaction, minWeightMagnitude, trytes); + } +} diff --git a/src/main/java/jota/dto/request/IotaBroadcastTransactionRequest.java b/src/main/java/jota/dto/request/IotaBroadcastTransactionRequest.java new file mode 100644 index 0000000..18836f3 --- /dev/null +++ b/src/main/java/jota/dto/request/IotaBroadcastTransactionRequest.java @@ -0,0 +1,17 @@ +package jota.dto.request; + +import jota.IotaAPICommands; + +public class IotaBroadcastTransactionRequest extends IotaCommandRequest { + + private String [] trytes; + + private IotaBroadcastTransactionRequest(final String ... trytes) { + super(IotaAPICommands.BROADCAST_TRANSACTIONS); + this.trytes = trytes; + } + + public static IotaBroadcastTransactionRequest createBroadcastTransactionsRequest(final String ... trytes) { + return new IotaBroadcastTransactionRequest(trytes); + } +} \ No newline at end of file diff --git a/src/main/java/jota/dto/request/IotaCommandRequest.java b/src/main/java/jota/dto/request/IotaCommandRequest.java index f21db1f..a123aca 100644 --- a/src/main/java/jota/dto/request/IotaCommandRequest.java +++ b/src/main/java/jota/dto/request/IotaCommandRequest.java @@ -21,4 +21,8 @@ public class IotaCommandRequest { public static IotaCommandRequest createGetNeighborsRequest() { return new IotaCommandRequest(IotaAPICommands.GET_NEIGHBORS); } + + public static IotaCommandRequest createInterruptAttachToTangleRequest() { + return new IotaCommandRequest(IotaAPICommands.INTERRUPT_ATTACHING_TO_TANGLE); + } } diff --git a/src/main/java/jota/dto/request/IotaFindTransactionsRequest.java b/src/main/java/jota/dto/request/IotaFindTransactionsRequest.java index 4bd838b..cf783d9 100644 --- a/src/main/java/jota/dto/request/IotaFindTransactionsRequest.java +++ b/src/main/java/jota/dto/request/IotaFindTransactionsRequest.java @@ -36,7 +36,4 @@ public class IotaFindTransactionsRequest extends IotaCommandRequest { this.approvees = approvees; return this; } - - - } diff --git a/src/main/java/jota/dto/request/IotaGetBalancesRequest.java b/src/main/java/jota/dto/request/IotaGetBalancesRequest.java new file mode 100644 index 0000000..aa33397 --- /dev/null +++ b/src/main/java/jota/dto/request/IotaGetBalancesRequest.java @@ -0,0 +1,21 @@ +package jota.dto.request; + +import jota.IotaAPICommands; + +public class IotaGetBalancesRequest extends IotaCommandRequest { + + private String [] addresses; + private Integer threshold; + + private IotaGetBalancesRequest(final Integer threshold, final String ... addresses) { + super(IotaAPICommands.GET_BALANCES); + this.addresses = addresses; + this.threshold = threshold; + } + + public static IotaGetBalancesRequest createIotaGetBalancesRequest(final Integer threshold, final String ... addresses) { + return new IotaGetBalancesRequest(threshold, addresses); + } + +} + diff --git a/src/main/java/jota/dto/request/IotaGetTransactionsToApproveRequest.java b/src/main/java/jota/dto/request/IotaGetTransactionsToApproveRequest.java index c44c074..f597448 100644 --- a/src/main/java/jota/dto/request/IotaGetTransactionsToApproveRequest.java +++ b/src/main/java/jota/dto/request/IotaGetTransactionsToApproveRequest.java @@ -4,14 +4,14 @@ import jota.IotaAPICommands; public class IotaGetTransactionsToApproveRequest extends IotaCommandRequest { - private String milestone; + private Integer depth; - private IotaGetTransactionsToApproveRequest(final String milestone) { + private IotaGetTransactionsToApproveRequest(final Integer depth) { super(IotaAPICommands.GET_TRANSACTIONS_TO_APPROVE); - this.milestone = milestone; + this.depth = depth; } - public static IotaGetTransactionsToApproveRequest createIotaGetTransactionsToApproveRequest(String milestone) { - return new IotaGetTransactionsToApproveRequest(milestone); + public static IotaGetTransactionsToApproveRequest createIotaGetTransactionsToApproveRequest(Integer depth) { + return new IotaGetTransactionsToApproveRequest(depth); } } diff --git a/src/main/java/jota/dto/request/IotaNeighborsRequest.java b/src/main/java/jota/dto/request/IotaNeighborsRequest.java new file mode 100644 index 0000000..74a5cc5 --- /dev/null +++ b/src/main/java/jota/dto/request/IotaNeighborsRequest.java @@ -0,0 +1,22 @@ +package jota.dto.request; + +import jota.IotaAPICommands; + +public class IotaNeighborsRequest extends IotaCommandRequest { + + private String [] uris; + + private IotaNeighborsRequest(IotaAPICommands type, final String ... uris) { + super(type); + this.uris = uris; + } + + public static IotaNeighborsRequest createAddNeighborsRequest(String ... uris) { + return new IotaNeighborsRequest(IotaAPICommands.ADD_NEIGHBORS, uris); + } + + public static IotaNeighborsRequest createRemoveNeighborsRequest(String ... uris) { + return new IotaNeighborsRequest(IotaAPICommands.REMOVE_NEIGHBORS, uris); + } +} + diff --git a/src/main/java/jota/dto/request/IotaStoreTransactionsRequest.java b/src/main/java/jota/dto/request/IotaStoreTransactionsRequest.java new file mode 100644 index 0000000..a306f18 --- /dev/null +++ b/src/main/java/jota/dto/request/IotaStoreTransactionsRequest.java @@ -0,0 +1,17 @@ +package jota.dto.request; + +import jota.IotaAPICommands; + +public class IotaStoreTransactionsRequest extends IotaCommandRequest { + + private String [] trytes; + + private IotaStoreTransactionsRequest(final String ... trytes) { + super(IotaAPICommands.STORE_TRANSACTIONS); + this.trytes = trytes; + } + + public static IotaStoreTransactionsRequest createStoreTransactionsRequest(final String ... trytes) { + return new IotaStoreTransactionsRequest(trytes); + } +} diff --git a/src/main/java/jota/dto/response/AddNeighborsResponse.java b/src/main/java/jota/dto/response/AddNeighborsResponse.java new file mode 100644 index 0000000..586f5a2 --- /dev/null +++ b/src/main/java/jota/dto/response/AddNeighborsResponse.java @@ -0,0 +1,10 @@ +package jota.dto.response; + +public class AddNeighborsResponse extends AbstractResponse { + + private int addedNeighbors; + + public int getAddedNeighbors() { + return addedNeighbors; + } +} diff --git a/src/main/java/jota/dto/response/BroadcastTransactionsResponse.java b/src/main/java/jota/dto/response/BroadcastTransactionsResponse.java new file mode 100644 index 0000000..fe4d7cd --- /dev/null +++ b/src/main/java/jota/dto/response/BroadcastTransactionsResponse.java @@ -0,0 +1,5 @@ +package jota.dto.response; + +public class BroadcastTransactionsResponse extends AbstractResponse { + // empty response +} diff --git a/src/main/java/jota/dto/response/GetAttachToTangleResponse.java b/src/main/java/jota/dto/response/GetAttachToTangleResponse.java new file mode 100644 index 0000000..9a4627c --- /dev/null +++ b/src/main/java/jota/dto/response/GetAttachToTangleResponse.java @@ -0,0 +1,10 @@ +package jota.dto.response; + +public class GetAttachToTangleResponse extends AbstractResponse { + + private String [] trytes; + + public String[] getTrytes() { + return trytes; + } +} diff --git a/src/main/java/jota/dto/response/GetBalancesResponse.java b/src/main/java/jota/dto/response/GetBalancesResponse.java new file mode 100644 index 0000000..8976349 --- /dev/null +++ b/src/main/java/jota/dto/response/GetBalancesResponse.java @@ -0,0 +1,20 @@ +package jota.dto.response; + +public class GetBalancesResponse extends AbstractResponse { + + private String [] balances; + private String milestone; + private Integer milestoneIndex; + + public Integer getMilestoneIndex() { + return milestoneIndex; + } + + public String getMilestone() { + return milestone; + } + + public String[] getBalances() { + return balances; + } +} diff --git a/src/main/java/jota/dto/response/GetTransactionsToApproveResponse.java b/src/main/java/jota/dto/response/GetTransactionsToApproveResponse.java index 5b674c1..cfd30d1 100644 --- a/src/main/java/jota/dto/response/GetTransactionsToApproveResponse.java +++ b/src/main/java/jota/dto/response/GetTransactionsToApproveResponse.java @@ -3,10 +3,10 @@ package jota.dto.response; public class GetTransactionsToApproveResponse extends AbstractResponse { private String trunkTransaction; - private String branchTransaction; + private String branchTransactionToApprove; - public String getBranchTransaction() { - return branchTransaction; + public String getBranchTransactionToApprove() { + return branchTransactionToApprove; } public String getTrunkTransaction() { return trunkTransaction; diff --git a/src/main/java/jota/dto/response/InterruptAttachingToTangleResponse.java b/src/main/java/jota/dto/response/InterruptAttachingToTangleResponse.java new file mode 100644 index 0000000..c3dda35 --- /dev/null +++ b/src/main/java/jota/dto/response/InterruptAttachingToTangleResponse.java @@ -0,0 +1,5 @@ +package jota.dto.response; + +public class InterruptAttachingToTangleResponse extends AbstractResponse { + // empty response +} diff --git a/src/main/java/jota/dto/response/RemoveNeighborsResponse.java b/src/main/java/jota/dto/response/RemoveNeighborsResponse.java new file mode 100644 index 0000000..3f63730 --- /dev/null +++ b/src/main/java/jota/dto/response/RemoveNeighborsResponse.java @@ -0,0 +1,10 @@ +package jota.dto.response; + +public class RemoveNeighborsResponse extends AbstractResponse { + + private int removedNeighbors; + + public int getRemovedNeighbors() { + return removedNeighbors; + } +} diff --git a/src/main/java/jota/dto/response/StoreTransactionsResponse.java b/src/main/java/jota/dto/response/StoreTransactionsResponse.java new file mode 100644 index 0000000..04128d2 --- /dev/null +++ b/src/main/java/jota/dto/response/StoreTransactionsResponse.java @@ -0,0 +1,6 @@ +package jota.dto.response; + +public class StoreTransactionsResponse extends AbstractResponse { + // empty response +} + diff --git a/src/test/java/jota/IotaAPIProxyTest.java b/src/test/java/jota/IotaAPIProxyTest.java index 56192da..1b5e34a 100644 --- a/src/test/java/jota/IotaAPIProxyTest.java +++ b/src/test/java/jota/IotaAPIProxyTest.java @@ -2,6 +2,8 @@ package jota; import static org.junit.Assert.assertThat; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import jota.dto.response.*; import org.hamcrest.core.IsNull; import org.junit.Before; @@ -15,8 +17,10 @@ import org.junit.Test; */ public class IotaAPIProxyTest { + private static Gson gson = new GsonBuilder().create(); + private static final String TEST_SEED = "AAA999999999999999999999999999999999999999999999999999999999999999999999999999999"; - private static final String TEST_TRANSACTION = "ZJVYUGTDRPDYFGFXMKOTV9ZWSGFK9CFPXTITQLQNLPPG9YNAARMKNKYQO9GSCSBIOTGMLJUFLZWSY9999"; + private static final String TEST_ADDRESS = "RVORZ9SIIP9RCYMREUIXXVPQIPHVCNPQ9HZWYKFWYWZRE9JQKG9REPKIASHUUECPSQO9JT9XNMVKWYGVAZETAIRPTM"; private static final String TEST_HASH = "OAATQS9VQLSXCLDJVJJVYUGONXAXOFMJOZNSYWRZSWECMXAQQURHQBJNLD9IOFEPGZEPEMPXCIVRX9999"; private static final String TEST_TRYTES = "BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999"; private static final String TEST_MILESTONE = "SMYMAKKPSUKCKDRUEYCGZJTYCZ9HHDMDUWBAPXARGURPQRHTAJDASRWMIDTPTBNDKDEFBUTBGGAFX9999"; @@ -29,27 +33,28 @@ public class IotaAPIProxyTest { proxy = new IotaAPIProxy.Builder().build(); } - @Test - public void shouldCreateIotaApiProxyInstanceWithDefaultValues() { - IotaAPIProxy proxy = new IotaAPIProxy.Builder().build(); - assertThat(proxy, IsNull.notNullValue()); - } - - @Test(expected = IllegalStateException.class) - public void shouldNotCreateIotaApiProxyInstanceWithDefaultValues() { - new IotaAPIProxy.Builder().host("a_very_wrong_ip_address").build().getNodeInfo(); - } - @Test public void shouldGetNodeInfo() { GetNodeInfoResponse nodeInfo = proxy.getNodeInfo(); - assertThat(nodeInfo, IsNull.notNullValue()); + assertThat(nodeInfo.getAppVersion(), IsNull.notNullValue()); } @Test public void shouldGetNeighbors() { GetNeighborsResponse neighbors = proxy.getNeighbors(); - assertThat(neighbors, IsNull.notNullValue()); + assertThat(neighbors.getNeighbors(), IsNull.notNullValue()); + } + + @Test + public void shouldAddNeighbors() { + AddNeighborsResponse res = proxy.addNeighbors("udp://8.8.8.8:14265"); + assertThat(res, IsNull.notNullValue()); + } + + @Test + public void shouldRemoveNeighbors() { + RemoveNeighborsResponse res = proxy.removeNeighbors("udp://8.8.8.8:14265"); + assertThat(res, IsNull.notNullValue()); } @Test @@ -60,7 +65,8 @@ public class IotaAPIProxyTest { @Test public void shouldFindTransactionsByAddresses() { - FindTransactionResponse trans = proxy.findTransactionsByAddresses(TEST_TRANSACTION); + FindTransactionResponse trans = proxy.findTransactionsByAddresses(TEST_ADDRESS); + System.err.println(gson.toJson(trans)); assertThat(trans, IsNull.notNullValue()); } @@ -82,17 +88,43 @@ public class IotaAPIProxyTest { assertThat(trans, IsNull.notNullValue()); } + + // ### + + @Test + public void shouldGetTrytes() { + GetTrytesResponse res = proxy.getTrytes(TEST_HASH); + assertThat(res, IsNull.nullValue()); + } + @Test public void shouldGetInclusionStates() { - GetInclusionStateResponse res = proxy.getInclusionStates(new String[]{TEST_TRANSACTION}, + GetInclusionStateResponse res = proxy.getInclusionStates(new String[]{TEST_ADDRESS}, new String[]{"123"}); assertThat(res, IsNull.notNullValue()); } @Test // very long execution public void shouldGetTransactionsToApprove() { - GetTransactionsToApproveResponse res = proxy.getTransactionsToApprove(TEST_MILESTONE); + GetTransactionsToApproveResponse res = proxy.getTransactionsToApprove(27); assertThat(res, IsNull.notNullValue()); } + @Test + public void shouldGetBalances() { + GetBalancesResponse res = proxy.getBalances(100, new String[]{"HBBYKAKTILIPVUKFOTSLHGENPTXYBNKXZFQFR9VQFWNBMTQNRVOUKPVPRNBSZVVILMAFBKOTBLGLWLOHQ"}); + System.err.println(res); + assertThat(res, IsNull.notNullValue()); + } + + @Test + public void shouldCreateIotaApiProxyInstanceWithDefaultValues() { + IotaAPIProxy proxy = new IotaAPIProxy.Builder().build(); + assertThat(proxy, IsNull.notNullValue()); + } + + @Test(expected = IllegalStateException.class) + public void shouldNotCreateIotaApiProxyInstanceWithDefaultValues() { + new IotaAPIProxy.Builder().host("a_very_wrong_ip_address").build().getNodeInfo(); + } }