(#67): replaced sleeps with tick new epoch

Signed-off-by: anastasia prasolova <anastasia@nspcc.ru>
This commit is contained in:
anastasia prasolova 2021-07-20 14:10:13 +03:00 committed by Anastasia Prasolova
parent abc7845610
commit 57fc4874e8
5 changed files with 64 additions and 51 deletions

View file

@ -1,10 +1,8 @@
#!/usr/bin/python3.7 #!/usr/bin/python3.8
import subprocess import subprocess
import os import os
import re import re
import binascii
import uuid
import hashlib import hashlib
from robot.api.deco import keyword from robot.api.deco import keyword
from robot.api import logger from robot.api import logger
@ -14,9 +12,7 @@ import base58
import docker import docker
import json import json
import tarfile import tarfile
import shutil
import time
from datetime import datetime from datetime import datetime
from common import * from common import *
@ -107,8 +103,9 @@ def get_nodes_without_object(private_key: str, cid: str, oid: str):
@keyword('Validate storage policy for object') @keyword('Validate storage policy for object')
def validate_storage_policy_for_object(private_key: str, expected_copies: int, cid, oid, *expected_node_list): def validate_storage_policy_for_object(private_key: str, expected_copies: int, cid, oid,
storage_nodes = _get_storage_nodes() expected_node_list=[], storage_nodes=[]):
storage_nodes = storage_nodes if len(storage_nodes) != 0 else _get_storage_nodes()
copies = 0 copies = 0
found_nodes = [] found_nodes = []
@ -120,7 +117,8 @@ def validate_storage_policy_for_object(private_key: str, expected_copies: int, c
found_nodes.append(node) found_nodes.append(node)
if copies != expected_copies: if copies != expected_copies:
raise Exception("Object copies is not match storage policy. Found: %s, expexted: %s." % (copies, expected_copies)) raise Exception(f"Object copies is not match storage policy.",
f"Found: {copies}, expected: {expected_copies}.")
else: else:
logger.info("Found copies: %s, expected: %s" % (copies, expected_copies)) logger.info("Found copies: %s, expected: %s" % (copies, expected_copies))
@ -156,22 +154,6 @@ def get_eacl(private_key: str, cid: str):
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))
@keyword('Get Epoch')
def get_epoch(private_key: str):
cmd = (
f'{NEOFS_CLI_EXEC} --rpc-endpoint {NEOFS_ENDPOINT} --wif {private_key} '
f'netmap epoch'
)
logger.info(f"Cmd: {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(f"Output: {output}")
return int(output)
except subprocess.CalledProcessError as e:
raise Exception(f"command '{e.cmd}' return with error (code {e.returncode}): {e.output}")
@keyword('Set eACL') @keyword('Set eACL')
def set_eacl(private_key: str, cid: str, eacl_table_path: str): def set_eacl(private_key: str, cid: str, eacl_table_path: str):
cmd = ( cmd = (
@ -1128,7 +1110,7 @@ def _parse_cid(input_str: str):
def _get_storage_nodes(): def _get_storage_nodes():
# TODO: fix to get netmap from neofs-cli # TODO: fix to get netmap from neofs-cli
logger.info("Storage nodes: %s" % NEOFS_NETMAP) logger.info(f"Storage nodes: {NEOFS_NETMAP}")
return NEOFS_NETMAP 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

@ -1,16 +1,20 @@
*** Settings *** *** Settings ***
Variables ../../../variables/common.py Variables ../../../variables/common.py
Library ../${RESOURCES}/neofs.py Library Collections
Library ../${RESOURCES}/payment_neogo.py Library ../${RESOURCES}/payment_neogo.py
Library ${KEYWORDS}/wallet_keywords.py Library ../${RESOURCES}/neofs.py
Library ${KEYWORDS}/rpc_call_keywords.py Library wallet_keywords.py
Library rpc_call_keywords.py
Library contract_keywords.py
Resource ../${RESOURCES}/payment_operations.robot Resource ../${RESOURCES}/payment_operations.robot
Resource ../${RESOURCES}/setup_teardown.robot Resource ../${RESOURCES}/setup_teardown.robot
*** Variables *** *** Variables ***
${PLACEMENT_RULE} = REP 2 IN X CBF 1 SELECT 4 FROM * AS X ${PLACEMENT_RULE} = REP 2 IN X CBF 1 SELECT 4 FROM * AS X
${EXPECTED_COPIES} = ${2}
${CHECK_INTERVAL} = 1 min
*** Test cases *** *** Test cases ***
NeoFS Object Replication NeoFS Object Replication
@ -30,24 +34,39 @@ NeoFS Object Replication
${FILE_HASH} = Get file hash ${FILE} ${FILE_HASH} = Get file hash ${FILE}
${S_OID} = Put object ${WIF} ${FILE} ${CID} ${EMPTY} ${EMPTY} ${S_OID} = Put object ${WIF} ${FILE} ${CID} ${EMPTY} ${EMPTY}
Validate storage policy for object ${WIF} 2 ${CID} ${S_OID} Validate storage policy for object ${WIF} ${EXPECTED_COPIES} ${CID} ${S_OID}
@{NODES_OBJ} = Get nodes with object ${WIF} ${CID} ${S_OID} @{NODES_OBJ} = Get nodes with object ${WIF} ${CID} ${S_OID}
${NODES_LOG_TIME} = Get Nodes Log Latest Timestamp ${NODES_LOG_TIME} = Get Nodes Log Latest Timestamp
@{NODES_OBJ_STOPPED} = Stop nodes 1 @{NODES_OBJ} @{NODES_OBJ_STOPPED} = Stop nodes 1 @{NODES_OBJ}
@{NETMAP} = Convert To List ${NEOFS_NETMAP}
Remove Values From List ${NETMAP} @{NODES_OBJ_STOPPED}
${state} ${output}= Run Keyword And Ignore Error # We expect that during two epochs the missed copy will be replicated.
... Wait Until Keyword Succeeds 10 min 2 min FOR ${i} IN RANGE 2
... Validate storage policy for object ${WIF} 2 ${CID} ${S_OID} ${PASSED} = Run Keyword And Return Status
... Validate storage policy for object ${WIF} ${EXPECTED_COPIES}
... ${CID} ${S_OID} ${EMPTY} ${NETMAP}
Exit For Loop If ${PASSED}
Tick Epoch
Sleep ${CHECK_INTERVAL}
END
Run Keyword Unless ${PASSED} Fail Keyword failed: Validate storage policy for object ${S_OID}
Run Keyword If '${state}'!='PASS' Log Warning: Keyword failed: Validate storage policy for object ${S_OID} {\n}${output} WARN
Find in Nodes Log object successfully replicated ${NODES_LOG_TIME} Find in Nodes Log object successfully replicated ${NODES_LOG_TIME}
Start nodes @{NODES_OBJ_STOPPED} Start nodes @{NODES_OBJ_STOPPED}
Tick Epoch
# We have 2 or 3 copies. Expected behaviour: after one epoch potential 3rd copy should be removed. # We have 2 or 3 copies. Expected behaviour: during two epochs potential 3rd copy should be removed.
Sleep ${NEOFS_EPOCH_TIMEOUT} FOR ${i} IN RANGE 2
Validate storage policy for object ${WIF} 2 ${CID} ${S_OID} ${PASSED} = Run Keyword And Return Status
... Validate storage policy for object ${WIF} ${EXPECTED_COPIES} ${CID} ${S_OID}
Exit For Loop If ${PASSED}
Tick Epoch
Sleep ${CHECK_INTERVAL}
END
Run Keyword Unless ${PASSED} Fail Keyword failed: Validate storage policy for object ${S_OID}
[Teardown] Teardown replaication
[Teardown] Teardown replication

View file

@ -8,6 +8,8 @@ Resource common_steps_object.robot
Resource ../${RESOURCES}/setup_teardown.robot Resource ../${RESOURCES}/setup_teardown.robot
Resource ../${RESOURCES}/payment_operations.robot Resource ../${RESOURCES}/payment_operations.robot
*** Variables ***
${CLEANUP_TIMEOUT} = 10s
*** Test cases *** *** Test cases ***
NeoFS Complex Object Operations NeoFS Complex Object Operations
@ -68,7 +70,9 @@ NeoFS Complex Object Operations
Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_S} ${S_OID} ${ADDR} Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_S} ${S_OID} ${ADDR}
Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_H} ${H_OID} ${ADDR} Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_H} ${H_OID} ${ADDR}
Sleep 2min Tick Epoch
# we assume that during this time objects must be deleted
Sleep ${CLEANUP_TIMEOUT}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object ${WIF} ${CID} ${S_OID} ${EMPTY} ${GET_OBJ_S} ... Get object ${WIF} ${CID} ${S_OID} ${EMPTY} ${GET_OBJ_S}

