package org.multibit.mbm.core.bitcoin.service;
import com.google.bitcoin.core.*;
import com.google.common.collect.Lists;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import java.awt.image.BufferedImage;
import java.math.BigInteger;
import java.util.List;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
// TODO Determine how swatch test can work in headless environment
@Ignore
public class CallBackBitcoinServiceTest{
/**
* Verifies the integration test bitcoin service
*/
@Test
public void testGetNextAddress() {
// create a bucket of bitcoin addresses;
NetworkParameters prodNet = NetworkParameters.prodNet();
List<Address> addressBucket = Lists.newLinkedList();
ECKey key1 = new ECKey();
Address address1 = key1.toAddress(prodNet);
addressBucket.add(address1);
ECKey key2 = new ECKey();
Address address2 = key2.toAddress(prodNet);
addressBucket.add(address2);
ECKey key3 = new ECKey();
Address address3 = key3.toAddress(prodNet);
addressBucket.add(address3);
CallBackBitcoinService testObject = new CallBackBitcoinService();
//testObject.setSwatchGenerator(new SwatchGenerator());
assertNotNull(testObject);
// should return null if no address bucket set
assertNull(testObject.getNextAddress(1L));
testObject.setAddressBucket(addressBucket);
Assert.assertEquals(address1.toString(), testObject.getNextAddress(1L));
Assert.assertEquals(address2.toString(), testObject.getNextAddress(1L));
Assert.assertEquals(address3.toString(), testObject.getNextAddress(1L));
// no more addresses available
assertNull(testObject.getNextAddress(1L));
}
@Test
public void testReceivePendingTransaction() {
// create a bucket of bitcoin addresses;
NetworkParameters prodNet = NetworkParameters.prodNet();
List<Address> addressBucket = Lists.newLinkedList();
ECKey key1 = new ECKey();
Address address1 = key1.toAddress(prodNet);
addressBucket.add(address1);
ECKey key2 = new ECKey();
Address address2 = key2.toAddress(prodNet);
addressBucket.add(address2);
CallBackBitcoinService testObject = new CallBackBitcoinService();
//testObject.setSwatchGenerator(new SwatchGenerator());
assertNotNull(testObject);
// WasICalledAddressListener addressListener1 = new WasICalledAddressListener();
// WasICalledAddressListener addressListener2 = new WasICalledAddressListener();
BufferedImage swatch1 = testObject.createSwatch(address1.toString(), "label1", "1.0");
BufferedImage swatch2 = testObject.createSwatch(address2.toString(), "label2", "2.0");
assertNotNull(swatch1);
assertNotNull(swatch2);
Transaction transaction1 = BitcoinTransactionHelpers.createFakeTx(prodNet, BigInteger.ONE, address1); // 1 BTC received to address1
testObject.notifyAddressListenersOfTransaction(transaction1, true);
// assertTrue(addressListener1.onPendingCoinsReceivedCalled);
// assertFalse(addressListener1.onCoinsReceivedCalled);
//
// assertFalse(addressListener2.onPendingCoinsReceivedCalled);
// assertFalse(addressListener2.onCoinsReceivedCalled);
}
@Test
public void testReceiveConfirmedTransaction() {
// create a bucket of bitcoin addresses;
NetworkParameters prodNet = NetworkParameters.prodNet();
List<Address> addressBucket = Lists.newLinkedList();
ECKey key1 = new ECKey();
Address address1 = key1.toAddress(prodNet);
addressBucket.add(address1);
ECKey key2 = new ECKey();
Address address2 = key2.toAddress(prodNet);
addressBucket.add(address2);
CallBackBitcoinService testObject = new CallBackBitcoinService();
//testObject.setSwatchGenerator(new SwatchGenerator());
assertNotNull(testObject);
// WasICalledAddressListener addressListener1 = new WasICalledAddressListener();
// WasICalledAddressListener addressListener2 = new WasICalledAddressListener();
BufferedImage swatch1 = testObject.createSwatch(address1.toString(), "label1", "1.0");
BufferedImage swatch2 = testObject.createSwatch(address2.toString(), "label2", "2.0");
assertNotNull(swatch1);
assertNotNull(swatch2);
Transaction transaction2 = BitcoinTransactionHelpers.createFakeTx(prodNet, BigInteger.ONE, address2); // 1 BTC received to address2
testObject.notifyAddressListenersOfTransaction(transaction2, false);
// assertFalse(addressListener1.onPendingCoinsReceivedCalled);
// assertFalse(addressListener1.onCoinsReceivedCalled);
//
// assertFalse(addressListener2.onPendingCoinsReceivedCalled);
// assertTrue(addressListener2.onCoinsReceivedCalled);
}
class WasICalledAddressListener implements AddressListener {
public boolean onCoinsReceivedCalled = false;
public boolean onPendingCoinsReceivedCalled = false;
@Override
public void onCoinsReceived(Address address, Transaction transaction) {
onCoinsReceivedCalled = true;
}
@Override
public void onPendingCoinsReceived(Address address, Transaction tx) {
onPendingCoinsReceivedCalled = true;
}
}
}