package io.emax.cosigner.bitcoin; import io.emax.cosigner.bitcoin.stubrpc.BitcoinTestRpc; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import rx.Subscription; import java.util.Collections; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class MonitorTest { private BitcoinWallet wallet; private BitcoinMonitor monitor; private String userKey; private int balanceCounter; @Before public void setUp() { BitcoinResource.getResource().setBitcoindRpc(new BitcoinTestRpc()); wallet = new BitcoinWallet(new BitcoinConfiguration()); monitor = new BitcoinMonitor(wallet); userKey = "deadbeef"; balanceCounter = 0; } @Test public void testMonitor() throws InterruptedException { System.out.println(""); System.out.println("Simple monitor test"); // Get addresses String singleAddress = wallet.createAddress(userKey); System.out.println("Single Address Test: " + singleAddress); String multiAddress = wallet.getMultiSigAddress(Collections.singletonList(singleAddress), userKey); System.out.println("Multi Address Test: " + multiAddress); monitor.addAddresses(Collections.singletonList(multiAddress)); singleAddress = wallet.createAddress(userKey); System.out.println("Single Address Test: " + singleAddress); multiAddress = wallet.getMultiSigAddress(Collections.singletonList(singleAddress), userKey); System.out.println("Multi Address Test: " + multiAddress); monitor.addAddresses(Collections.singletonList(multiAddress)); System.out.println("Waiting for balance updates (2 minutes)... "); System.out.println("Time: " + new Date()); Subscription monitorSub = monitor.getObservableBalances().subscribe(addresses -> { System.out.println("Time: " + new Date()); addresses.forEach((address, balance) -> { balanceCounter++; System.out.println("Address: " + address + " Balance: " + balance); }); }); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("Unsubscribing from monitor. Test should complete within 10 seconds."); System.out.println("Time: " + new Date()); monitorSub.unsubscribe(); } }, 2 * 60 * 1000); while (!monitorSub.isUnsubscribed()) { Thread.sleep(10 * 1000); } Assert.assertTrue(balanceCounter > 0); } }