/****************************************************************************** * Copyright © 2013-2016 The Nxt Core Developers. * * * * See the AUTHORS.txt, DEVELOPER-AGREEMENT.txt and LICENSE.txt files at * * the top-level directory of this distribution for the individual copyright * * holder information and the developer policies on copyright and licensing. * * * * Unless otherwise agreed in a custom licensing agreement, no part of the * * Nxt software, including this file, may be copied, modified, propagated, * * or distributed except according to the terms contained in the LICENSE.txt * * file. * * * * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ package nxt.http; import nxt.BlockchainTest; import nxt.Constants; import nxt.util.Logger; import org.json.simple.JSONObject; import org.junit.Assert; import org.junit.Test; public class SendMoneyTest extends BlockchainTest { @Test public void sendMoney() { JSONObject response = new APICall.Builder("sendMoney"). param("secretPhrase", ALICE.getSecretPhrase()). param("recipient", BOB.getStrId()). param("amountNQT", 100 * Constants.ONE_NXT). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney: " + response); // Forger Assert.assertEquals(0, FORGY.getBalanceDiff()); Assert.assertEquals(0, FORGY.getUnconfirmedBalanceDiff()); // Sender Assert.assertEquals(0, ALICE.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(0, BOB.getBalanceDiff()); Assert.assertEquals(0, BOB.getUnconfirmedBalanceDiff()); generateBlock(); // Forger Assert.assertEquals(Constants.ONE_NXT, FORGY.getBalanceDiff()); Assert.assertEquals(Constants.ONE_NXT, FORGY.getUnconfirmedBalanceDiff()); // Sender Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getBalanceDiff()); Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getUnconfirmedBalanceDiff()); } @Test public void sendTooMuchMoney() { JSONObject response = new APICall.Builder("sendMoney"). param("secretPhrase", ALICE.getSecretPhrase()). param("recipient", BOB.getStrId()). param("amountNQT", ALICE.getInitialBalance()). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney: " + response); Assert.assertEquals((long)6, response.get("errorCode")); } @Test public void sendAndReturn() { JSONObject response = new APICall.Builder("sendMoney"). param("secretPhrase", ALICE.getSecretPhrase()). param("recipient", BOB.getStrId()). param("amountNQT", 100 * Constants.ONE_NXT). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney1: " + response); response = new APICall.Builder("sendMoney"). param("secretPhrase", BOB.getSecretPhrase()). param("recipient", ALICE.getStrId()). param("amountNQT", 100 * Constants.ONE_NXT). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney2: " + response); // Forger Assert.assertEquals(0, FORGY.getBalanceDiff()); Assert.assertEquals(0, FORGY.getUnconfirmedBalanceDiff()); // Sender Assert.assertEquals(0, ALICE.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(0, BOB.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, BOB.getUnconfirmedBalanceDiff()); generateBlock(); // Forger Assert.assertEquals(2*Constants.ONE_NXT, FORGY.getBalanceDiff()); Assert.assertEquals(2*Constants.ONE_NXT, FORGY.getUnconfirmedBalanceDiff()); // Sender Assert.assertEquals(-Constants.ONE_NXT, ALICE.getBalanceDiff()); Assert.assertEquals(-Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(-Constants.ONE_NXT, BOB.getBalanceDiff()); Assert.assertEquals(-Constants.ONE_NXT, BOB.getUnconfirmedBalanceDiff()); } @Test public void signAndBroadcastBytes() { JSONObject response = new APICall.Builder("sendMoney"). param("publicKey", ALICE.getPublicKeyStr()). param("recipient", BOB.getStrId()). param("amountNQT", 100 * Constants.ONE_NXT). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney: " + response); generateBlock(); // No change transaction not broadcast Assert.assertEquals(0, ALICE.getBalanceDiff()); Assert.assertEquals(0, ALICE.getUnconfirmedBalanceDiff()); Assert.assertEquals(0, BOB.getBalanceDiff()); Assert.assertEquals(0, BOB.getUnconfirmedBalanceDiff()); response = new APICall.Builder("signTransaction"). param("secretPhrase", ALICE.getSecretPhrase()). param("unsignedTransactionBytes", (String)response.get("unsignedTransactionBytes")). build().invoke(); Logger.logDebugMessage("signTransaction: " + response); response = new APICall.Builder("broadcastTransaction"). param("transactionBytes", (String)response.get("transactionBytes")). build().invoke(); Logger.logDebugMessage("broadcastTransaction: " + response); generateBlock(); // Sender Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getBalanceDiff()); Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getUnconfirmedBalanceDiff()); } @Test public void signAndBroadcastJSON() { JSONObject response = new APICall.Builder("sendMoney"). param("publicKey", ALICE.getPublicKeyStr()). param("recipient", BOB.getStrId()). param("amountNQT", 100 * Constants.ONE_NXT). param("feeNQT", Constants.ONE_NXT). build().invoke(); Logger.logDebugMessage("sendMoney: " + response); generateBlock(); // No change transaction not broadcast Assert.assertEquals(0, ALICE.getBalanceDiff()); Assert.assertEquals(0, ALICE.getUnconfirmedBalanceDiff()); Assert.assertEquals(0, BOB.getBalanceDiff()); Assert.assertEquals(0, BOB.getUnconfirmedBalanceDiff()); response = new APICall.Builder("signTransaction"). param("secretPhrase", ALICE.getSecretPhrase()). param("unsignedTransactionJSON", response.get("transactionJSON").toString()). build().invoke(); Logger.logDebugMessage("signTransaction: " + response); response = new APICall.Builder("broadcastTransaction"). param("transactionBytes", (String)response.get("transactionBytes")). build().invoke(); Logger.logDebugMessage("broadcastTransaction: " + response); generateBlock(); // Sender Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getBalanceDiff()); Assert.assertEquals(-100 * Constants.ONE_NXT - Constants.ONE_NXT, ALICE.getUnconfirmedBalanceDiff()); // Recipient Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getBalanceDiff()); Assert.assertEquals(100 * Constants.ONE_NXT, BOB.getUnconfirmedBalanceDiff()); } }