fixed [#233]; keywords from neofs-keywords moved to neofs-testcases

Signed-off-by: anastasia prasolova <anastasia@nspcc.ru>
This commit is contained in:
anastasia prasolova 2022-07-04 22:49:14 +03:00 committed by Anastasia Prasolova
parent b1b86351df
commit 34d282cf5a
19 changed files with 147 additions and 72 deletions

View file

@ -0,0 +1,31 @@
#!/usr/bin/python3.9
import contract
from robot.api import logger
from robot.api.deco import keyword
from robot.libraries.BuiltIn import BuiltIn
IR_WALLET_PATH = BuiltIn().get_variable_value("${IR_WALLET_PATH}")
IR_WALLET_PASS = BuiltIn().get_variable_value("${IR_WALLET_PASS}")
SIDECHAIN_EP = BuiltIn().get_variable_value("${MORPH_ENDPOINT}")
@keyword('Get Epoch')
def get_epoch():
epoch = int(contract.testinvoke_contract(
contract.get_netmap_contract_hash(SIDECHAIN_EP),
'epoch',
SIDECHAIN_EP)
)
logger.info(f"Got epoch {epoch}")
return epoch
@keyword('Tick Epoch')
def tick_epoch():
cur_epoch = get_epoch()
return contract.invoke_contract_multisig(
contract.get_netmap_contract_hash(SIDECHAIN_EP),
f"newEpoch int:{cur_epoch+1}",
IR_WALLET_PATH, IR_WALLET_PASS, SIDECHAIN_EP)

View file

@ -3,29 +3,26 @@
import re import re
import time import time
from common import (MAINNET_WALLET_PATH, MORPH_ENDPOINT,
NEO_MAINNET_ENDPOINT, NEOFS_CONTRACT, MAINNET_SINGLE_ADDR)
import rpc_client
import contract import contract
import converters import converters
from wallet import nep17_transfer import rpc_client
from wrappers import run_sh_with_passwd_contract from common import (GAS_HASH, MAINNET_SINGLE_ADDR, MAINNET_WALLET_PATH,
MORPH_ENDPOINT, NEO_MAINNET_ENDPOINT, NEOFS_CONTRACT,
NEOGO_CLI_EXEC)
from converters import load_wallet from converters import load_wallet
from neo3 import wallet from neo3 import wallet
from robot.api.deco import keyword
from robot.api import logger from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn from robot.api.deco import keyword
from wallet import nep17_transfer
from wrappers import run_sh_with_passwd_contract
ROBOT_AUTO_KEYWORDS = False ROBOT_AUTO_KEYWORDS = False
MORPH_TOKEN_POWER = 12
EMPTY_PASSWORD = '' EMPTY_PASSWORD = ''
MAINNET_WALLET_PASS = 'one' MAINNET_WALLET_PASS = 'one'
TX_PERSIST_TIMEOUT = 15 #seconds TX_PERSIST_TIMEOUT = 15 # seconds
ASSET_POWER_MAINCHAIN = 10 ** 8
NEOGO_CLI_EXEC = BuiltIn().get_variable_value("${NEOGO_CLI_EXEC}") ASSET_POWER_SIDECHAIN = 10 ** 12
morph_rpc_cli = rpc_client.RPCClient(MORPH_ENDPOINT) morph_rpc_cli = rpc_client.RPCClient(MORPH_ENDPOINT)
mainnet_rpc_cli = rpc_client.RPCClient(NEO_MAINNET_ENDPOINT) mainnet_rpc_cli = rpc_client.RPCClient(NEO_MAINNET_ENDPOINT)
@ -43,7 +40,8 @@ def withdraw_mainnet_gas(wlt: str, amount: int):
) )
logger.info(f"Executing command: {cmd}") logger.info(f"Executing command: {cmd}")
out = (run_sh_with_passwd_contract('', cmd, expect_confirmation=True)).decode('utf-8') raw_out = run_sh_with_passwd_contract('', cmd, expect_confirmation=True)
out = raw_out.decode('utf-8')
logger.info(f"Command completed with output: {out}") logger.info(f"Command completed with output: {out}")
m = re.match(r'^Sent invocation transaction (\w{64})$', out) m = re.match(r'^Sent invocation transaction (\w{64})$', out)
if m is None: if m is None:
@ -96,14 +94,15 @@ def get_balance(wallet_path: str):
) )
logger.info(f"Got response \n{resp}") logger.info(f"Got response \n{resp}")
value = int(resp['stack'][0]['value']) value = int(resp['stack'][0]['value'])
return value / (10 ** MORPH_TOKEN_POWER) return value / ASSET_POWER_SIDECHAIN
except Exception as out: except Exception as out:
logger.error(f"failed to get wallet balance: {out}") logger.error(f"failed to get wallet balance: {out}")
raise out raise out
@keyword('Transfer Mainnet Gas') @keyword('Transfer Mainnet Gas')
def transfer_mainnet_gas(wallet_to: str, amount: int, wallet_password: str = EMPTY_PASSWORD): def transfer_mainnet_gas(wallet_to: str, amount: int,
wallet_password: str = EMPTY_PASSWORD):
''' '''
This function transfer GAS in main chain from mainnet wallet to This function transfer GAS in main chain from mainnet wallet to
the provided wallet. If the wallet contains more than one address, the provided wallet. If the wallet contains more than one address,
@ -118,14 +117,17 @@ def transfer_mainnet_gas(wallet_to: str, amount: int, wallet_password: str = EMP
''' '''
address_to = _address_from_wallet(wallet_to, wallet_password) address_to = _address_from_wallet(wallet_to, wallet_password)
txid = nep17_transfer(MAINNET_WALLET_PATH, address_to, amount, NEO_MAINNET_ENDPOINT, txid = nep17_transfer(MAINNET_WALLET_PATH, address_to, amount,
wallet_pass=MAINNET_WALLET_PASS, addr_from=MAINNET_SINGLE_ADDR) NEO_MAINNET_ENDPOINT,
wallet_pass=MAINNET_WALLET_PASS,
addr_from=MAINNET_SINGLE_ADDR)
if not transaction_accepted(txid): if not transaction_accepted(txid):
raise AssertionError(f"TX {txid} hasn't been processed") raise AssertionError(f"TX {txid} hasn't been processed")
@keyword('NeoFS Deposit') @keyword('NeoFS Deposit')
def neofs_deposit(wallet_to: str, amount: int, wallet_password: str = EMPTY_PASSWORD): def neofs_deposit(wallet_to: str, amount: int,
wallet_password: str = EMPTY_PASSWORD):
""" """
Transferring GAS from given wallet to NeoFS contract address. Transferring GAS from given wallet to NeoFS contract address.
""" """
@ -135,11 +137,13 @@ def neofs_deposit(wallet_to: str, amount: int, wallet_password: str = EMPTY_PASS
address_to = _address_from_wallet(wallet_to, wallet_password) address_to = _address_from_wallet(wallet_to, wallet_password)
txid = nep17_transfer(wallet_to, deposit_addr, amount, NEO_MAINNET_ENDPOINT, txid = nep17_transfer(wallet_to, deposit_addr, amount,
wallet_pass=wallet_password, addr_from=address_to) NEO_MAINNET_ENDPOINT, wallet_pass=wallet_password,
addr_from=address_to)
if not transaction_accepted(txid): if not transaction_accepted(txid):
raise AssertionError(f"TX {txid} hasn't been processed") raise AssertionError(f"TX {txid} hasn't been processed")
def _address_from_wallet(wlt: str, wallet_password: str): def _address_from_wallet(wlt: str, wallet_password: str):
""" """
Extracting the address from the given wallet. Extracting the address from the given wallet.
@ -153,3 +157,23 @@ def _address_from_wallet(wlt: str, wallet_password: str):
address = wallet_loaded.accounts[-1].address address = wallet_loaded.accounts[-1].address
logger.info(f"got address: {address}") logger.info(f"got address: {address}")
return address return address
@keyword('Get Mainnet Balance')
def get_mainnet_balance(address: str):
resp = mainnet_rpc_cli.get_nep17_balances(address=address)
logger.info(f"Got getnep17balances response: {resp}")
for balance in resp['balance']:
if balance['assethash'] == GAS_HASH:
return float(balance['amount'])/ASSET_POWER_MAINCHAIN
return float(0)
@keyword('Get Sidechain Balance')
def get_sidechain_balance(address: str):
resp = morph_rpc_cli.get_nep17_balances(address=address)
logger.info(f"Got getnep17balances response: {resp}")
for balance in resp['balance']:
if balance['assethash'] == GAS_HASH:
return float(balance['amount'])/ASSET_POWER_SIDECHAIN
return float(0)

View file

@ -6,12 +6,13 @@ import tarfile
import uuid import uuid
import docker import docker
import wallet
from common import ASSETS_DIR, SIMPLE_OBJ_SIZE
from robot.api import logger from robot.api import logger
from robot.api.deco import keyword from robot.api.deco import keyword
from robot.libraries.BuiltIn import BuiltIn from robot.libraries.BuiltIn import BuiltIn
from cli_helpers import _cmd_run from cli_helpers import _cmd_run
from common import SIMPLE_OBJ_SIZE, ASSETS_DIR
ROBOT_AUTO_KEYWORDS = False ROBOT_AUTO_KEYWORDS = False
@ -19,7 +20,8 @@ ROBOT_AUTO_KEYWORDS = False
@keyword('Generate file') @keyword('Generate file')
def generate_file_and_file_hash(size: int) -> str: def generate_file_and_file_hash(size: int) -> str:
""" """
Function generates a big binary file with the specified size in bytes and its hash. Function generates a big binary file with the specified size in bytes
and its hash.
Args: Args:
size (int): the size in bytes, can be declared as 6e+6 for example size (int): the size in bytes, can be declared as 6e+6 for example
Returns: Returns:
@ -51,6 +53,18 @@ def get_file_hash(filename: str):
return file_hash.hexdigest() return file_hash.hexdigest()
@keyword('Generate Wallet')
def generate_wallet():
return wallet.init_wallet_w_addr(ASSETS_DIR)
# TODO: should be deleted in the scope
# of https://github.com/nspcc-dev/neofs-testcases/issues/191
@keyword('Init Wallet from WIF')
def init_wallet_from_wif(dir_path: str, wif: str):
return wallet.init_wallet_from_wif(dir_path, wif)
@keyword('Get Docker Logs') @keyword('Get Docker Logs')
def get_container_logs(testcase_name: str) -> None: def get_container_logs(testcase_name: str) -> None:
client = docker.APIClient(base_url='unix://var/run/docker.sock') client = docker.APIClient(base_url='unix://var/run/docker.sock')
@ -59,7 +73,8 @@ def get_container_logs(testcase_name: str) -> None:
tar = tarfile.open(tar_name, "w:gz") tar = tarfile.open(tar_name, "w:gz")
for container in client.containers(): for container in client.containers():
container_name = container['Names'][0][1:] container_name = container['Names'][0][1:]
if client.inspect_container(container_name)['Config']['Domainname'] == "neofs.devenv": if (client.inspect_container(container_name)['Config']['Domainname']
== "neofs.devenv"):
file_name = f"{logs_dir}/docker_log_{container_name}" file_name = f"{logs_dir}/docker_log_{container_name}"
with open(file_name, 'wb') as out: with open(file_name, 'wb') as out:
out.write(client.logs(container_name)) out.write(client.logs(container_name))
@ -84,7 +99,10 @@ def make_up(services: list = [], config_dict: dict = {}):
cmd = f'make up/{service}' cmd = f'make up/{service}'
_cmd_run(cmd) _cmd_run(cmd)
else: else:
cmd = f'make up/basic; make update.max_object_size val={SIMPLE_OBJ_SIZE}' cmd = (
f'make up/basic;'
f'make update.max_object_size val={SIMPLE_OBJ_SIZE}'
)
_cmd_run(cmd, timeout=120) _cmd_run(cmd, timeout=120)
os.chdir(test_path) os.chdir(test_path)

View file

@ -1,8 +1,7 @@
*** Settings *** *** Settings ***
Variables common.py Variables common.py
Library wallet_keywords.py Library utility_keywords.py
Library rpc_call_keywords.py
Library payment_neogo.py Library payment_neogo.py
@ -13,7 +12,7 @@ Prepare Wallet And Deposit
${WALLET} ${WALLET}
... ${ADDR} ... ${ADDR}
... ${WIF} = Init Wallet with Address ${ASSETS_DIR} ... ${WIF} = Generate Wallet
Transfer Mainnet Gas ${WALLET} ${DEPOSIT+1} Transfer Mainnet Gas ${WALLET} ${DEPOSIT+1}
NeoFS Deposit ${WALLET} ${DEPOSIT} NeoFS Deposit ${WALLET} ${DEPOSIT}
# Now we have TX in main chain, but deposit might not propagate into the side chain yet. # Now we have TX in main chain, but deposit might not propagate into the side chain yet.
@ -22,6 +21,7 @@ Prepare Wallet And Deposit
[Return] ${WALLET} ${ADDR} ${WIF} [Return] ${WALLET} ${ADDR} ${WIF}
# TODO: should be deleted in the scope of https://github.com/nspcc-dev/neofs-testcases/issues/191
Prepare Wallet with WIF And Deposit Prepare Wallet with WIF And Deposit
[Arguments] ${WIF} ${DEPOSIT}=${30} [Arguments] ${WIF} ${DEPOSIT}=${30}

View file

@ -1,7 +1,7 @@
*** Settings *** *** Settings ***
Variables common.py Variables common.py
Library contract_keywords.py Library epoch.py
Library neofs.py Library neofs.py
Library neofs_verbs.py Library neofs_verbs.py
Library utility_keywords.py Library utility_keywords.py

View file

@ -50,6 +50,7 @@ Check eACL Deny All Other and Allow All Pubkey
${D_OID_USER} = Put object ${USER_WALLET} ${FILE_S} ${CID} user_headers=${USER_HEADER_DEL} ${D_OID_USER} = Put object ${USER_WALLET} ${FILE_S} ${CID} user_headers=${USER_HEADER_DEL}
@{S_OBJ_H} = Create List ${S_OID_USER} @{S_OBJ_H} = Create List ${S_OID_USER}
# TODO: should be deleted in the scope of https://github.com/nspcc-dev/neofs-testcases/issues/191
${WALLET_EACL} ${_} = Prepare Wallet with WIF And Deposit ${EACL_KEY} ${WALLET_EACL} ${_} = Prepare Wallet with WIF And Deposit ${EACL_KEY}
Put object ${WALLET_EACL} ${FILE_S} ${CID} user_headers=${ANOTHER_HEADER} Put object ${WALLET_EACL} ${FILE_S} ${CID} user_headers=${ANOTHER_HEADER}

View file

@ -3,7 +3,7 @@ Variables common.py
Library acl.py Library acl.py
Library container.py Library container.py
Library contract_keywords.py Library epoch.py
Library neofs.py Library neofs.py
Library neofs_verbs.py Library neofs_verbs.py
Library storage_policy.py Library storage_policy.py

View file

@ -3,7 +3,6 @@ Variables common.py
Library acl.py Library acl.py
Library container.py Library container.py
Library contract_keywords.py
Library neofs.py Library neofs.py
Library neofs_verbs.py Library neofs_verbs.py
Library Collections Library Collections
@ -24,7 +23,7 @@ ${CUSTOM_FILTER} = $Object:key1
Extended ACL Operations Extended ACL Operations
[Documentation] Testcase to validate NeoFS operations with extended ACL. [Documentation] Testcase to validate NeoFS operations with extended ACL.
[Tags] ACL eACL [Tags] ACL eACL
[Timeout] 20 min [Timeout] 2 min
[Setup] Setup [Setup] Setup

View file

@ -4,8 +4,6 @@ Variables common.py
Library Collections Library Collections
Library Process Library Process
Library String Library String
Library contract_keywords.py
Library cli_keywords.py
Library utility_keywords.py Library utility_keywords.py
Resource setup_teardown.robot Resource setup_teardown.robot
@ -17,7 +15,6 @@ ${DEPOSIT_AMOUNT} = ${10}
*** Test cases *** *** Test cases ***
CLI Accounting Balance Test CLI Accounting Balance Test
[Documentation] neofs-cli accounting balance test [Documentation] neofs-cli accounting balance test
[Tags] NeoFSCLI Accounting
[Timeout] 10 min [Timeout] 10 min
[Setup] Setup [Setup] Setup
@ -35,10 +32,10 @@ CLI Accounting Balance Test
Should Be Equal As Numbers ${OUTPUT.stdout} ${DEPOSIT_AMOUNT} Should Be Equal As Numbers ${OUTPUT.stdout} ${DEPOSIT_AMOUNT}
# Getting balance with wallet and wrong address # Getting balance with wallet and wrong address
${_} ${ANOTHER_ADDR} ${_} = Init Wallet With Address ${ASSETS_DIR} ${_} ${ANOTHER_ADDR} ${_} = Generate Wallet
${OUTPUT} = Run Process ${NEOFS_CLI_EXEC} accounting balance -r ${NEOFS_ENDPOINT} --address ${ANOTHER_ADDR} --wallet ${WALLET} --config ${WALLET_CONFIG} ${OUTPUT} = Run Process ${NEOFS_CLI_EXEC} accounting balance -r ${NEOFS_ENDPOINT} --address ${ANOTHER_ADDR} --wallet ${WALLET} --config ${WALLET_CONFIG}
... shell=True ... shell=True
Should Be Equal As Strings ${OUTPUT.stderr} --address option must be specified and valid Should Contain ${OUTPUT.stderr} --address option must be specified and valid
Should Be Equal As Numbers ${OUTPUT.rc} 1 Should Be Equal As Numbers ${OUTPUT.rc} 1
# Getting balance with control API # Getting balance with control API

View file

@ -4,7 +4,7 @@ Variables common.py
Library Collections Library Collections
Library Process Library Process
Library String Library String
Library contract_keywords.py Library epoch.py
Resource payment_operations.robot Resource payment_operations.robot
Resource setup_teardown.robot Resource setup_teardown.robot

View file

@ -2,40 +2,49 @@
Variables common.py Variables common.py
Library container.py Library container.py
Library wallet_keywords.py
Library contract_keywords.py
Library Collections Library Collections
Resource setup_teardown.robot Resource setup_teardown.robot
Resource payment_operations.robot Resource payment_operations.robot
*** Variables ***
# The timeout during which the container should be deleted. The deletion after
# this time isn't guaranteed, but is expected as we run the test in an
# isolated environment.
${DELETE_TIMEOUT} = 30s
*** Test Cases *** *** Test Cases ***
Delete Containers Delete Containers
[Documentation] Testcase to check if containers can be deleted by its owner only. [Documentation] Testcase to check if containers can be deleted by its owner only.
[Tags] Container [Tags] Container
[Timeout] 2 min [Timeout] 3 min
[Setup] Setup [Setup] Setup
${_} ${_} ${USER_KEY} = Prepare Wallet And Deposit ${WALLET}
${_} ${_} ${OTHER_KEY} = Prepare Wallet And Deposit ... ${_}
... ${_} = Prepare Wallet And Deposit
${ANOTHER_WALLET}
... ${_}
... ${_} = Prepare Wallet And Deposit
${CID} = Create container ${USER_KEY} ${CID} = Create container ${WALLET}
################################################################ ################################################################
# No explicit error is expected upon container deletion attempt # No explicit error is expected upon container deletion attempt
################################################################ ################################################################
Delete Container ${OTHER_KEY} ${CID} Delete Container ${ANOTHER_WALLET} ${CID}
Tick Epoch Sleep ${DELETE_TIMEOUT}
@{CONTAINERS} = List Containers ${USER_KEY} @{CONTAINERS} = List Containers ${WALLET}
List Should Contain Value List Should Contain Value
... ${CONTAINERS} ... ${CONTAINERS}
... ${CID} ... ${CID}
... msg="A key which doesn't owe the container is able to delete ${CID}" ... msg="A key which doesn't owe the container is able to delete ${CID}"
Delete Container ${USER_KEY} ${CID} Delete Container ${WALLET} ${CID}
Tick Epoch Sleep ${DELETE_TIMEOUT}
@{CONTAINERS} = List Containers ${USER_KEY} @{CONTAINERS} = List Containers ${WALLET}
List Should Not Contain Value List Should Not Contain Value
... ${CONTAINERS} ... ${CONTAINERS}
... ${CID} ... ${CID}
@ -44,6 +53,6 @@ Delete Containers
################################################################################### ###################################################################################
# If one tries to delete an already deleted container, they should expect success. # If one tries to delete an already deleted container, they should expect success.
################################################################################### ###################################################################################
Delete Container ${USER_KEY} ${CID} Delete Container ${WALLET} ${CID}
[Teardown] Teardown container_delete [Teardown] Teardown container_delete

View file

@ -2,7 +2,7 @@
Variables common.py Variables common.py
Library Process Library Process
Library contract_keywords.py Library epoch.py
Library neofs.py Library neofs.py
Library String Library String
Library acl.py Library acl.py

View file

@ -3,7 +3,7 @@ Variables common.py
Variables wellknown_acl.py Variables wellknown_acl.py
Library container.py Library container.py
Library contract_keywords.py Library epoch.py
Library neofs_verbs.py Library neofs_verbs.py
Library nodes_management.py Library nodes_management.py
Library storage_policy.py Library storage_policy.py

View file

@ -4,7 +4,6 @@ Variables common.py
Library container.py Library container.py
Library complex_object_actions.py Library complex_object_actions.py
Library contract_keywords.py
Library neofs_verbs.py Library neofs_verbs.py
Library neofs.py Library neofs.py
Library storage_policy.py Library storage_policy.py

View file

@ -3,7 +3,7 @@ Variables common.py
Library neofs_verbs.py Library neofs_verbs.py
Library container.py Library container.py
Library contract_keywords.py Library epoch.py
Library utility_keywords.py Library utility_keywords.py
Resource setup_teardown.robot Resource setup_teardown.robot

View file

@ -2,8 +2,7 @@
Variables common.py Variables common.py
Library payment_neogo.py Library payment_neogo.py
Library wallet_keywords.py Library utility_keywords.py
Library rpc_call_keywords.py
Library Process Library Process
Resource setup_teardown.robot Resource setup_teardown.robot
@ -23,7 +22,7 @@ IR GAS emission threshold value
[Setup] Setup [Setup] Setup
${WALLET} ${ADDR} ${_} = Init Wallet with Address ${ASSETS_DIR} ${WALLET} ${ADDR} ${_} = Generate Wallet
${SC_BALANCE} = Get Sidechain Balance ${ADDR} ${SC_BALANCE} = Get Sidechain Balance ${ADDR}
Transfer Mainnet Gas ${WALLET} ${DEPOSIT} Transfer Mainnet Gas ${WALLET} ${DEPOSIT}

View file

@ -3,8 +3,7 @@ Variables common.py
Library neofs.py Library neofs.py
Library payment_neogo.py Library payment_neogo.py
Library wallet_keywords.py Library utility_keywords.py
Library rpc_call_keywords.py
Resource setup_teardown.robot Resource setup_teardown.robot
@ -20,7 +19,7 @@ NeoFS Deposit and Withdraw
[Setup] Setup [Setup] Setup
${WALLET} ${ADDR} ${_} = Init Wallet with Address ${ASSETS_DIR} ${WALLET} ${ADDR} ${_} = Generate Wallet
########################################################## ##########################################################
# Transferring GAS from initial wallet to our test wallet # Transferring GAS from initial wallet to our test wallet

View file

@ -7,7 +7,7 @@ Library OperatingSystem
Library neofs.py Library neofs.py
Library container.py Library container.py
Library s3_gate.py Library s3_gate.py
Library contract_keywords.py Library epoch.py
Library utility_keywords.py Library utility_keywords.py
Resource setup_teardown.robot Resource setup_teardown.robot

View file

@ -7,7 +7,6 @@ Library OperatingSystem
Library container.py Library container.py
Library neofs.py Library neofs.py
Library s3_gate.py Library s3_gate.py
Library contract_keywords.py
Library utility_keywords.py Library utility_keywords.py
Resource payment_operations.robot Resource payment_operations.robot