mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-23 09:04:22 +01:00
wallet: Add unit test for withdrawal
This commit is contained in:
committed by
Rusty Russell
parent
b4e4a744aa
commit
462d936f25
@@ -1,5 +1,6 @@
|
|||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
|
from decimal import Decimal
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from lightning import LightningRpc, LegacyLightningRpc
|
from lightning import LightningRpc, LegacyLightningRpc
|
||||||
|
|
||||||
@@ -8,6 +9,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import sqlite3
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
@@ -651,8 +653,6 @@ class LightningDTests(BaseLightningDTests):
|
|||||||
assert l2.rpc.listinvoice('testpayment2')[0]['complete'] == True
|
assert l2.rpc.listinvoice('testpayment2')[0]['complete'] == True
|
||||||
|
|
||||||
def test_json_addfunds(self):
|
def test_json_addfunds(self):
|
||||||
""" Attempt to add funds
|
|
||||||
"""
|
|
||||||
sat = 10**6
|
sat = 10**6
|
||||||
l1 = self.node_factory.get_node(legacy=False)
|
l1 = self.node_factory.get_node(legacy=False)
|
||||||
addr = l1.rpc.newaddr()['address']
|
addr = l1.rpc.newaddr()['address']
|
||||||
@@ -665,6 +665,45 @@ class LightningDTests(BaseLightningDTests):
|
|||||||
# Second time should fail, we already have those funds
|
# Second time should fail, we already have those funds
|
||||||
self.assertRaises(ValueError, l1.rpc.addfunds, tx)
|
self.assertRaises(ValueError, l1.rpc.addfunds, tx)
|
||||||
|
|
||||||
|
def test_withdraw(self):
|
||||||
|
amount = 1000000
|
||||||
|
l1 = self.node_factory.get_node(legacy=False)
|
||||||
|
addr = l1.rpc.newaddr()['address']
|
||||||
|
|
||||||
|
|
||||||
|
# Add some funds to withdraw later
|
||||||
|
for i in range(10):
|
||||||
|
txid = l1.bitcoin.rpc.sendtoaddress(addr, amount / 10**8 + 0.01)
|
||||||
|
tx = l1.bitcoin.rpc.getrawtransaction(txid)
|
||||||
|
l1.rpc.addfunds(tx)
|
||||||
|
|
||||||
|
# Reach around into the db to check that outputs were added
|
||||||
|
db = sqlite3.connect(os.path.join(l1.daemon.lightning_dir, "lightningd.sqlite3"))
|
||||||
|
|
||||||
|
c = db.cursor()
|
||||||
|
c.execute('SELECT COUNT(*) FROM outputs WHERE status=0')
|
||||||
|
assert(c.fetchone()[0] == 10)
|
||||||
|
|
||||||
|
waddr = l1.bitcoin.rpc.getnewaddress()
|
||||||
|
# Now attempt to withdraw some (making sure we collect multiple inputs)
|
||||||
|
self.assertRaises(ValueError, l1.rpc.withdraw, 'not an address', amount)
|
||||||
|
self.assertRaises(ValueError, l1.rpc.withdraw, waddr, 'not an amount')
|
||||||
|
self.assertRaises(ValueError, l1.rpc.withdraw, waddr, -amount)
|
||||||
|
|
||||||
|
out = l1.rpc.withdraw(waddr, 2*amount)
|
||||||
|
|
||||||
|
# Make sure bitcoind received the withdrawal
|
||||||
|
unspent = l1.bitcoin.rpc.listunspent(0)
|
||||||
|
withdrawal = [u for u in unspent if u['txid'] == out['txid']]
|
||||||
|
assert(len(withdrawal) == 1)
|
||||||
|
|
||||||
|
assert(withdrawal[0]['amount'] == Decimal('0.02'))
|
||||||
|
|
||||||
|
# Now make sure two of them were marked as spent
|
||||||
|
c = db.cursor()
|
||||||
|
c.execute('SELECT COUNT(*) FROM outputs WHERE status=2')
|
||||||
|
assert(c.fetchone()[0] == 2)
|
||||||
|
|
||||||
class LegacyLightningDTests(BaseLightningDTests):
|
class LegacyLightningDTests(BaseLightningDTests):
|
||||||
|
|
||||||
def test_connect(self):
|
def test_connect(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user