83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import subprocess
|
||
|
import re
|
||
|
|
||
|
from robot.api.deco import keyword
|
||
|
from robot.api import logger
|
||
|
|
||
|
import logging
|
||
|
import robot.errors
|
||
|
import requests
|
||
|
|
||
|
from robot.libraries.BuiltIn import BuiltIn
|
||
|
from neocore.KeyPair import KeyPair
|
||
|
|
||
|
from Crypto import Random
|
||
|
|
||
|
ROBOT_AUTO_KEYWORDS = False
|
||
|
|
||
|
@keyword('Request NeoFS Deposit')
|
||
|
def request_neofs_deposit(public_key: str):
|
||
|
"""
|
||
|
This function requests Deposit to the selected public key.
|
||
|
:param public_key: neo public key
|
||
|
"""
|
||
|
|
||
|
response = requests.get('https://fs.localtest.nspcc.ru/api/deposit/'+str(public_key), verify='ca/nspcc-ca.pem')
|
||
|
|
||
|
if response.status_code != 200:
|
||
|
BuiltIn().fatal_error('Can not run Deposit to {} with error: {}'.format(public_key, response.text))
|
||
|
else:
|
||
|
logger.info("Deposit has been completed for '%s'; tx: '%s'" % (public_key, response.text) )
|
||
|
|
||
|
return response.text
|
||
|
|
||
|
@keyword('Get Balance')
|
||
|
def get_balance(public_key: str):
|
||
|
"""
|
||
|
This function returns NeoFS balance for selected public key.
|
||
|
:param public_key: neo public key
|
||
|
"""
|
||
|
|
||
|
balance = _get_balance_request(public_key)
|
||
|
|
||
|
return balance
|
||
|
|
||
|
@keyword('Expected Balance')
|
||
|
def expected_balance(public_key: str, init_amount: float, deposit_size: float):
|
||
|
"""
|
||
|
This function returns NeoFS balance for selected public key.
|
||
|
:param public_key: neo public key
|
||
|
:param init_amount: initial number of tokens in the account
|
||
|
:param deposit_size: expected amount of the balance increasing
|
||
|
"""
|
||
|
|
||
|
balance = _get_balance_request(public_key)
|
||
|
|
||
|
deposit_change = round((float(balance) - init_amount),8)
|
||
|
if deposit_change != deposit_size:
|
||
|
raise Exception('Expected deposit increase: {}. This does not correspond to the actual change in account: {}'.format(deposit_size, deposit_change))
|
||
|
|
||
|
logger.info('Expected deposit increase: {}. This correspond to the actual change in account: {}'.format(deposit_size, deposit_change))
|
||
|
|
||
|
return deposit_change
|
||
|
|
||
|
|
||
|
def _get_balance_request(public_key: str):
|
||
|
'''
|
||
|
Internal method.
|
||
|
'''
|
||
|
response = requests.get('https://fs.localtest.nspcc.ru/api/balance/neofs/'+str(public_key)+'/', verify='ca/nspcc-ca.pem')
|
||
|
|
||
|
if response.status_code != 200:
|
||
|
raise Exception('Can not get balance for {} with error: {}'.format(public_key, response.text))
|
||
|
|
||
|
m = re.match(r"\"+([\d.\.?\d*]+)", response.text )
|
||
|
if m is None:
|
||
|
BuiltIn().fatal_error('Can not parse balance: "%s"' % response.text)
|
||
|
balance = m.group(1)
|
||
|
|
||
|
logger.info("Balance for '%s' is '%s'" % (public_key, balance) )
|
||
|
|
||
|
return balance
|