Skip to content

Commit

Permalink
adding simple tests to --remote
Browse files Browse the repository at this point in the history
  • Loading branch information
pedro-costa-techlabs committed Aug 29, 2024
1 parent ae024a3 commit aa55d2c
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 19 deletions.
42 changes: 24 additions & 18 deletions src/common/command.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from fabric import Connection
from enum import Enum
from typing import Any

import click
from fabric import Connection

from common.logger import logger

Expand Down Expand Up @@ -57,7 +57,10 @@ class Command:
required=False,
),
CommandOption(
["--port", "-H"], type=int, help="the remote port", required=False
["--port", "-H"],
type=int,
help="the remote port",
required=False,
),
]

Expand All @@ -70,19 +73,23 @@ def __init__(self) -> None:
params=self.params + self.remote_params,
)

def _get_remote_kwargs(self, kwargs) -> tuple[dict, dict]:
def _get_remote_kwargs(self, kwargs) -> tuple[bool, dict, dict]:
"""
Gets remote kwargs from kwargs.
Params:
Returns (bool, kwargs, remote_kwargs):
First value is whether the command should be run on a remote server or not.
"""
if not kwargs:
return kwargs, {}
return (False, kwargs, {})
remote_kwargs = {
"user": kwargs.pop("user") or "",
"port": kwargs.pop("port") or 22,
"host": kwargs.pop("host") or "",
}
remote = kwargs.pop("remote") or False

if not kwargs.pop("remote"):
return kwargs, {}

return (kwargs, remote_kwargs)
return (remote, kwargs, remote_kwargs)

def _dict_to_command_line_args(self, d: dict) -> str:
"""
Expand All @@ -97,16 +104,17 @@ def _dict_to_command_line_args(self, d: dict) -> str:
arg_key = str(key).replace("_", "-")

if isinstance(value, bool):
args.append(f"--{arg_key}")
if value:
args.append(f"--{arg_key}")
else:
arg_value = str(value).lower()
arg = f"--{arg_key} {arg_value}"
args.append(arg)
if value:
arg_value = str(value).lower()
arg = f"--{arg_key} {arg_value}"
args.append(arg)

return " ".join(args)

def _remote_run(self, kwargs, remote_kwargs):

ctx = click.get_current_context()
prefix = "das-cli"
command_path = " ".join(ctx.command_path.split(" ")[1:])
Expand All @@ -115,9 +123,9 @@ def _remote_run(self, kwargs, remote_kwargs):
Connection(**remote_kwargs).run(command)

def safe_run(self, **kwargs):
kwargs, remote_kwargs = self._get_remote_kwargs(kwargs)
remote, kwargs, remote_kwargs = self._get_remote_kwargs(kwargs)
try:
if remote_kwargs.get("host"):
if remote:
return self._remote_run(kwargs, remote_kwargs)
return self.run(**kwargs)
except Exception as e:
Expand Down Expand Up @@ -189,9 +197,7 @@ class CommandGroup(Command):
name = "unknown"
help = ""
short_help = ""
params = [
CommandOption(["--hostGroup"], type=str, help="qwer", required=False),
]
params = []

def __init__(self) -> None:
self.group = click.Group(self.name)
Expand Down
2 changes: 1 addition & 1 deletion src/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Click==7.0
Click==8.1.6
docker==7.1.0
distro==1.9.0
click-man==0.4.1
Expand Down
55 changes: 55 additions & 0 deletions tests/integration/test_remote.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/local/bin/bats

load 'libs/bats-support/load'
load 'libs/bats-assert/load'
load 'libs/utils'
load 'libs/docker'

setup() {
if [ -z "${REMOTE_HOST+x}" ]; then
skip "Environment variable REMOTE_HOST is not set. Skipping all tests in this file."
fi

libs=(hyperon-das hyperon-das-atomdb)

pip3 install hyperon-das==0.7.13
}

teardown() {
pip3 uninstall -y hyperon-das
pip3 uninstall -y hyperon-das-atomdb
}

@test "Listing all python library versions" {
local available_versions_regex="^.*\savailable\sversions:"
local available_versions_match_count

run python3 src/das_cli.py python-library list --remote --host $REMOTE_HOST

available_versions_match_count=$(echo "$output" | grep -cE "$available_versions_regex")

assert_output --regexp "$available_versions_regex"
assert [ "$available_versions_match_count" -eq "${#libs[@]}" ]
}

@test "Show available python library versions" {
local available_versions_regex="^.*\savailable\sversions:"

for lib in "${libs[@]}"; do
local available_versions_match_count

run python3 src/das_cli.py python-library list --library "$lib" --remote --host $REMOTE_HOST
available_versions_match_count=$(echo "$output" | grep -cE "$available_versions_regex")

assert_output --regexp "$available_versions_regex"
assert [ "$available_versions_match_count" -eq 1 ]
done
}

@test "Trying to show version to an invalid python library" {
local invalid_lib="invalid-python-library"

run python3 src/das_cli.py python-library list --library $invalid_lib --remote --host $REMOTE_HOST

assert_failure
}

0 comments on commit aa55d2c

Please sign in to comment.