Add storagegroup, session and sign in neofs_cli lib

Signed-off-by: Vladimir Avdeev <v.avdeev@yadro.com>
This commit is contained in:
Vladimir Avdeev 2022-10-31 12:31:28 +03:00 committed by Vladimir Avdeev
parent b50c4cba7b
commit 9af8f89305
11 changed files with 290 additions and 37 deletions

View file

@ -1,5 +1,3 @@
from typing import List
from neofs_testlib.cli import NeoGo from neofs_testlib.cli import NeoGo
@ -14,8 +12,8 @@ class Multisig:
contract_hash: str, contract_hash: str,
contract_args: str, contract_args: str,
multisig_hash: str, multisig_hash: str,
wallets: List[str], wallets: list[str],
passwords: List[str], passwords: list[str],
address: str, address: str,
endpoint: str, endpoint: str,
) -> None: ) -> None:

View file

@ -1,6 +1,6 @@
import json import json
from time import sleep from time import sleep
from typing import List, Optional from typing import Optional
from cli import NeoGo from cli import NeoGo
from shell import Shell from shell import Shell
@ -24,7 +24,7 @@ class RoleDesignation:
def set_notary_nodes( def set_notary_nodes(
self, self,
addr: str, addr: str,
pubkeys: List[str], pubkeys: list[str],
script_hash: str, script_hash: str,
wallet: str, wallet: str,
passwd: str, passwd: str,
@ -47,7 +47,7 @@ class RoleDesignation:
def set_inner_ring( def set_inner_ring(
self, self,
addr: str, addr: str,
pubkeys: List[str], pubkeys: list[str],
script_hash: str, script_hash: str,
wallet: str, wallet: str,
passwd: str, passwd: str,
@ -70,7 +70,7 @@ class RoleDesignation:
def set_oracles( def set_oracles(
self, self,
addr: str, addr: str,
pubkeys: List[str], pubkeys: list[str],
script_hash: str, script_hash: str,
wallet: str, wallet: str,
passwd: str, passwd: str,
@ -92,10 +92,10 @@ class RoleDesignation:
def set_notary_nodes_multisig_tx( def set_notary_nodes_multisig_tx(
self, self,
pubkeys: List[str], pubkeys: list[str],
script_hash: str, script_hash: str,
wallets: List[str], wallets: list[str],
passwords: List[str], passwords: list[str],
address: str, address: str,
endpoint: str, endpoint: str,
invoke_tx_file: str, invoke_tx_file: str,
@ -118,10 +118,10 @@ class RoleDesignation:
def set_inner_ring_multisig_tx( def set_inner_ring_multisig_tx(
self, self,
pubkeys: List[str], pubkeys: list[str],
script_hash: str, script_hash: str,
wallets: List[str], wallets: list[str],
passwords: List[str], passwords: list[str],
address: str, address: str,
endpoint: str, endpoint: str,
invoke_tx_file: str, invoke_tx_file: str,
@ -142,7 +142,7 @@ class RoleDesignation:
) )
sleep(self.block_period) sleep(self.block_period)
def check_candidates(self, contract_hash: str, endpoint: str) -> Optional[List[str]]: def check_candidates(self, contract_hash: str, endpoint: str) -> Optional[list[str]]:
out = self.neogo.contract.testinvokefunction( out = self.neogo.contract.testinvokefunction(
scripthash=contract_hash, scripthash=contract_hash,
method="innerRingCandidates", method="innerRingCandidates",

View file

@ -1,6 +1,6 @@
import json import json
import logging import logging
from typing import Any, Dict, List, Optional from typing import Any, Dict, Optional
import requests import requests
@ -29,8 +29,8 @@ class RPCClient:
self, self,
sc_hash: str, sc_hash: str,
function: str, function: str,
params: Optional[List] = None, params: Optional[list] = None,
signers: Optional[List] = None, signers: Optional[list] = None,
) -> Dict[str, Any]: ) -> Dict[str, Any]:
return self._call_endpoint( return self._call_endpoint(
"invokefunction", params=[sc_hash, function, params or [], signers or []] "invokefunction", params=[sc_hash, function, params or [], signers or []]
@ -75,6 +75,6 @@ class RPCClient:
) from exc ) from exc
def _build_payload(method, params: Optional[List] = None): def _build_payload(method, params: Optional[list] = None):
payload = json.dumps({"jsonrpc": "2.0", "method": method, "params": params or [], "id": 1}) payload = json.dumps({"jsonrpc": "2.0", "method": method, "params": params or [], "id": 1})
return payload.replace("'", '"') return payload.replace("'", '"')

View file

@ -17,6 +17,8 @@ class CliCommand:
"doc_type": "type", "doc_type": "type",
"to_address": "to", "to_address": "to",
"from_address": "from", "from_address": "from",
"to_file": "to",
"from_file": "from",
} }
def __init__(self, shell: Shell, cli_exec_path: str, **base_params): def __init__(self, shell: Shell, cli_exec_path: str, **base_params):

View file

@ -5,6 +5,9 @@ from neofs_testlib.cli.neofs_cli.acl import NeofsCliACL
from neofs_testlib.cli.neofs_cli.container import NeofsCliContainer from neofs_testlib.cli.neofs_cli.container import NeofsCliContainer
from neofs_testlib.cli.neofs_cli.netmap import NeofsCliNetmap from neofs_testlib.cli.neofs_cli.netmap import NeofsCliNetmap
from neofs_testlib.cli.neofs_cli.object import NeofsCliObject from neofs_testlib.cli.neofs_cli.object import NeofsCliObject
from neofs_testlib.cli.neofs_cli.session import NeofsCliSession
from neofs_testlib.cli.neofs_cli.storagegroup import NeofsCliStorageGroup
from neofs_testlib.cli.neofs_cli.util import NeofsCliUtil
from neofs_testlib.cli.neofs_cli.version import NeofsCliVersion from neofs_testlib.cli.neofs_cli.version import NeofsCliVersion
from neofs_testlib.shell import Shell from neofs_testlib.shell import Shell
@ -15,6 +18,9 @@ class NeofsCli:
container: Optional[NeofsCliContainer] = None container: Optional[NeofsCliContainer] = None
netmap: Optional[NeofsCliNetmap] = None netmap: Optional[NeofsCliNetmap] = None
object: Optional[NeofsCliObject] = None object: Optional[NeofsCliObject] = None
session: Optional[NeofsCliSession] = None
storagegroup: Optional[NeofsCliStorageGroup] = None
util: Optional[NeofsCliUtil] = None
version: Optional[NeofsCliVersion] = None version: Optional[NeofsCliVersion] = None
def __init__(self, shell: Shell, neofs_cli_exec_path: str, config_file: Optional[str] = None): def __init__(self, shell: Shell, neofs_cli_exec_path: str, config_file: Optional[str] = None):
@ -23,4 +29,7 @@ class NeofsCli:
self.container = NeofsCliContainer(shell, neofs_cli_exec_path, config=config_file) self.container = NeofsCliContainer(shell, neofs_cli_exec_path, config=config_file)
self.netmap = NeofsCliNetmap(shell, neofs_cli_exec_path, config=config_file) self.netmap = NeofsCliNetmap(shell, neofs_cli_exec_path, config=config_file)
self.object = NeofsCliObject(shell, neofs_cli_exec_path, config=config_file) self.object = NeofsCliObject(shell, neofs_cli_exec_path, config=config_file)
self.session = NeofsCliSession(shell, neofs_cli_exec_path, config=config_file)
self.storagegroup = NeofsCliStorageGroup(shell, neofs_cli_exec_path, config=config_file)
self.util = NeofsCliUtil(shell, neofs_cli_exec_path, config=config_file)
self.version = NeofsCliVersion(shell, neofs_cli_exec_path, config=config_file) self.version = NeofsCliVersion(shell, neofs_cli_exec_path, config=config_file)

View file

@ -42,7 +42,7 @@ class NeofsCliContainer(CliCommand):
subnet: String representation of container subnetwork. subnet: String representation of container subnetwork.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -77,7 +77,7 @@ class NeofsCliContainer(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -112,7 +112,7 @@ class NeofsCliContainer(CliCommand):
to: Path to dump encoded container. to: Path to dump encoded container.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -146,7 +146,7 @@ class NeofsCliContainer(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -176,7 +176,7 @@ class NeofsCliContainer(CliCommand):
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>'). rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -204,7 +204,7 @@ class NeofsCliContainer(CliCommand):
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>'). rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -239,7 +239,7 @@ class NeofsCliContainer(CliCommand):
table: Path to file with JSON or binary encoded EACL table. table: Path to file with JSON or binary encoded EACL table.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.

View file

@ -23,7 +23,7 @@ class NeofsCliNetmap(CliCommand):
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>'). rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: Path to the wallet or binary key. wallet: Path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -81,7 +81,7 @@ class NeofsCliNetmap(CliCommand):
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>'). rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: Path to the wallet or binary key. wallet: Path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -109,7 +109,7 @@ class NeofsCliNetmap(CliCommand):
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>'). rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: Path to the wallet or binary key. wallet: Path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.

View file

@ -29,7 +29,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -71,7 +71,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -109,7 +109,7 @@ class NeofsCliObject(CliCommand):
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
hash_type: Hash type. Either 'sha256' or 'tz' (default "sha256"). hash_type: Hash type. Either 'sha256' or 'tz' (default "sha256").
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -155,7 +155,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -191,7 +191,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -238,7 +238,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -280,7 +280,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.
@ -320,7 +320,7 @@ class NeofsCliObject(CliCommand):
session: Path to a JSON-encoded container session token. session: Path to a JSON-encoded container session token.
ttl: TTL value in request meta header (default 2). ttl: TTL value in request meta header (default 2).
wallet: WIF (NEP-2) string or path to the wallet or binary key. wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Request X-Headers in form of Key=Value. xhdr: Dict with request X-Headers.
Returns: Returns:
Command's result. Command's result.

View file

@ -0,0 +1,41 @@
from typing import Optional
from neofs_testlib.cli.cli_command import CliCommand
from neofs_testlib.shell import CommandResult
class NeofsCliSession(CliCommand):
def create(
self,
rpc_endpoint: str,
wallet: str,
wallet_password: str,
out: str,
lifetime: Optional[int] = None,
address: Optional[str] = None,
json: Optional[bool] = False,
) -> CommandResult:
"""
Create session token.
Args:
address: Address of wallet account.
out: File to write session token to.
lifetime: Number of epochs for token to stay valid.
json: Output token in JSON.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
wallet_password: Wallet password.
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
Returns:
Command's result.
"""
return self._execute_with_password(
"session create",
wallet_password,
**{
param: value
for param, value in locals().items()
if param not in ["self", "wallet_password"]
},
)

View file

@ -0,0 +1,147 @@
from typing import Optional
from neofs_testlib.cli.cli_command import CliCommand
from neofs_testlib.shell import CommandResult
class NeofsCliStorageGroup(CliCommand):
def put(
self,
rpc_endpoint: str,
wallet: str,
cid: str,
members: list[str],
ttl: Optional[int] = None,
bearer: Optional[str] = None,
lifetime: Optional[int] = None,
address: Optional[str] = None,
xhdr: Optional[dict] = None,
) -> CommandResult:
"""
Put storage group to NeoFS.
Args:
address: Address of wallet account.
bearer: File with signed JSON or binary encoded bearer token.
cid: Container ID.
members: ID list of storage group members.
lifetime: Storage group lifetime in epochs.
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Dict with request X-Headers.
Returns:
Command's result.
"""
members = ",".join(members)
return self._execute(
"storagegroup put",
**{param: value for param, value in locals().items() if param not in ["self"]},
)
def get(
self,
rpc_endpoint: str,
wallet: str,
cid: str,
id: str,
raw: Optional[bool] = False,
ttl: Optional[int] = None,
bearer: Optional[str] = None,
lifetime: Optional[int] = None,
address: Optional[str] = None,
xhdr: Optional[dict] = None,
) -> CommandResult:
"""
Get storage group from NeoFS.
Args:
address: Address of wallet account.
bearer: File with signed JSON or binary encoded bearer token.
cid: Container ID.
id: Storage group identifier.
raw: Set raw request option.
lifetime: Storage group lifetime in epochs.
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Dict with request X-Headers.
Returns:
Command's result.
"""
return self._execute(
"storagegroup get",
**{param: value for param, value in locals().items() if param not in ["self"]},
)
def list(
self,
rpc_endpoint: str,
wallet: str,
cid: str,
raw: Optional[bool] = False,
ttl: Optional[int] = None,
bearer: Optional[str] = None,
lifetime: Optional[int] = None,
address: Optional[str] = None,
xhdr: Optional[dict] = None,
) -> CommandResult:
"""
List storage groups in NeoFS container.
Args:
address: Address of wallet account.
bearer: File with signed JSON or binary encoded bearer token.
cid: Container ID.
raw: Set raw request option.
lifetime: Storage group lifetime in epochs.
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Dict with request X-Headers.
Returns:
Command's result.
"""
return self._execute(
"storagegroup list",
**{param: value for param, value in locals().items() if param not in ["self"]},
)
def delete(
self,
rpc_endpoint: str,
wallet: str,
cid: str,
id: str,
raw: Optional[bool] = False,
ttl: Optional[int] = None,
bearer: Optional[str] = None,
lifetime: Optional[int] = None,
address: Optional[str] = None,
xhdr: Optional[dict] = None,
) -> CommandResult:
"""
Delete storage group from NeoFS.
Args:
address: Address of wallet account.
bearer: File with signed JSON or binary encoded bearer token.
cid: Container ID.
id: Storage group identifier.
raw: Set raw request option.
lifetime: Storage group lifetime in epochs.
rpc_endpoint: Remote node address (as 'multiaddr' or '<host>:<port>').
ttl: TTL value in request meta header.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
xhdr: Dict with request X-Headers.
Returns:
Command's result.
"""
return self._execute(
"storagegroup delete",
**{param: value for param, value in locals().items() if param not in ["self"]},
)

View file

@ -0,0 +1,56 @@
from typing import Optional
from neofs_testlib.cli.cli_command import CliCommand
from neofs_testlib.shell import CommandResult
class NeofsCliUtil(CliCommand):
def sign_bearer_token(
self,
wallet: str,
from_file: str,
to_file: str,
address: Optional[str] = None,
json: Optional[bool] = False,
) -> CommandResult:
"""
Sign bearer token to use it in requests.
Args:
address: Address of wallet account.
from_file: File with JSON or binary encoded bearer token to sign.
to_file: File to dump signed bearer token (default: binary encoded).
json: Dump bearer token in JSON encoding.
wallet: WIF (NEP-2) string or path to the wallet or binary key.
Returns:
Command's result.
"""
return self._execute(
"util sign bearer-token",
**{param: value for param, value in locals().items() if param not in ["self"]},
)
def sign_session_token(
self,
wallet: str,
from_file: str,
to_file: str,
address: Optional[str] = None,
) -> CommandResult:
"""
Sign session token to use it in requests.
Args:
address: Address of wallet account.
from_file: File with JSON encoded session token to sign.
to_file: File to dump signed bearer token (default: binary encoded).
wallet: WIF (NEP-2) string or path to the wallet or binary key.
Returns:
Command's result.
"""
return self._execute(
"util sign session-token",
**{param: value for param, value in locals().items() if param not in ["self"]},
)