def setUp(self):
        FlorinCoinSrv.Blocks = { hash(i): { 'address': 0, 'amount': 0, 'tx-comment': '-', 'tx': [], 'height': i, 'hash': hash(i), } for i in range(10) }
#       FlorinCoinSrv.Transactions = { }
        flosrv.Transactions = { }
        self.srv = FlorinCoinSrv()
        self.flo = Florincoin(self.srv.url, self.srv.username, self.srv.passwd)
        self.sync = Synchronizer(self.flo, MockCloud())
 def test_scan(self):
     coin = MockCoin()
     cloud = MockCloud()
     sync = Synchronizer(coin, cloud)
     sync.scan_database()
     assert cloud.i == 0
     sync.scan_blockchain()
class FlorincoinTest(unittest.TestCase):
    DATA_SIZE = 2*1024

    def setUp(self):
        FlorinCoinSrv.Blocks = { hash(i): { 'address': 0, 'amount': 0, 'tx-comment': '-', 'tx': [], 'height': i, 'hash': hash(i), } for i in range(10) }
#       FlorinCoinSrv.Transactions = { }
        flosrv.Transactions = { }
        self.srv = FlorinCoinSrv()
        self.flo = Florincoin(self.srv.url, self.srv.username, self.srv.passwd)
        self.sync = Synchronizer(self.flo, MockCloud())

    def tearDown(self):
        del self.flo
        del self.srv

    def test_misc(self):
        '''Check various jsonrpc queries
        '''
        block_count = self.flo.block_count()
        assert block_count
        response = self.flo.balance()
        assert response
        response = list(self.flo.blocks(0, block_count))
        assert len(response) == block_count

        response = self.flo.address(0)
        assert response

    def test_transactions(self):
        invalid_block = {
            'tx': 0,
        }
        response = self.flo.transactions(invalid_block)
        assert response

    def test_send(self):
        '''Test 'sendtoaddress' method used to store metadata
        '''
        large_data_corpus = b'i' * (FlorincoinTest.DATA_SIZE)
        txid = self.flo.send_data_address(large_data_corpus, 'addr', Decimal('0.01'))
        assert txid

        assert txid in self.srv.httpd.Transactions

    @unittest.skip('unrealistic test case')
    def test_send_high_entropy(self):
        high_entropy = os.urandom(FlorincoinTest.DATA_SIZE)
        response = self.flo.send_data_address(high_entropy, 'addr', Decimal('0.01'))
        assert response

    def test_roundtrip(self):
        large_data_corpus = b'R' * (FlorincoinTest.DATA_SIZE)
        txid = self.flo.send_data_address(large_data_corpus, 'addr', Decimal('0.01'))
        assert txid != None
        assert txid in self.srv.httpd.Transactions

        tx_entry = self.flo._get_transaction(txid)
        assert 'tx-comment' in tx_entry

#       self.sync.scan_database()
        self.sync.scan_blockchain()
        assert txid in self.srv.httpd.Transactions
        assert txid in self.sync.cloud.data_loaded