View file

@ -8,6 +8,8 @@ Resource common_steps_object.robot
Resource ../${RESOURCES}/setup_teardown.robot Resource ../${RESOURCES}/setup_teardown.robot
Resource ../${RESOURCES}/payment_operations.robot Resource ../${RESOURCES}/payment_operations.robot
*** Variables ***
${CLEANUP_TIMEOUT} = 10s
*** Test cases *** *** Test cases ***
NeoFS Simple Object Operations NeoFS Simple Object Operations
@ -24,7 +26,7 @@ NeoFS Simple Object Operations
${FILE} = Generate file of bytes ${SIMPLE_OBJ_SIZE} ${FILE} = Generate file of bytes ${SIMPLE_OBJ_SIZE}
${FILE_HASH} = Get file hash ${FILE} ${FILE_HASH} = Get file hash ${FILE}
${EPOCH} = Get Epoch ${WIF} ${EPOCH} = Get Epoch
${EPOCH_PRE} = Evaluate ${EPOCH}-1 ${EPOCH_PRE} = Evaluate ${EPOCH}-1
${EPOCH_NEXT} = Evaluate ${EPOCH}+1 ${EPOCH_NEXT} = Evaluate ${EPOCH}+1
@ -44,9 +46,10 @@ NeoFS Simple Object Operations
Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read_nxt Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read_nxt
Get object ${WIF} ${CID} ${OID_PST} ${EMPTY} file_read_pst Get object ${WIF} ${CID} ${OID_PST} ${EMPTY} file_read_pst
# Wait one epoch to check that expired objects (OID_CUR) will be removed # Increment epoch to check that expired objects (OID_CUR) will be removed
Sleep ${NEOFS_EPOCH_TIMEOUT} Tick Epoch
# we assume that during this time objects must be deleted
Sleep ${CLEANUP_TIMEOUT}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object ${WIF} ${CID} ${OID_CUR} ${EMPTY} file_read ... Get object ${WIF} ${CID} ${OID_CUR} ${EMPTY} file_read
@ -54,9 +57,10 @@ NeoFS Simple Object Operations
Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read
Get object ${WIF} ${CID} ${OID_PST} ${EMPTY} file_read_pst Get object ${WIF} ${CID} ${OID_PST} ${EMPTY} file_read_pst
# Wait one more epoch to check that expired object (OID_NXT) will be removed # Increment one more epoch to check that expired object (OID_NXT) will be removed
Sleep ${NEOFS_EPOCH_TIMEOUT} Tick Epoch
# we assume that during this time objects must be deleted
Sleep ${CLEANUP_TIMEOUT}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read ... Get object ${WIF} ${CID} ${OID_NXT} ${EMPTY} file_read

View file

@ -8,6 +8,8 @@ Resource common_steps_object.robot
Resource ../${RESOURCES}/payment_operations.robot Resource ../${RESOURCES}/payment_operations.robot
Resource ../${RESOURCES}/setup_teardown.robot Resource ../${RESOURCES}/setup_teardown.robot
*** Variables ***
${CLEANUP_TIMEOUT} = 10s
*** Test cases *** *** Test cases ***
NeoFS Simple Object Operations NeoFS Simple Object Operations
@ -62,7 +64,9 @@ NeoFS Simple Object Operations
Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_S} ${S_OID} ${ADDR} Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_S} ${S_OID} ${ADDR}
Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_H} ${H_OID} ${ADDR} Verify Head tombstone ${WIF} ${CID} ${TOMBSTONE_H} ${H_OID} ${ADDR}
Sleep 2min Tick Epoch
# we assume that during this time objects must be deleted
Sleep ${CLEANUP_TIMEOUT}
Run Keyword And Expect Error * Run Keyword And Expect Error *
... Get object ${WIF} ${CID} ${S_OID} ${EMPTY} ${GET_OBJ_S} ... Get object ${WIF} ${CID} ${S_OID} ${EMPTY} ${GET_OBJ_S}