Testcases to cover S3 in the smoke test and updates in accordance with NeoFS 0.13.0 have been updated (#5)

* Coverage of the S3 gateway and "S3-gate - NeoFS - HTTP-gate" interaction has been added to the Selectel smoke test.
This commit is contained in:
anatoly-bogatyrev 2020-12-16 14:19:24 +03:00 committed by GitHub
parent a20ec58614
commit bb3c2bd208
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 259 additions and 162 deletions

View file

@ -1,96 +1,98 @@
## Запуск тесткейсов ## Testcases execution
### Первичная подготовка ### Initial preparation
1. Установить neofs-cli 1. Install neofs-cli
- `git clone git@github.com:nspcc-dev/neofs-node.git` - `git clone git@github.com:nspcc-dev/neofs-node.git`
- `cd neofs-node` - `cd neofs-node`
- `make` - `make`
- `sudo cp bin/neofs-cli /usr/local/bin/neofs-cli` or add alias path to bin/neofs-cli - `sudo cp bin/neofs-cli /usr/local/bin/neofs-cli` or add alias path to bin/neofs-cli
2. Установить cdn-authmate 2. Install cdn-authmate
- `git clone git@github.com:nspcc-dev/cdn-authmate.git` - `git clone git@github.com:nspcc-dev/cdn-authmate.git`
- `cd cdn-authmate` - `cd cdn-authmate`
- `make build` - `make build`
- `sudo cp bin/cdn-authmate /usr/local/bin/cdn-authmate` or add alias path to bin/cdn-authmate - `sudo cp bin/cdn-authmate /usr/local/bin/cdn-authmate` or add alias path to bin/cdn-authmate
3. Устаносить зависимости для Testcases 3. Install Testcases dependencies
- `pip3 install robotframework` - `pip3 install robotframework`
- `pip3 install pexpect` - `pip3 install pexpect`
- `pip3 install requests` - `pip3 install requests`
- `pip3 install boto3` - `pip3 install boto3`
- `pip3 install docker`
(pip3 заменить на соответсвующий менеджер пакетов python в системе). (replace pip3 with the appropriate python package manager on the system).
При этом должен быть запущен dev-env с тестируемым окружением. In this case, dev-env should be running with the tested environment.
### Запуск тесткейсов ### Run
1. Выполнить `make run` 1. Execute the command `make run`
2. Логи будут доступны в папке artifacts/ после завершения тестов с любым из статусов. 2. Logs will be available in the artifacts/ directory after tests with any of the statuses are completed.
### Запуск произвольного тесткейса ### Running an arbitrary test case
Для запуска произвольного тесткейса нужно выполнить команду: To run an arbitrary testcase, you need to run the command:
`robot --timestampoutputs --outputdir artifacts/ robot/testsuites/integration/<testsuite name>.robot ` `robot --timestampoutputs --outputdir artifacts/ robot/testsuites/integration/<testsuite name>.robot `
Для запуска доступны следущие сценарии: The following scripts are available for execution:
* acl_basic.robot - базовый ACL * acl_basic.robot
* acl_extended.robot - extended ACL * acl_extended.robot
* acl_baearer.robot - Bearer Token ACL * acl_baearer.robot
* object_complex.robot - операции над простым объектом * object_complex.robot
* object_simple.robot - операции над большим объектом * object_simple.robot
* withdraw.robot - оперция Deposit и Withdraw с счета NeoFS * withdraw.robot
* netmap_simple.robot - проверка Placement policy * netmap_simple.robot
* replication.robot - базовый тесткейс проверки репликации объектов * replication.robot
* http_gate.robot - проверка HTTP-gate и интеграции с NeoFS * http_gate.robot
* s3_gate.robot - проверка S3-gate и интеграции с NeoFS * s3_gate.robot
## Запуск smoke-тестов ## Smoke test execution
Есть сьют со smoke-тестами для CDN-гейтов `robot/testsuites/smoke/selectelcdn_smoke.robot`. There is a suite with smoke tests for CDN gates `robot/testsuites/smoke/selectelcdn_smoke.robot`.
По умолчанию кейворды используют переменные из файла `robot/resources/lib/neofs_int_vars.py`. By default, keywords use variables from a file `robot/resources/lib/neofs_int_vars.py`.
``` ```
robot --outputdir artifacts/ robot/testsuites/smoke/selectelcdn_smoke.robot robot --outputdir artifacts/ robot/testsuites/smoke/selectelcdn_smoke.robot
``` ```
### Первичная подготовка ### Initial preparation
1. Ему требуются отдельные переменные, в отличие от сьютов NeoFS, которые запускаются на 1. It requires separate variables, unlike the NeoFS suites, which run on
девэнве. Чтобы библиотеки кейвордов их использовали, нужно установить переменную dev-env. In order for the keyword libraries to use them, you need to set the environment variable
окружения
``` ```
export ROBOT_PROFILE=selectel_smoke export ROBOT_PROFILE=selectel_smoke
``` ```
Dev-env не нужен. Но нужно установить neo-go. Dev-env is not needed. But you need to install neo-go.
2. Установить neo-go 2. Install neo-go
- `git clone git@github.com:nspcc-dev/neo-go.git` - `git clone git@github.com:nspcc-dev/neo-go.git`
- `cd neo-go` - `cd neo-go`
- `make` - `make`
- `sudo cp bin/neo-go /usr/local/bin/neo-go` or add alias path to bin/neo-go - `sudo cp bin/neo-go /usr/local/bin/neo-go` or add alias path to bin/neo-go
3. To run smoke test: `robot --timestampoutputs --outputdir artifacts/ robot/testsuites/smoke/selectelcdn_smoke.robot`
## Генерация документации
Для генерации документации по шагам: ## Generation of documentation
To generate Keywords documentation:
``` ```
python3 -m robot.libdoc robot/resources/lib/neofs.py docs/NeoFS_Library.html python3 -m robot.libdoc robot/resources/lib/neofs.py docs/NeoFS_Library.html
python3 -m robot.libdoc robot/resources/lib/payment_neogo.py docs/Payment_Library.html python3 -m robot.libdoc robot/resources/lib/payment_neogo.py docs/Payment_Library.html
``` ```
Для генерации документации по тесткейсам: To generate testcases documentation:
``` ```
python3 -m robot.testdoc robot/testsuites/integration/ docs/testcases.html python3 -m robot.testdoc robot/testsuites/integration/ docs/testcases.html
``` ```
## Создание тесткейсов ## Testcases implementation
### Source code overview ### Source code overview
@ -102,11 +104,11 @@ python3 -m robot.testdoc robot/testsuites/integration/ docs/testcases.html
`robot/variables/` - All variables for tests. It is possible to add the auto-loading logic of parameters from the smart-contract in the future. Contain python files. `robot/variables/` - All variables for tests. It is possible to add the auto-loading logic of parameters from the smart-contract in the future. Contain python files.
`robot/testsuites/` - Robot Test Suites and Test Cases. `robot/testsuites/` - Robot TestSuites and TestCases.
`robot/testsuites/integration/` - Integration test suites and test cases `robot/testsuites/integration/` - Integration test suites and testcases
`robot/testsuites/fi/` - Fault Injection test suites and test cases `robot/testsuites/fi/` - Fault Injection testsuites and testcases
### Code style ### Code style
@ -129,7 +131,7 @@ On keywords definition, one should specify variable type, e.g. path: str
### Robot style ### Robot style
Следует всегда заполнять секции [Tags] и [Documentation] для Testcase'ов и Documentation для Test Suite'ов. You should always complete the [Tags] and [Documentation] sections for Testcases and Documentation for Test Suites.
### Robot-framework User Guide ### Robot-framework User Guide

View file

@ -0,0 +1 @@
=b­•|vn¾b®%ü“ÐþaåÙÍ-ie×ðŒ=

View file

@ -33,7 +33,7 @@ def init_s3_credentials(private_key: str, s3_key):
logger.info("Cmd: %s" % Cmd) logger.info("Cmd: %s" % Cmd)
try: try:
complProc = subprocess.run(Cmd, check=True, universal_newlines=True, complProc = subprocess.run(Cmd, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=150, shell=True) stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=360, shell=True)
output = complProc.stdout output = complProc.stdout
logger.info("Output: %s" % output) logger.info("Output: %s" % output)

View file

@ -9,13 +9,16 @@ import hashlib
from robot.api.deco import keyword from robot.api.deco import keyword
from robot.api import logger from robot.api import logger
import random import random
import base64
import base58
import docker
if os.getenv('ROBOT_PROFILE') == 'selectel_smoke': if os.getenv('ROBOT_PROFILE') == 'selectel_smoke':
from selectelcdn_smoke_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT, from selectelcdn_smoke_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT,
NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT) NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT, NEOFS_NETMAP)
else: else:
from neofs_int_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT, from neofs_int_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT,
NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT) NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT, NEOFS_NETMAP)
ROBOT_AUTO_KEYWORDS = False ROBOT_AUTO_KEYWORDS = False
@ -64,22 +67,13 @@ def stop_nodes(down_num: int, *nodes_list):
# select nodes to stop from list # select nodes to stop from list
stop_nodes = random.sample(nodes_list, down_num) stop_nodes = random.sample(nodes_list, down_num)
for node in stop_nodes: for node in stop_nodes:
m = re.search(r'(s\d+).', node) m = re.search(r'(s\d+).', node)
node = m.group(1) node = m.group(1)
Cmd = f'docker stop {node}' client = docker.APIClient()
logger.info("Cmd: %s" % Cmd) client.stop(node)
try:
complProc = subprocess.run(Cmd, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=150, shell=True)
output = complProc.stdout
logger.info("Output: %s" % output)
except subprocess.CalledProcessError as e:
raise Exception("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
return stop_nodes return stop_nodes
@ -90,20 +84,9 @@ def start_nodes(*nodes_list):
for node in nodes_list: for node in nodes_list:
m = re.search(r'(s\d+).', node) m = re.search(r'(s\d+).', node)
node = m.group(1) node = m.group(1)
client = docker.APIClient()
Cmd = f'docker start {node}' client.start(node)
logger.info("Cmd: %s" % Cmd)
try:
complProc = subprocess.run(Cmd, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=150, shell=True)
output = complProc.stdout
logger.info("Output: %s" % output)
except subprocess.CalledProcessError as e:
raise Exception("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
@keyword('Get nodes with object') @keyword('Get nodes with object')
def get_nodes_with_object(private_key: str, cid: str, oid: str): def get_nodes_with_object(private_key: str, cid: str, oid: str):
storage_nodes = _get_storage_nodes(private_key) storage_nodes = _get_storage_nodes(private_key)
@ -205,6 +188,10 @@ def form_bearertoken_file_for_all_ops(file_name: str, private_key: str, cid: str
eacl = get_eacl(private_key, cid) eacl = get_eacl(private_key, cid)
input_records = "" input_records = ""
cid_base58_b = base58.b58decode(cid)
cid_base64 = base64.b64encode(cid_base58_b).decode("utf-8")
if eacl: if eacl:
res_json = re.split(r'[\s\n]+\][\s\n]+\}[\s\n]+Signature:', eacl) res_json = re.split(r'[\s\n]+\][\s\n]+\}[\s\n]+Signature:', eacl)
records = re.split(r'"records": \[', res_json[0]) records = re.split(r'"records": \[', res_json[0])
@ -215,7 +202,7 @@ def form_bearertoken_file_for_all_ops(file_name: str, private_key: str, cid: str
"body": { "body": {
"eaclTable": { "eaclTable": {
"containerID": { "containerID": {
"value": \"""" + cid + """" "value": \"""" + str(cid_base64) + """"
}, },
"records": [ "records": [
{ {
@ -317,6 +304,10 @@ def form_bearertoken_file_filter_for_all_ops(file_name: str, private_key: str, c
# SEARCH should be allowed without filters to use GET, HEAD, DELETE, and SEARCH? Need to clarify. # SEARCH should be allowed without filters to use GET, HEAD, DELETE, and SEARCH? Need to clarify.
eacl = get_eacl(private_key, cid) eacl = get_eacl(private_key, cid)
cid_base58_b = base58.b58decode(cid)
cid_base64 = base64.b64encode(cid_base58_b).decode("utf-8")
input_records = "" input_records = ""
if eacl: if eacl:
res_json = re.split(r'[\s\n]+\][\s\n]+\}[\s\n]+Signature:', eacl) res_json = re.split(r'[\s\n]+\][\s\n]+\}[\s\n]+Signature:', eacl)
@ -328,7 +319,7 @@ def form_bearertoken_file_filter_for_all_ops(file_name: str, private_key: str, c
"body": { "body": {
"eaclTable": { "eaclTable": {
"containerID": { "containerID": {
"value": \"""" + cid + """" "value": \"""" + str(cid_base64) + """"
}, },
"records": [ "records": [
{ {
@ -535,7 +526,7 @@ def create_container(private_key: str, basic_acl:str="", rule:str="REP 2 IN X CB
createContainerCmd = f'neofs-cli --rpc-endpoint {NEOFS_ENDPOINT} --key {private_key} container create --policy "{rule}" {basic_acl} --await' createContainerCmd = f'neofs-cli --rpc-endpoint {NEOFS_ENDPOINT} --key {private_key} container create --policy "{rule}" {basic_acl} --await'
logger.info("Cmd: %s" % createContainerCmd) logger.info("Cmd: %s" % createContainerCmd)
complProc = subprocess.run(createContainerCmd, check=True, universal_newlines=True, complProc = subprocess.run(createContainerCmd, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=150, shell=True) stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=300, shell=True)
output = complProc.stdout output = complProc.stdout
logger.info("Output: %s" % output) logger.info("Output: %s" % output)
cid = _parse_cid(output) cid = _parse_cid(output)
@ -816,9 +807,10 @@ def delete_object(private_key: str, cid: str, oid: str, bearer: str):
bearer_token = f"--bearer {bearer}" bearer_token = f"--bearer {bearer}"
ObjectCmd = f'neofs-cli --rpc-endpoint {NEOFS_ENDPOINT} --key {private_key} object delete --cid {cid} --oid {oid} {bearer_token}' ObjectCmd = f'neofs-cli --rpc-endpoint {NEOFS_ENDPOINT} --key {private_key} object delete --cid {cid} --oid {oid} {bearer_token}'
logger.info("Cmd: %s" % ObjectCmd)
try: try:
complProc = subprocess.run(ObjectCmd, check=True, universal_newlines=True, complProc = subprocess.run(ObjectCmd, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=15, shell=True) stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=30, shell=True)
logger.info("Output: %s" % complProc.stdout) logger.info("Output: %s" % complProc.stdout)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
raise Exception("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output)) raise Exception("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
@ -995,7 +987,7 @@ def _parse_cid(output: str):
return cid return cid
def _get_storage_nodes(private_key: bytes): def _get_storage_nodes(private_key: bytes):
storage_nodes = ['s01.neofs.devenv:8080', 's02.neofs.devenv:8080','s03.neofs.devenv:8080','s04.neofs.devenv:8080'] #storage_nodes = ['s01.neofs.devenv:8080', 's02.neofs.devenv:8080','s03.neofs.devenv:8080','s04.neofs.devenv:8080']
#NetmapCmd = f'{CLI_PREFIX}neofs-cli --host {NEOFS_ENDPOINT} --key {binascii.hexlify(private_key).decode()} status netmap' #NetmapCmd = f'{CLI_PREFIX}neofs-cli --host {NEOFS_ENDPOINT} --key {binascii.hexlify(private_key).decode()} status netmap'
#complProc = subprocess.run(NetmapCmd, check=True, universal_newlines=True, #complProc = subprocess.run(NetmapCmd, check=True, universal_newlines=True,
# stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=15, shell=True) # stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=15, shell=True)
@ -1011,8 +1003,8 @@ def _get_storage_nodes(private_key: bytes):
# Will be fixed when netmap will be added to cli # Will be fixed when netmap will be added to cli
#storage_nodes.append() #storage_nodes.append()
logger.info("Storage nodes: %s" % storage_nodes) logger.info("Storage nodes: %s" % NEOFS_NETMAP)
return storage_nodes return NEOFS_NETMAP
def _search_object(node:str, private_key: str, cid:str, oid: str): def _search_object(node:str, private_key: str, cid:str, oid: str):

View file

@ -8,3 +8,5 @@ NEO_MAINNET_ENDPOINT = "main_chain.neofs.devenv:30333"
NEOFS_NEO_API_ENDPOINT = 'http://main_chain.neofs.devenv:30333' NEOFS_NEO_API_ENDPOINT = 'http://main_chain.neofs.devenv:30333'
HTTP_GATE = 'http://http.neofs.devenv' HTTP_GATE = 'http://http.neofs.devenv'
S3_GATE = 'https://s3.neofs.devenv:8080' S3_GATE = 'https://s3.neofs.devenv:8080'
NEOFS_CONTRACT = "5f490fbd8010fd716754073ee960067d28549b7d"
NEOFS_NETMAP = ['s01.neofs.devenv:8080', 's02.neofs.devenv:8080','s03.neofs.devenv:8080','s04.neofs.devenv:8080']

View file

@ -15,6 +15,7 @@ import robot.errors
from robot.libraries.BuiltIn import BuiltIn from robot.libraries.BuiltIn import BuiltIn
ROBOT_AUTO_KEYWORDS = False ROBOT_AUTO_KEYWORDS = False
NEOFS_CONTRACT = "5f490fbd8010fd716754073ee960067d28549b7d"
if os.getenv('ROBOT_PROFILE') == 'selectel_smoke': if os.getenv('ROBOT_PROFILE') == 'selectel_smoke':
from selectelcdn_smoke_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT, from selectelcdn_smoke_vars import (NEOGO_CLI_PREFIX, NEO_MAINNET_ENDPOINT,
@ -24,8 +25,6 @@ else:
NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT) NEOFS_NEO_API_ENDPOINT, NEOFS_ENDPOINT)
NEOFS_CONTRACT = "5f490fbd8010fd716754073ee960067d28549b7d"
@keyword('Init wallet') @keyword('Init wallet')
def init_wallet(): def init_wallet():
@ -98,12 +97,12 @@ def dump_privkey(wallet: str, address: str):
return out return out
@keyword('Transfer Mainnet Gas') @keyword('Transfer Mainnet Gas')
def transfer_mainnet_gas(wallet: str, address: str, address_to: str, amount: int): def transfer_mainnet_gas(wallet: str, address: str, address_to: str, amount: int, wallet_pass:str=''):
cmd = ( f"{NEOGO_CLI_PREFIX} wallet nep5 transfer -w {wallet} -r http://main_chain.neofs.devenv:30333 --from {address} " cmd = ( f"{NEOGO_CLI_PREFIX} wallet nep5 transfer -w {wallet} -r {NEOFS_NEO_API_ENDPOINT} --from {address} "
f"--to {address_to} --token gas --amount {amount}" ) f"--to {address_to} --token gas --amount {amount}" )
logger.info(f"Executing command: {cmd}") logger.info(f"Executing command: {cmd}")
out = _run_sh_with_passwd('', cmd) out = _run_sh_with_passwd(wallet_pass, cmd)
logger.info(f"Command completed with output: {out}") logger.info(f"Command completed with output: {out}")
if not re.match(r'^(\w{64})$', out): if not re.match(r'^(\w{64})$', out):
@ -113,7 +112,7 @@ def transfer_mainnet_gas(wallet: str, address: str, address_to: str, amount: int
@keyword('Withdraw Mainnet Gas') @keyword('Withdraw Mainnet Gas')
def withdraw_mainnet_gas(wallet: str, address: str, scripthash: str, amount: int): def withdraw_mainnet_gas(wallet: str, address: str, scripthash: str, amount: int):
cmd = ( f"{NEOGO_CLI_PREFIX} contract invokefunction -w {wallet} -a {address} -r http://main_chain.neofs.devenv:30333 " cmd = ( f"{NEOGO_CLI_PREFIX} contract invokefunction -w {wallet} -a {address} -r {NEOFS_NEO_API_ENDPOINT} "
f"{NEOFS_CONTRACT} withdraw {scripthash} int:{amount} -- {scripthash}" ) f"{NEOFS_CONTRACT} withdraw {scripthash} int:{amount} -- {scripthash}" )
logger.info(f"Executing command: {cmd}") logger.info(f"Executing command: {cmd}")

View file

@ -7,4 +7,6 @@ NEO_MAINNET_ENDPOINT = "http://92.53.71.51:20332"
# selectel main chain on lobachevsky-1 # selectel main chain on lobachevsky-1
NEOFS_NEO_API_ENDPOINT = "http://92.53.71.51:20332" NEOFS_NEO_API_ENDPOINT = "http://92.53.71.51:20332"
HTTP_GATE = 'http://92.53.71.51:38080' HTTP_GATE = 'http://92.53.71.51:38080'
S3_GATE = 'https://92.53.71.51:28080' S3_GATE = 'https://92.53.71.51:28080'
NEOFS_CONTRACT = "5f490fbd8010fd716754073ee960067d28549b7d"
NEOFS_NETMAP = ['92.53.71.51:18080', '92.53.71.52:18080','92.53.71.53:18080','92.53.71.54:18080', '92.53.71.55:18080']

View file

@ -19,15 +19,25 @@ BearerToken Operations
[Timeout] 20 min [Timeout] 20 min
Generate Keys Generate Keys
Generate file
Prepare eACL Role rules Prepare eACL Role rules
Log Check Bearer token with simple object
Generate file 1024
Check Container Inaccessible and Allow All Bearer Check Container Inaccessible and Allow All Bearer
Check eACL Deny and Allow All Bearer Check eACL Deny and Allow All Bearer
Check eACL Deny and Allow All Bearer Filter OID Equal Check eACL Deny and Allow All Bearer Filter OID Equal
Check eACL Deny and Allow All Bearer Filter OID NotEqual Check eACL Deny and Allow All Bearer Filter OID NotEqual
Check eACL Deny and Allow All Bearer Filter UserHeader Equal
Log Check Bearer token with complex object
Cleanup Files ${FILE_S}
Generate file 20e+6
Check Container Inaccessible and Allow All Bearer
Check eACL Deny and Allow All Bearer
Check eACL Deny and Allow All Bearer Filter OID Equal
Check eACL Deny and Allow All Bearer Filter OID NotEqual
Check eACL Deny and Allow All Bearer Filter UserHeader Equal Check eACL Deny and Allow All Bearer Filter UserHeader Equal
[Teardown] Cleanup [Teardown] Cleanup
@ -82,22 +92,23 @@ Payment Operations
Create Container Public Create Container Public
Log Create Public Container Log Create Public Container
${PUBLIC_CID_GEN} = Create container ${USER_KEY} 0x0FFFFFFF ${PUBLIC_CID_GEN} = Create container ${USER_KEY} 0x0FFFFFFF
[Return] ${PUBLIC_CID_GEN} [Return] ${PUBLIC_CID_GEN}
Create Container Inaccessible Create Container Inaccessible
Log Create Inaccessible Container Log Create Inaccessible Container
${PUBLIC_CID_GEN} = Create container ${USER_KEY} 0x40000000 ${PUBLIC_CID_GEN} = Create container ${USER_KEY} 0x40000000
[Return] ${PUBLIC_CID_GEN} [Return] ${PUBLIC_CID_GEN}
Generate file Generate file
# Generate small file [Arguments] ${SIZE}
${FILE_S_GEN} = Generate file of bytes 1024
Set Global Variable ${FILE_S} ${FILE_S_GEN} ${FILE_S_GEN} = Generate file of bytes ${SIZE}
Set Global Variable ${FILE_S} ${FILE_S_GEN}
Prepare eACL Role rules Prepare eACL Role rules
@ -215,14 +226,13 @@ Check eACL Deny and Allow All Bearer Filter OID Equal
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user local_file_eacl ... Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user local_file_eacl
# Preiodical issue: https://github.com/nspcc-dev/neofs-node/issues/225
Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user local_file_eacl Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user local_file_eacl
Get Range ${USER_KEY} ${CID} ${S_OID_USER} s_get_range bearer_allow_all_user 0:256 Get Range ${USER_KEY} ${CID} ${S_OID_USER} s_get_range bearer_allow_all_user 0:256
# https://github.com/nspcc-dev/neofs-node/issues/215 Head object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user
# Head object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user Delete object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user
# Delete object ${USER_KEY} ${CID} ${D_OID_USER} bearer_allow_all_user Run Keyword And Expect Error *
... Delete object ${USER_KEY} ${CID} ${D_OID_USER} bearer_allow_all_user
@ -275,10 +285,10 @@ Check eACL Deny and Allow All Bearer Filter OID NotEqual
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Head object ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user ... Head object ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user
# https://github.com/nspcc-dev/neofs-node/issues/215 Delete object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user
# Delete object ${USER_KEY} ${CID} ${D_OID_USER} bearer_allow_all_user
# Run Keyword And Expect Error * Run Keyword And Expect Error *
# ... Delete object ${USER_KEY} ${CID} ${D_OID_USER_2} bearer_allow_all_user ... Delete object ${USER_KEY} ${CID} ${D_OID_USER_2} bearer_allow_all_user
@ -319,21 +329,27 @@ Check eACL Deny and Allow All Bearer Filter UserHeader Equal
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Put object to NeoFS ${USER_KEY} ${FILE_S} ${CID} bearer_allow_all_user ${FILE_OTH_HEADER} ... Put object to NeoFS ${USER_KEY} ${FILE_S} ${CID} bearer_allow_all_user ${FILE_OTH_HEADER}
Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user local_file_eacl
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user local_file_eacl ... Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user local_file_eacl
# Preiodical issue: https://github.com/nspcc-dev/neofs-node/issues/225 Run Keyword And Expect Error *
Get object from NeoFS ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user local_file_eacl ... Get Range ${USER_KEY} ${CID} ${S_OID_USER} s_get_range bearer_allow_all_user 0:256
Get Range ${USER_KEY} ${CID} ${S_OID_USER} s_get_range bearer_allow_all_user 0:256
# https://github.com/nspcc-dev/neofs-node/issues/215 Run Keyword And Expect Error *
# Head object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user ... Get Range Hash ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user 0:256
# Delete object ${USER_KEY} ${CID} ${D_OID_USER} bearer_allow_all_user
Head object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user
Run Keyword And Expect Error *
... Head object ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user
Delete object ${USER_KEY} ${CID} ${S_OID_USER} bearer_allow_all_user
Run Keyword And Expect Error *
... Delete object ${USER_KEY} ${CID} ${S_OID_USER_2} bearer_allow_all_user
# Check eACL Deny and Allow All Bearer Filter UserHeader NotEqual # Check eACL Deny and Allow All Bearer Filter UserHeader NotEqual
# Check eACL Deny and Allow All Bearer for big object
# Check eACL Deny and Allow All Bearer Filter UserHeader Equal for big object
Cleanup Cleanup

View file

@ -17,9 +17,17 @@ Extended ACL Operations
[Timeout] 20 min [Timeout] 20 min
Generate Keys Generate Keys
Generate file
Prepare eACL Role rules Prepare eACL Role rules
Log Check extended ACL with simple object
Generate files 1024
Check Actions
Check Filters
Cleanup Files ${FILE_S} ${FILE_S_2}
Log Check extended ACL with complex object
Generate files 20e+6
Check Actions Check Actions
Check Filters Check Filters
@ -151,9 +159,10 @@ Create Container Public
[Return] ${PUBLIC_CID_GEN} [Return] ${PUBLIC_CID_GEN}
Generate file Generate files
${FILE_S_GEN_1} = Generate file of bytes 1024 [Arguments] ${SIZE}
${FILE_S_GEN_2} = Generate file of bytes 2048 ${FILE_S_GEN_1} = Generate file of bytes ${SIZE}
${FILE_S_GEN_2} = Generate file of bytes ${SIZE}
Set Global Variable ${FILE_S} ${FILE_S_GEN_1} Set Global Variable ${FILE_S} ${FILE_S_GEN_1}
Set Global Variable ${FILE_S_2} ${FILE_S_GEN_2} Set Global Variable ${FILE_S_2} ${FILE_S_GEN_2}
@ -205,6 +214,9 @@ Check eACL Deny and Allow All System
Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Get Range Hash ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${SYSTEM_KEY} ${CID} ${D_OID_USER_S} ${EMPTY} Delete object ${SYSTEM_KEY} ${CID} ${D_OID_USER_S} ${EMPTY}
Delete object ${SYSTEM_KEY_SN} ${CID} ${D_OID_USER_SN} ${EMPTY} Delete object ${SYSTEM_KEY_SN} ${CID} ${D_OID_USER_SN} ${EMPTY}
@ -231,15 +243,22 @@ Check eACL Deny and Allow All System
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Head object ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY} ... Head object ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Head object ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} ${EMPTY} ... Head object ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} ${EMPTY}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 ... Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 ... Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Run Keyword And Expect Error *
... Get Range Hash ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Run Keyword And Expect Error *
... Get Range Hash ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Delete object ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY} ... Delete object ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY}
Run Keyword And Expect Error * Run Keyword And Expect Error *
@ -268,8 +287,11 @@ Check eACL Deny and Allow All System
Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${SYSTEM_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${SYSTEM_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Get Range Hash ${SYSTEM_KEY_SN} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${SYSTEM_KEY} ${CID} ${D_OID_USER_S} ${EMPTY} Delete object ${SYSTEM_KEY} ${CID} ${D_OID_USER_S} ${EMPTY}
Delete object ${SYSTEM_KEY_SN} ${CID} ${D_OID_USER_SN} ${EMPTY} Delete object ${SYSTEM_KEY_SN} ${CID} ${D_OID_USER_SN} ${EMPTY}
@ -285,6 +307,7 @@ Check eACL Deny All Other and Allow All Pubkey
Search object ${EACL_KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H} Search object ${EACL_KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H}
Head object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY} Head object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY}
Get Range ${EACL_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${EACL_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${EACL_KEY} ${CID} ${D_OID_USER} ${EMPTY} Delete object ${EACL_KEY} ${CID} ${D_OID_USER} ${EMPTY}
Set eACL ${USER_KEY} ${CID} ${EACL_ALLOW_ALL_Pubkey} --await Set eACL ${USER_KEY} ${CID} ${EACL_ALLOW_ALL_Pubkey} --await
@ -301,6 +324,8 @@ Check eACL Deny All Other and Allow All Pubkey
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range ${OTHER_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 ... Get Range ${OTHER_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range Hash ${OTHER_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Run Keyword And Expect Error *
... Delete object ${OTHER_KEY} ${CID} ${S_OID_USER} ${EMPTY} ... Delete object ${OTHER_KEY} ${CID} ${S_OID_USER} ${EMPTY}
Put object to NeoFS ${EACL_KEY} ${FILE_S} ${CID} ${EMPTY} ${FILE_OTH_HEADER} Put object to NeoFS ${EACL_KEY} ${FILE_S} ${CID} ${EMPTY} ${FILE_OTH_HEADER}
@ -308,6 +333,7 @@ Check eACL Deny All Other and Allow All Pubkey
Search object ${EACL_KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H} Search object ${EACL_KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H}
Head object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY} Head object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY}
Get Range ${EACL_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${EACL_KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY} Delete object ${EACL_KEY} ${CID} ${S_OID_USER} ${EMPTY}
@ -325,8 +351,8 @@ Check eACL Deny and Allow All
Search object ${KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H} Search object ${KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H}
Head object ${KEY} ${CID} ${S_OID_USER} ${EMPTY} Head object ${KEY} ${CID} ${S_OID_USER} ${EMPTY}
Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${KEY} ${CID} ${D_OID_USER} ${EMPTY} Delete object ${KEY} ${CID} ${D_OID_USER} ${EMPTY}
Set eACL ${USER_KEY} ${CID} ${DENY_EACL} Set eACL ${USER_KEY} ${CID} ${DENY_EACL}
@ -343,18 +369,19 @@ Check eACL Deny and Allow All
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 ... Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get Range Hash ${KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Run Keyword And Expect Error *
... Delete object ${KEY} ${CID} ${S_OID_USER} ${EMPTY} ... Delete object ${KEY} ${CID} ${S_OID_USER} ${EMPTY}
Set eACL ${USER_KEY} ${CID} ${ALLOW_EACL} Set eACL ${USER_KEY} ${CID} ${ALLOW_EACL}
Sleep ${MORPH_BLOCK_TIMEOUT} Sleep ${MORPH_BLOCK_TIMEOUT}
Put object to NeoFS ${KEY} ${FILE_S} ${CID} ${EMPTY} ${FILE_OTH_HEADER} Put object to NeoFS ${KEY} ${FILE_S} ${CID} ${EMPTY} ${FILE_OTH_HEADER}
Get object from NeoFS ${KEY} ${CID} ${S_OID_USER} ${EMPTY} local_file_eacl Get object from NeoFS ${KEY} ${CID} ${S_OID_USER} ${EMPTY} local_file_eacl
Search object ${KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H} Search object ${KEY} ${CID} ${EMPTY} ${EMPTY} ${FILE_USR_HEADER} @{S_OBJ_H}
Head object ${KEY} ${CID} ${S_OID_USER} ${EMPTY} Head object ${KEY} ${CID} ${S_OID_USER} ${EMPTY}
Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256 Get Range ${KEY} ${CID} ${S_OID_USER} s_get_range ${EMPTY} 0:256
Get Range Hash ${KEY} ${CID} ${S_OID_USER} ${EMPTY} 0:256
Delete object ${KEY} ${CID} ${S_OID_USER} ${EMPTY} Delete object ${KEY} ${CID} ${S_OID_USER} ${EMPTY}
Cleanup Cleanup

View file

@ -27,9 +27,6 @@ NeoFS Object Replication
Wait Until Keyword Succeeds 1 min 15 sec Wait Until Keyword Succeeds 1 min 15 sec
... Transaction accepted in block ${TX_DEPOSIT} ... Transaction accepted in block ${TX_DEPOSIT}
Get Transaction ${TX_DEPOSIT} Get Transaction ${TX_DEPOSIT}
Sleep 1 min
${CID} = Create container ${PRIV_KEY} ${EMPTY} REP 2 IN X CBF 1 SELECT 4 FROM * AS X ${CID} = Create container ${PRIV_KEY} ${EMPTY} REP 2 IN X CBF 1 SELECT 4 FROM * AS X
Container Existing ${PRIV_KEY} ${CID} Container Existing ${PRIV_KEY} ${CID}
@ -40,12 +37,23 @@ NeoFS Object Replication
${S_OID} = Put object to NeoFS ${PRIV_KEY} ${FILE} ${CID} ${EMPTY} ${EMPTY} ${S_OID} = Put object to NeoFS ${PRIV_KEY} ${FILE} ${CID} ${EMPTY} ${EMPTY}
Validate storage policy for object ${PRIV_KEY} 2 ${CID} ${S_OID} Validate storage policy for object ${PRIV_KEY} 2 ${CID} ${S_OID}
@{NODES_OBJ} = Get nodes with object ${PRIV_KEY} ${CID} ${S_OID} @{NODES_OBJ} = Get nodes with object ${PRIV_KEY} ${CID} ${S_OID}
@{NODES_OBJ_STOPPED} = Stop nodes 1 @{NODES_OBJ} @{NODES_OBJ_STOPPED} = Stop nodes 1 @{NODES_OBJ}
Sleep 1 min Sleep 1 min
Validate storage policy for object ${PRIV_KEY} 2 ${CID} ${S_OID} Validate storage policy for object ${PRIV_KEY} 2 ${CID} ${S_OID}
Start nodes @{NODES_OBJ_STOPPED} Start nodes @{NODES_OBJ_STOPPED}
[Teardown] Cleanup Files ${FILE} [Teardown] Cleanup ${FILE} @{NODES_OBJ_STOPPED}
*** Keywords ***
Cleanup
[Arguments] ${FILE} @{NODES_OBJ_STOPPED}
Start nodes @{NODES_OBJ_STOPPED}
Cleanup Files ${FILE}

View file

@ -25,11 +25,11 @@ NeoFS S3 Gateway
... Transaction accepted in block ${TX_DEPOSIT} ... Transaction accepted in block ${TX_DEPOSIT}
Get Transaction ${TX_DEPOSIT} Get Transaction ${TX_DEPOSIT}
${FILE_S3} = Generate file of bytes 256 ${FILE_S3} = Generate file of bytes 20e+6
${FILE_S3_HASH} = Get file hash ${FILE_S3} ${FILE_S3_HASH} = Get file hash ${FILE_S3}
${FILE_S3_NAME} = Get file name ${FILE_S3} ${FILE_S3_NAME} = Get file name ${FILE_S3}
${FILE_FS} = Generate file of bytes 256 ${FILE_FS} = Generate file of bytes 20e+6
${FILE_FS_HASH} = Get file hash ${FILE_FS} ${FILE_FS_HASH} = Get file hash ${FILE_FS}
${FILE_FS_NAME} = Get file name ${FILE_FS} ${FILE_FS_NAME} = Get file name ${FILE_FS}
@ -86,5 +86,5 @@ NeoFS S3 Gateway
List Should Not Contain Value ${LIST_S3_OBJECTS} FILE_S3_NAME List Should Not Contain Value ${LIST_S3_OBJECTS} FILE_S3_NAME
[Teardown] Cleanup Files s3_obj_get_fs fs_obj_get_fs s3_obj_get_s3 fs_obj_get_s3 [Teardown] Cleanup Files s3_obj_get_fs fs_obj_get_fs s3_obj_get_s3 fs_obj_get_s3
... ${FILE_S3} ${FILE_FS} hcs.pub.key ... ${FILE_S3} ${FILE_FS}

View file

@ -1,33 +1,93 @@
# -*- coding: robot -*- # -*- coding: robot -*-
*** Settings *** *** Settings ***
Variables ../../variables/common.py Variables ../../variables/common.py
Variables ../../variables/selectelcdn_smoke.py
Library ${RESOURCES}/neofs.py Library Collections
Library ${RESOURCES}/payment_neogo.py Library ${RESOURCES}/neofs.py
Library ${RESOURCES}/gates.py Library ${RESOURCES}/payment_neogo.py
Library ${RESOURCES}/gates.py
*** Variables ***
# wallet that has assets in selectel mainnet
${WALLET_ROOT} = wallets/selectel_mainnet_wallet.json
*** Test cases *** *** Test cases ***
NeoFS Storage Smoke NeoFS Storage Smoke
[Documentation] Creates container and does PUT, GET and LIST on it via CLI and via HTTP Gate [Documentation] Creates container and does PUT, GET and LIST on it via CLI and via HTTP Gate
[Timeout] 5 min [Timeout] 5 min
# user.key, container owner
${PRIV_KEY} = Form WIF from String 1dd37fba80fec4e6a6f13fd708d8dcb3b29def768017052f6c930fa1c5d90bbb
${WALLET} = Init wallet
Generate wallet from WIF ${WALLET} ${PRIV_KEY}
${ADDR} = Dump Address ${WALLET}
Dump PrivKey ${WALLET} ${ADDR}
${SCRIPT_HASH} = Get ScripHash ${PRIV_KEY}
${TX_DEPOSIT} = NeoFS Deposit ${WALLET} ${ADDR} ${SCRIPT_HASH} 50 one
Wait Until Keyword Succeeds 1 min 15 sec
... Transaction accepted in block ${TX_DEPOSIT}
Get Transaction ${TX_DEPOSIT}
${CID} = Create container ${PRIV_KEY} public ${TX} = Transfer Mainnet Gas ${WALLET_ROOT} NbTiM6h8r99kpRtb428XcsUk1TzKed2gTc ${ADDR} 2 one
Wait Until Keyword Succeeds 2 min 30 sec Wait Until Keyword Succeeds 2 min 15 sec
... Container Existing ${PRIV_KEY} ${CID} ... Transaction accepted in block ${TX}
Get Transaction ${TX}
${FILE} = Generate file of bytes 1024
${S_OID} = Put object to NeoFS ${PRIV_KEY} ${FILE} ${CID} ${EMPTY} ${EMPTY}
Get object from NeoFS ${PRIV_KEY} ${CID} ${S_OID} ${EMPTY} s_file_read
${FILEPATH} = Get via HTTP Gate ${CID} ${S_OID} ${TX_DEPOSIT} = NeoFS Deposit ${WALLET} ${ADDR} ${SCRIPT_HASH} 1
Wait Until Keyword Succeeds 1 min 15 sec
... Transaction accepted in block ${TX_DEPOSIT}
Get Transaction ${TX_DEPOSIT}
Get Balance ${PRIV_KEY}
${CID}
... ${BUCKET}
... ${ACCESS_KEY_ID}
... ${SEC_ACCESS_KEY}
... ${OWNER_PRIV_KEY} = Init S3 Credentials ${PRIV_KEY} keys/s3_selectel_hcs.pub.key
${S3_CLIENT} = Config S3 client ${ACCESS_KEY_ID} ${SEC_ACCESS_KEY}
${CONTEINERS_LIST} = Container List ${PRIV_KEY}
List Should Contain Value ${CONTEINERS_LIST} ${CID}
${FILE_S3} = Generate file of bytes 1024
${FILE_S3_HASH} = Get file hash ${FILE_S3}
${FILE_S3_NAME} = Get file name ${FILE_S3}
${FILE_FS} = Generate file of bytes 1024
${FILE_FS_HASH} = Get file hash ${FILE_FS}
${FILE_FS_NAME} = Get file name ${FILE_FS}
${OID_FS} = Put object to NeoFS ${PRIV_KEY} ${FILE_FS} ${CID} ${EMPTY} ${EMPTY}
Put object S3 ${S3_CLIENT} ${BUCKET} ${FILE_S3}
${OID_LIST_S3} = Search object ${PRIV_KEY} ${CID} ${EMPTY} ${EMPTY} FileName=${FILE_S3_NAME}
${OID_S3} = Get From List ${OID_LIST_S3} 0
Get object from NeoFS ${PRIV_KEY} ${CID} ${OID_FS} ${EMPTY} s_file_read
Get object S3 ${S3_CLIENT} ${BUCKET} ${FILE_FS_NAME} fs_obj_get_s3
${FILEPATH_FS} = Get via HTTP Gate ${CID} ${OID_FS}
Verify file hash fs_obj_get_s3 ${FILE_FS_HASH}
Verify file hash s_file_read ${FILE_FS_HASH}
Verify file hash ${FILEPATH_FS} ${FILE_FS_HASH}
Get object from NeoFS ${PRIV_KEY} ${CID} ${OID_S3} ${EMPTY} s_file_read
Get object S3 ${S3_CLIENT} ${BUCKET} ${FILE_S3_NAME} s3_obj_get_s3
${FILEPATH_S3} = Get via HTTP Gate ${CID} ${OID_S3}
Verify file hash s3_obj_get_s3 ${FILE_S3_HASH}
Verify file hash s_file_read ${FILE_S3_HASH}
Verify file hash ${FILEPATH_S3} ${FILE_S3_HASH}
[Teardown] Cleanup Files ${FILE_S3} ${FILE_FS} s_file_read s3_obj_get_s3
... fs_obj_get_s3 ${FILEPATH_S3} ${FILEPATH_FS}

View file

@ -9,9 +9,5 @@ CERT="%s/../../ca" % ROOT
# in case when test is run from root in docker # in case when test is run from root in docker
ABSOLUTE_FILE_PATH="/robot/testsuites/integration" ABSOLUTE_FILE_PATH="/robot/testsuites/integration"
JF_TOKEN = os.getenv('JF_TOKEN')
REG_USR = os.getenv('REG_USR')
REG_PWD = os.getenv('REG_PWD')
MORPH_BLOCK_TIMEOUT = "10sec" MORPH_BLOCK_TIMEOUT = "10sec"
NEOFS_EPOCH_TIMEOUT = "30sec" NEOFS_EPOCH_TIMEOUT = "30sec"

View file

@ -1,8 +0,0 @@
#!/usr/bin/python3
# wallet that has assets in selectel mainnet
WALLET = 'wallets/selectel_mainnet_wallet.json'
# address from this wallet anf its representations
ADDR = 'NbTiM6h8r99kpRtb428XcsUk1TzKed2gTc'
SCRIPT_HASH = 'eb88a496178256213f674eb302e44f9d85cf8aaa'
PRIV_KEY = 'KxyjQ8eUa4FHt3Gvioyt1Wz29cTUrE4eTqX3yFSk1YFCsPL8uNsY'