示例#1
0
    def test_token_info(self):
        '''
        获取地址信息
        :return: json
        '''
        url = get_api_url('token_info')
        params = {'chain': "ethereum"}

        # token level
        filters = ['tx', "holder"]
        for f in filters:
            res = requests.get(url + '/DGD?filter=%s' % f,
                               params=params).json()
            self.assert_request_success(res)
            data = res['data']
            req_content = data[f]
            self.assertEqual(len(req_content), 10)

        # account level
        filters = ['in', "out"]
        addr = "0x6bdf7b73632379960c4dc25f9f6b2c92ecefde4d"
        for f in filters:
            res = requests.get(url + '/DGD?filter=%s&a=%s' % (f, addr),
                               params=params).json()
            self.assert_request_success(res)
            data = res['data']
            self.assertIn(f, res['data'])
示例#2
0
    def test_block_info(self):
        '''
                   获取区块信息
        :return: json
        '''
        url = get_api_url('block_info')
        block_height = 330000

        for i in range(3):
            #test block height
            chain = '?chain=bitcoin'
            page = '&page=%d' % i if i else ''
            res = requests.get(url + '/%d' % block_height + chain +
                               page).json()
            self.assert_request_success(res)
            self.assert_equal(res, 'height', block_height)

            #test block hash
            for block_hash in config.BTC_BLOCK_HASHS:
                res = requests.get(url + '/%s' % block_hash + chain +
                                   page).json()
                self.assert_request_success(res)
                self.assert_equal(res, 'hash', block_hash)

        #test block list
        res = requests.get(url + 's?chain=bitcoin').json()
        self.assert_request_success(res)
        self.assert_len(res['data'], 6)

        res = requests.get(url + 's?start=0&offset=30&chain=bitcoin').json()
        self.assert_request_success(res)
        self.assert_len(res['data'], 30)
示例#3
0
    def test_block_info(self):
        '''
        获取区块信息
        :return: json
        '''
        url = get_api_url('block_info')
        block_heights = config.BLOCK_IDS


        params = {
            'chain' : "ethereum"
        }

        # genesis block and normal block by block number
        for block_height in block_heights:
            res = requests.get(url + "/%s" % block_height, params = params).json()
            self.assert_request_success(res)
            self.assert_equal(res, 'number', block_height)
            self.assertIn("confirmation", res["data"])

        # genesis block and normal block by block hash
        for block_hash in config.ETH_BLOCK_HASHS:
            url2 = url + '/%s' % block_hash
            res = requests.get(url2, params = params).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['hash'], block_hash)

        # test block with page param
        for i in range(1, 5):
            res = requests.get(url+'/0?page=%d' % i, params = params).json()
            self.assert_request_success(res)
            self.assert_len(res['data']['transactions'], 10)

        res = requests.get(url+'/0?page=890', params = params).json()
        self.assert_request_success(res)
        self.assert_len(res['data']['transactions'], 3)

        res = requests.get(url+'/0?page=891', params = params).json()
        self.assert_request_success(res)
        self.assert_len(res['data']['transactions'], 0)

        # test block list without param
        res = requests.get(url+'s', params = params).json()
        self.assert_request_success(res)
        self.assert_len(res['data']['blocks'], 10)

        # test block list with page param
        res = requests.get(url+'s?page=1', params = params).json()
        self.assert_request_success(res)
        self.assert_len(res['data']['blocks'], 10)

        # test block list with start offset param
        res = requests.get(url+'s?start=0&offset=30', params = params).json()
        self.assert_request_success(res)
        self.assert_len(res['data']['blocks'], 30)
        for _ in range(0, 29):
            blk1 = res['data']['blocks'][_]
            blk2 = res['data']['blocks'][_+1]
            self.assertGreaterEqual(blk1['number'], blk2['number'])
示例#4
0
 def test_market_info(self):
     '''
             获取价格和24hr统计信息
     :return: json
     '''
     url = get_api_url('market_info')
     res = requests.get(url).json()
     self.assert_request_success(res)
