URI: 
       ttest_util.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       ttest_util.py (12638B)
       ---
            1 from decimal import Decimal
            2 
            3 from electrum.util import (format_satoshis, format_fee_satoshis, parse_URI,
            4                            is_hash256_str, chunks, is_ip_address, list_enabled_bits,
            5                            format_satoshis_plain, is_private_netaddress, is_hex_str,
            6                            is_integer, is_non_negative_integer, is_int_or_float,
            7                            is_non_negative_int_or_float)
            8 
            9 from . import ElectrumTestCase
           10 
           11 
           12 class TestUtil(ElectrumTestCase):
           13 
           14     def test_format_satoshis(self):
           15         self.assertEqual("0.00001234", format_satoshis(1234))
           16 
           17     def test_format_satoshis_negative(self):
           18         self.assertEqual("-0.00001234", format_satoshis(-1234))
           19 
           20     def test_format_satoshis_to_mbtc(self):
           21         self.assertEqual("0.01234", format_satoshis(1234, decimal_point=5))
           22 
           23     def test_format_satoshis_decimal(self):
           24         self.assertEqual("0.00001234", format_satoshis(Decimal(1234)))
           25 
           26     def test_format_fee_float(self):
           27         self.assertEqual("1.7", format_fee_satoshis(1700/1000))
           28 
           29     def test_format_fee_decimal(self):
           30         self.assertEqual("1.7", format_fee_satoshis(Decimal("1.7")))
           31 
           32     def test_format_fee_precision(self):
           33         self.assertEqual("1.666",
           34                          format_fee_satoshis(1666/1000, precision=6))
           35         self.assertEqual("1.7",
           36                          format_fee_satoshis(1666/1000, precision=1))
           37 
           38     def test_format_satoshis_whitespaces(self):
           39         self.assertEqual("     0.0001234 ",
           40                          format_satoshis(12340, whitespaces=True))
           41         self.assertEqual("     0.00001234",
           42                          format_satoshis(1234, whitespaces=True))
           43 
           44     def test_format_satoshis_whitespaces_negative(self):
           45         self.assertEqual("    -0.0001234 ",
           46                          format_satoshis(-12340, whitespaces=True))
           47         self.assertEqual("    -0.00001234",
           48                          format_satoshis(-1234, whitespaces=True))
           49 
           50     def test_format_satoshis_diff_positive(self):
           51         self.assertEqual("+0.00001234",
           52                          format_satoshis(1234, is_diff=True))
           53 
           54     def test_format_satoshis_diff_negative(self):
           55         self.assertEqual("-0.00001234", format_satoshis(-1234, is_diff=True))
           56 
           57     def test_format_satoshis_plain(self):
           58         self.assertEqual("0.00001234", format_satoshis_plain(1234))
           59 
           60     def test_format_satoshis_plain_decimal(self):
           61         self.assertEqual("0.00001234", format_satoshis_plain(Decimal(1234)))
           62 
           63     def test_format_satoshis_plain_to_mbtc(self):
           64         self.assertEqual("0.01234", format_satoshis_plain(1234, decimal_point=5))
           65 
           66     def _do_test_parse_URI(self, uri, expected):
           67         result = parse_URI(uri)
           68         self.assertEqual(expected, result)
           69 
           70     def test_parse_URI_address(self):
           71         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma',
           72                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma'})
           73 
           74     def test_parse_URI_only_address(self):
           75         self._do_test_parse_URI('15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma',
           76                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma'})
           77 
           78 
           79     def test_parse_URI_address_label(self):
           80         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?label=electrum%20test',
           81                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'label': 'electrum test'})
           82 
           83     def test_parse_URI_address_message(self):
           84         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?message=electrum%20test',
           85                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'message': 'electrum test', 'memo': 'electrum test'})
           86 
           87     def test_parse_URI_address_amount(self):
           88         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.0003',
           89                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'amount': 30000})
           90 
           91     def test_parse_URI_address_request_url(self):
           92         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?r=http://domain.tld/page?h%3D2a8628fc2fbe',
           93                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'r': 'http://domain.tld/page?h=2a8628fc2fbe'})
           94 
           95     def test_parse_URI_ignore_args(self):
           96         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?test=test',
           97                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'test': 'test'})
           98 
           99     def test_parse_URI_multiple_args(self):
          100         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.00004&label=electrum-test&message=electrum%20test&test=none&r=http://domain.tld/page',
          101                                 {'address': '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 'amount': 4000, 'label': 'electrum-test', 'message': u'electrum test', 'memo': u'electrum test', 'r': 'http://domain.tld/page', 'test': 'none'})
          102 
          103     def test_parse_URI_no_address_request_url(self):
          104         self._do_test_parse_URI('bitcoin:?r=http://domain.tld/page?h%3D2a8628fc2fbe',
          105                                 {'r': 'http://domain.tld/page?h=2a8628fc2fbe'})
          106 
          107     def test_parse_URI_invalid_address(self):
          108         self.assertRaises(BaseException, parse_URI, 'bitcoin:invalidaddress')
          109 
          110     def test_parse_URI_invalid(self):
          111         self.assertRaises(BaseException, parse_URI, 'notbitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma')
          112 
          113     def test_parse_URI_parameter_polution(self):
          114         self.assertRaises(Exception, parse_URI, 'bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.0003&label=test&amount=30.0')
          115 
          116     def test_is_hash256_str(self):
          117         self.assertTrue(is_hash256_str('09a4c03e3bdf83bbe3955f907ee52da4fc12f4813d459bc75228b64ad08617c7'))
          118         self.assertTrue(is_hash256_str('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          119         self.assertTrue(is_hash256_str('00' * 32))
          120 
          121         self.assertFalse(is_hash256_str('00' * 33))
          122         self.assertFalse(is_hash256_str('qweqwe'))
          123         self.assertFalse(is_hash256_str(None))
          124         self.assertFalse(is_hash256_str(7))
          125 
          126     def test_is_hex_str(self):
          127         self.assertTrue(is_hex_str('09a4'))
          128         self.assertTrue(is_hex_str('abCD'))
          129         self.assertTrue(is_hex_str('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          130         self.assertTrue(is_hex_str('00' * 33))
          131 
          132         self.assertFalse(is_hex_str('0x09a4'))
          133         self.assertFalse(is_hex_str('2A 5C3F'))
          134         self.assertFalse(is_hex_str(' 2A5C3F'))
          135         self.assertFalse(is_hex_str('2A5C3F '))
          136         self.assertFalse(is_hex_str('000'))
          137         self.assertFalse(is_hex_str('123'))
          138         self.assertFalse(is_hex_str('0x123'))
          139         self.assertFalse(is_hex_str('qweqwe'))
          140         self.assertFalse(is_hex_str(b'09a4'))
          141         self.assertFalse(is_hex_str(b'\x09\xa4'))
          142         self.assertFalse(is_hex_str(None))
          143         self.assertFalse(is_hex_str(7))
          144         self.assertFalse(is_hex_str(7.2))
          145 
          146     def test_is_integer(self):
          147         self.assertTrue(is_integer(7))
          148         self.assertTrue(is_integer(0))
          149         self.assertTrue(is_integer(-1))
          150         self.assertTrue(is_integer(-7))
          151 
          152         self.assertFalse(is_integer(Decimal("2.0")))
          153         self.assertFalse(is_integer(Decimal(2.0)))
          154         self.assertFalse(is_integer(Decimal(2)))
          155         self.assertFalse(is_integer(0.72))
          156         self.assertFalse(is_integer(2.0))
          157         self.assertFalse(is_integer(-2.0))
          158         self.assertFalse(is_integer('09a4'))
          159         self.assertFalse(is_integer('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          160         self.assertFalse(is_integer('000'))
          161         self.assertFalse(is_integer('qweqwe'))
          162         self.assertFalse(is_integer(None))
          163 
          164     def test_is_non_negative_integer(self):
          165         self.assertTrue(is_non_negative_integer(7))
          166         self.assertTrue(is_non_negative_integer(0))
          167 
          168         self.assertFalse(is_non_negative_integer(Decimal("2.0")))
          169         self.assertFalse(is_non_negative_integer(Decimal(2.0)))
          170         self.assertFalse(is_non_negative_integer(Decimal(2)))
          171         self.assertFalse(is_non_negative_integer(0.72))
          172         self.assertFalse(is_non_negative_integer(2.0))
          173         self.assertFalse(is_non_negative_integer(-2.0))
          174         self.assertFalse(is_non_negative_integer(-1))
          175         self.assertFalse(is_non_negative_integer(-7))
          176         self.assertFalse(is_non_negative_integer('09a4'))
          177         self.assertFalse(is_non_negative_integer('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          178         self.assertFalse(is_non_negative_integer('000'))
          179         self.assertFalse(is_non_negative_integer('qweqwe'))
          180         self.assertFalse(is_non_negative_integer(None))
          181 
          182     def test_is_int_or_float(self):
          183         self.assertTrue(is_int_or_float(7))
          184         self.assertTrue(is_int_or_float(0))
          185         self.assertTrue(is_int_or_float(-1))
          186         self.assertTrue(is_int_or_float(-7))
          187         self.assertTrue(is_int_or_float(0.72))
          188         self.assertTrue(is_int_or_float(2.0))
          189         self.assertTrue(is_int_or_float(-2.0))
          190 
          191         self.assertFalse(is_int_or_float(Decimal("2.0")))
          192         self.assertFalse(is_int_or_float(Decimal(2.0)))
          193         self.assertFalse(is_int_or_float(Decimal(2)))
          194         self.assertFalse(is_int_or_float('09a4'))
          195         self.assertFalse(is_int_or_float('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          196         self.assertFalse(is_int_or_float('000'))
          197         self.assertFalse(is_int_or_float('qweqwe'))
          198         self.assertFalse(is_int_or_float(None))
          199 
          200     def test_is_non_negative_int_or_float(self):
          201         self.assertTrue(is_non_negative_int_or_float(7))
          202         self.assertTrue(is_non_negative_int_or_float(0))
          203         self.assertTrue(is_non_negative_int_or_float(0.0))
          204         self.assertTrue(is_non_negative_int_or_float(0.72))
          205         self.assertTrue(is_non_negative_int_or_float(2.0))
          206 
          207         self.assertFalse(is_non_negative_int_or_float(-1))
          208         self.assertFalse(is_non_negative_int_or_float(-7))
          209         self.assertFalse(is_non_negative_int_or_float(-2.0))
          210         self.assertFalse(is_non_negative_int_or_float(Decimal("2.0")))
          211         self.assertFalse(is_non_negative_int_or_float(Decimal(2.0)))
          212         self.assertFalse(is_non_negative_int_or_float(Decimal(2)))
          213         self.assertFalse(is_non_negative_int_or_float('09a4'))
          214         self.assertFalse(is_non_negative_int_or_float('2A5C3F4062E4F2FCCE7A1C7B4310CB647B327409F580F4ED72CB8FC0B1804DFA'))
          215         self.assertFalse(is_non_negative_int_or_float('000'))
          216         self.assertFalse(is_non_negative_int_or_float('qweqwe'))
          217         self.assertFalse(is_non_negative_int_or_float(None))
          218 
          219     def test_chunks(self):
          220         self.assertEqual([[1, 2], [3, 4], [5]],
          221                          list(chunks([1, 2, 3, 4, 5], 2)))
          222         self.assertEqual([], list(chunks(b'', 64)))
          223         self.assertEqual([b'12', b'34', b'56'],
          224                          list(chunks(b'123456', 2)))
          225         with self.assertRaises(ValueError):
          226             list(chunks([1, 2, 3], 0))
          227 
          228     def test_list_enabled_bits(self):
          229         self.assertEqual((0, 2, 3, 6), list_enabled_bits(77))
          230         self.assertEqual((), list_enabled_bits(0))
          231 
          232     def test_is_ip_address(self):
          233         self.assertTrue(is_ip_address("127.0.0.1"))
          234         self.assertTrue(is_ip_address("127.000.000.1"))
          235         self.assertTrue(is_ip_address("255.255.255.255"))
          236         self.assertFalse(is_ip_address("255.255.256.255"))
          237         self.assertFalse(is_ip_address("123.456.789.000"))
          238         self.assertTrue(is_ip_address("2001:0db8:0000:0000:0000:ff00:0042:8329"))
          239         self.assertTrue(is_ip_address("2001:db8:0:0:0:ff00:42:8329"))
          240         self.assertTrue(is_ip_address("2001:db8::ff00:42:8329"))
          241         self.assertFalse(is_ip_address("2001:::db8::ff00:42:8329"))
          242         self.assertTrue(is_ip_address("::1"))
          243         self.assertFalse(is_ip_address("2001:db8:0:0:g:ff00:42:8329"))
          244         self.assertFalse(is_ip_address("lol"))
          245         self.assertFalse(is_ip_address(":@ASD:@AS\x77\x22\xff¬!"))
          246 
          247     def test_is_private_netaddress(self):
          248         self.assertTrue(is_private_netaddress("127.0.0.1"))
          249         self.assertTrue(is_private_netaddress("127.5.6.7"))
          250         self.assertTrue(is_private_netaddress("::1"))
          251         self.assertTrue(is_private_netaddress("[::1]"))
          252         self.assertTrue(is_private_netaddress("localhost"))
          253         self.assertTrue(is_private_netaddress("localhost."))
          254         self.assertFalse(is_private_netaddress("[::2]"))
          255         self.assertFalse(is_private_netaddress("2a00:1450:400e:80d::200e"))
          256         self.assertFalse(is_private_netaddress("[2a00:1450:400e:80d::200e]"))
          257         self.assertFalse(is_private_netaddress("8.8.8.8"))
          258         self.assertFalse(is_private_netaddress("example.com"))