示例#5
0
 def test_abouts(self):
     '''
                 获取文案信息
     :return: json
     '''
     url = get_api_url('abouts_info')
     res = requests.get(url).json()
     self.assert_request_success(res)
示例#6
0
 def test_captcha_code(self):
     '''
                 测试验证码
     :return: json
     '''
     url = get_api_url('captcha_info')
     res = requests.get(url + '?width=10&height=20')
     self.__assert_binary(res)
示例#7
0
 def test_logo(self):
     '''
                 测试logo
     :return: json
     '''
     url = get_api_url('logo_info')
     for name in config.LOGOS:
         res = requests.get(url + '?name=%s&width=10&height=20' % name)
         self.__assert_binary(res)
示例#8
0
 def test_qrcode(self):
     '''
                测试二维码信息
     :return: json
     '''
     url = get_api_url('qr_info')
     res = requests.get(url +
                        '?data=1NkAKsHPpT5LAaDPCMoL9hGG2vT9EbeRbB&size=200')
     self.__assert_binary(res)
示例#9
0
    def __test_tx_chart(self):

        start_point = [0, 10, 20]

        url = get_api_url('tx_chart_info')
        for chart in config.TX_CHARTS:
            for s in start_point:
                res = requests.get(url + '?start=%d&offset=%d&type=%s' %
                                   (s, s + 10, chart)).json()
                self.assert_request_success(res)
示例#10
0
    def test_miner_info(self):
        '''
                   获取区块信息
        :return: json
        '''
        url = get_api_url('miner_info')

        for miner in config.MINERS:
            res = requests.get(url + '/%s?chain=bitcoin&page=2' % miner).json()
            self.assert_request_success(res)
示例#11
0
 def test_search(self):
     '''
             搜索测试
    :return: json
    '''
     url = get_api_url('search_info')
     for sp in config.SEARCH_PATTERN:
         pay_load = {'q': sp}
         res = requests.post(url, data=pay_load).json()
         self.assert_request_modified(res)
示例#12
0
    def test_archives_info(self):
        '''
                    获取地址信息
        :return: json
        '''
        url = get_api_url('archives_info')
        
        res = requests.get(url+'/list?start=0&offset=15').json()
        self.assert_request_success(res)
        
        for f in config.ARCHIVES_FILTERS:
            res = requests.get(url+'/list?start=0&offset=15&filter=%s' % f).json()
            self.assert_request_success(res)
            res = requests.get(url+'/list?start=15&offset=30&filter=%s' % f).json()
            self.assert_request_success(res)

        
        url = get_api_url('archives_noted_info')
        for f in config.ARCHIVES_FILTERS:
            res = requests.get(url+'/list_noted?start=0&offset=15&filter=%s' % f).json()
            self.assert_request_success(res)
示例#13
0
    def __test_miner_chart(self):
        timespan = [1, 2, 6, 12, 24, 100]

        url = get_api_url('miner_chart_info')
        for chart in config.MINERS:
            for ts in timespan:
                res = requests.get(url + '/%s?timespan=%d&linear=0' %
                                   (chart, ts)).json()
                self.assert_request_success(res)
                res = requests.get(url + '/%s?timespan=%d&linear=1' %
                                   (chart, ts)).json()
                self.assert_request_success(res)
示例#14
0
    def __test_block_chart(self):
        timespan = [1, 2, 6, 12, 24, 100]

        url = get_api_url('block_chart_info')
        for chart in config.BLOCK_CHARTS:
            for ts in timespan:
                res = requests.get(url + '/%s?timespan=%d&linear=0' %
                                   (chart, ts)).json()
                self.assert_request_success(res)
                res = requests.get(url + '/%s?timespan=%d&linear=1' %
                                   (chart, ts)).json()
                self.assert_request_success(res)

        url = get_api_url('block_index_chart_info')

        timespan = [1, 7, 30]
        for chart in config.BLOCK_INDEX_CHARTS:
            for ts in timespan:
                res = requests.get(url + '/%s?timespan=%d' %
                                   (chart, ts)).json()
                self.assert_request_success(res)
示例#15
0
 def test_search_address(self):
     url = get_api_url('search_info')
     params = {
         'chain': "bitcoin",
         'q': '',
     }
     headers = {'content-type': 'application/json'}
     for addr in config.ADDRESSES:
         params['q'] = addr
         res = requests.post(url, data=json.dumps(params),
                             headers=headers).json()
         self.assertEqual(res['code'], '302')
         self.assertEqual(res['status'], 'success', msg=u'请求失败')
示例#16
0
    def test_address_info(self):
        '''
        获取地址信息
        :return: json
        '''
        url = get_api_url('address_info')
        params = {'chain': "ethereum"}
        ''' 1 normal account '''
        # normal info
        addr = config.ETHERUM_ADDRESS[0]

        params['filter'] = 'tx'
        res = requests.get(url + '/%s' % addr, params=params).json()
        self.assert_request_success(res)
        self.assertEqual(res['data']['contract_flag'], False)
        self.assertEqual(res['data']['miner_flag'], False)
        txs = res['data']['tx']
        self.assertEqual(len(txs), 10)
        self.assertEqual(res['data']['pages'], 81)
        # miner info
        addr = config.ETHERUM_ADDRESS[1]

        params['filter'] = 'mine'
        res = requests.get(url + '/%s' % addr, params=params).json()
        self.assert_request_success(res)
        self.assertEqual(res['data']['contract_flag'], False)
        self.assertEqual(res['data']['miner_flag'], True)
        mine = res['data']['mine']
        self.assertEqual(len(mine), 10)
        self.assertEqual(res['data']['pages'], 47)

        params['filter'] = 'uncles'
        res = requests.get(url + '/%s' % addr, params=params).json()
        self.assert_request_success(res)
        self.assertEqual(res['data']['contract_flag'], False)
        self.assertEqual(res['data']['miner_flag'], True)
        uncles = res['data']['uncles']
        self.assertEqual(len(uncles), 10)
        self.assertEqual(res['data']['pages'], 6)
        ''' 2 contract account '''
        # contract account
        # DGD
        addr = "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a"
        params['filter'] = 'tx'
        res = requests.get(url + '/%s' % addr, params=params).json()
        self.assert_request_success(res)
        self.assertEqual(res['data']['miner_flag'], False)
        self.assertEqual(res['data']['contract_flag'], True)
        self.assertIn("abi", res['data'])
        self.assertIn("source_code", res['data'])
示例#17
0
    def __test_address_chart(self):
        timespan = [1, 2, 6, 12, 24, 100]

        addr = '1HstuMgmBZkLGBTPLH7U6HQjRZDvwc7J2M'

        url = get_api_url('address_chart_info')
        for chart in config.ADDRESS_CHARTS:
            for ts in timespan:
                res = requests.get(url + '/%s?q=%s&timespan=%d&linear=0' %
                                   (chart, addr, ts)).json()
                self.assert_request_success(res)
                res = requests.get(url + '/%s?q=%s&timespan=%d&linear=1' %
                                   (chart, addr, ts)).json()
                self.assert_request_success(res)
示例#18
0
    def test_search_pattern(self):

        url = get_api_url('search_info')
        params = {
            'chain': "bitcoin",
            'q': '',
        }
        headers = {'content-type': 'application/json'}
        for pattern in config.SEARCH_PATTERN:
            params['q'] = pattern
            res = requests.post(url, data=json.dumps(params),
                                headers=headers).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求成功')
示例#19
0
 def test_search_tx(self):
     url = get_api_url('search_info')
     params = {
         'chain' : "ethereum",
         'q' : '',
     }
     for tx_hash in config.ETH_TX_HASHS:
         params['q'] = tx_hash
         res = requests.post(url, params = params).json()
         self.assertEqual(res['code'], '302')
         self.assertEqual(res['status'], 'success', msg=u'请求失败')
         #test tx in detail
         redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
         res = requests.get(redirect_url, params = {"chain":"ethereum", "detail":0}).json()
         self.assert_request_success(res)
         self.assertEqual(res['data']['tx']['hash'], tx_hash)
示例#20
0
 def test_tx_info(self):
     '''
                 获取交易信息
     :return: json
     '''
     url = get_api_url('tx_info')   
     
     for tx_hash in config.TX_HASHS:
         #test tx in short
         res = requests.get(url+'/%s?detail=0&chain=bitcoin' % tx_hash).json()
         self.assert_request_success(res)
         #test tx in detail
         res = requests.get(url+'/%s?detail=1&chain=bitcoin' % tx_hash).json()
         self.assert_request_success(res)
         self.assert_in(res, 'inputs', 'script')
         self.assert_in(res, 'outputs', 'script')
示例#21
0
    def test_search_address(self):
        url = get_api_url('search_info')
        params = {
            'chain' : "ethereum",
            'q' : '',
        }
        for addr in config.ETHERUM_ADDRESS[1:]:
            params['q'] = addr
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')

            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['address'], addr)
示例#22
0
 def test_address_info(self):
     '''
                 获取地址信息
     :return: json
     '''
     url = get_api_url('address_info')
     
     for addr in config.ADDRESSES:
         #single url
         res = requests.get(url+'/%s?chain=bitcoin' % addr).json()
         self.assert_request_success(res)
     
         for f in config.FILTERS:
             page = '?page=2'
             filter = '&filter=%s&chain=bitcoin' % f
             res = requests.get(url+'/%s' % addr + page + filter).json()
             self.assert_request_success(res)
示例#23
0
    def test_stat_info(self):
        '''
                    获取区块链统计信息
        :return: json
        '''
        url = get_api_url('stat_info')
        #blockchain stat
        res = requests.get(url + '/blockchain').json()
        self.assert_request_success(res)

        #tx stat
        res = requests.get(url + '/tx').json()
        self.assert_request_success(res)

        #block stat
        res = requests.get(url + '/block').json()
        self.assert_request_success(res)

        #address stat
        res = requests.get(url + '/address').json()
        self.assert_request_success(res)
示例#24
0
    def test_search_block(self):
        # multi is False
        url = get_api_url('search_info')
        params = {
            'chain': "bitcoin",
            'q': '',
        }
        headers = {'content-type': 'application/json'}

        for block_height in config.BLOCK_IDS:
            params['q'] = block_height
            res = requests.post(url, data=json.dumps(params),
                                headers=headers).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求成功')

        for block_hash in config.BLOCK_HASHS:
            params['q'] = block_hash
            res = requests.post(url, data=json.dumps(params),
                                headers=headers).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求成功')
示例#25
0
    def setUp(self):
        """
        setup fixtures
        :return:
        """
        self.app = blockmeta.app
        self.host = HOST

        # login and get the token
        url = get_api_url('login')
        res = requests.post(url, data={'email': EMAIL, 'password': PASSWORD})

        assert res.json()['code'] == u'200', u'登录失败'
        assert res.json()['status'] == 'success', u'登录失败'
        self.token = res.cookies.get('token')
        self.key = res.cookies.get('key')
        data = res.json()['data']
        self.user_id = data['user_id']
        self.remote_ip = data['remote_ip']
        self.csrf_token = self._generate_csrf_token()

        self.cookies = {'token': self.token, 'key': self.key}
        self.headers = {'csrf-token': self.csrf_token}
示例#26
0
    def test_api_info(self):
        '''
                     测试对外API信息
        :return: json
        '''
        url = get_api_url('api_info')

        SIMPLE_APIS = [
            'getdifficulty',
            'getblockcount',
            'reward',
            'chainsize',
            'totalbtc',
            'interval',
            'hashrate',
            'avgtxnum',
            'nextdifficulty',
            'lastminer',
            'lastblockhash',
            'unconfirmedcount',
            '24hrpoolstat',
            '24hrblockcount',
            'ticker',
        ]

        #simple API
        for api in SIMPLE_APIS:
            res = requests.get(url + '/chain/%s' % api).json()
            self.assert_request_success(res)

        #tx api
        txid = "34668ec700f9ed6037d473830c0d47548bf8462c1e83bc0a2380dda74aded84e"

        self.__request_assert(url + '/tx/info/%s' % txid)
        self.__request_assert(url + '/tx/raw/%s' % txid)

        txids = ','.join(id for id in config.TX_HASHS)

        self.__request_assert(url + '/tx/info/%s' % txids)
        self.__request_assert(url + '/tx/raw/%s' % txids)

        #block api
        h1, h2, h3 = 310021, 232132, 23
        bhash = "00000000000000000612c5c994f64af6722fa20f209a98e367b58a141615cc0d"
        bhashs = ','.join(id for id in config.BLOCK_HASHS)
        self.__request_assert(url + '/block/info/%d' % h1)
        self.__request_assert(url + '/block/info/%s' % bhash)
        self.__request_assert(url + '/block/info/%s' % bhashs)
        self.__request_assert(url + '/block/info/%d,%d,%d' % (h1, h2, h3))
        self.__request_assert(url + '/block/info/first,last')

        self.__request_assert(url + '/block/raw/%d' % h1)
        self.__request_assert(url + '/block/raw/%s' % bhash)
        self.__request_assert(url + '/block/raw/%s' % bhashs)
        self.__request_assert(url + '/block/raw/%d,%d,%d' % (h1, h2, h3))
        self.__request_assert(url + '/block/raw/first,last')

        self.__request_assert(url + '/block/tx/%d' % h1)
        self.__request_assert(url + '/block/tx/%s' % bhash)
        self.__request_assert(url + '/block/tx/%s' % bhashs)
        self.__request_assert(url + '/block/tx/%d,%d,%d' % (h1, h2, h3))
        self.__request_assert(url + '/block/tx/first,last')

        #address api
        addr = "1EkRKXzUhkoz1LvYS4MU1NJzMQPuWi7hAZ"
        self.__request_assert(url + '/address/info/%s' % addr)
        self.__request_assert(url + '/address/unconfirmed/%s' % addr)
        self.__request_assert(url + '/address/unspent/%s' % addr)

        addrs = ','.join(addr for addr in config.ADDRESSES)
        self.__request_assert(url + '/address/info/%s' % addr)
        self.__request_assert(url + '/address/unconfirmed/%s' % addr)
        self.__request_assert(url + '/address/unspent/%s' % addr)

        #tool api
        dbhash = '90ba214202df2979e3f8866b9a65b7935d2df530'
        self.__request_assert(url + '/tool/hashtoaddress?q=%s' % dbhash)
        self.__request_assert(url + '/tool/hashtoaddress?q=%s&v=0' % dbhash)
        self.__request_assert(url + '/tool/addresstohash?q=%s' % dbhash)
示例#27
0
    def test_search_block(self):
        # multi is False
        url = get_api_url('search_info')
        block_heights = config.BLOCK_IDS
        params = {
            'chain' : "ethereum",
            'q' : '',
        }
        
        for block_height in block_heights:
            params['q'] = block_height
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')
            
            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['number'], block_height)

        for block_hash in config.ETH_BLOCK_HASHS:
            params['q'] = block_hash
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')
            
            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['hash'], block_hash)

        for block_hash in config.ETH_BLOCK_HASHS:
            params['q'] = block_hash[2:]
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')
            
            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['hash'], block_hash)
        
        # uncle
        for block_hash in config.ETH_UNCLES:
            params['q'] = block_hash
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')
            
            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
            self.assertEqual(res['data']['hash'], block_hash)

        for token in ["DGD", "DCS"]:
            params['q'] = token
            res = requests.post(url, params = params).json()
            self.assertEqual(res['code'], '302')
            self.assertEqual(res['status'], 'success', msg=u'请求失败')
            
            redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"]
            res = requests.get(redirect_url, params = {"chain":"ethereum"}).json()
            self.assert_request_success(res)
示例#28
0
    def __test_charts(self):

        url = get_api_url('charts_info')
        for chart in config.KNOWN_CHARTS:
            res = requests.get(url + '/%s' % chart).json()
            self.assert_request_success(res)