Skip to content

Commit

Permalink
update server statistics tests to handle more cases
Browse files Browse the repository at this point in the history
  • Loading branch information
OriHoch committed Sep 11, 2022
1 parent 39e5c75 commit 06939ae
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 10 deletions.
34 changes: 34 additions & 0 deletions tests/cloudcli/test_server_statistics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import datetime
from ..cloudcli_server.test_server_statistics import assert_all_stats, STAT_CATEGORIES, assert_stats_category


def test_server_statistics_all(cloudcli, session_server_powered_on):
res = cloudcli(
"server", "statistics", "--name", session_server_powered_on["name"],
"--all", "--period", "1h", "--format", "json"
)
assert_all_stats(res)
res = cloudcli(
"server", "statistics", "--name", session_server_powered_on["name"], "--all",
"--startdate", (datetime.datetime.now() - datetime.timedelta(hours=2)).strftime("%Y%m%d"),
"--enddate", datetime.datetime.now().strftime("%Y%m%d"),
"--format", "json"
)
assert_all_stats(res)


def test_server_statistics_categories(cloudcli, session_server_powered_on):
for category in STAT_CATEGORIES.keys():
print("Testing category %s" % category)
res = cloudcli(
"server", "statistics", "--name", session_server_powered_on["name"],
f"--{category}", "--period", "1h", "--format", "json"
)
assert_stats_category(category, res)
res = cloudcli(
"server", "statistics", "--name", session_server_powered_on["name"], f"--{category}",
"--startdate", (datetime.datetime.now() - datetime.timedelta(hours=2)).strftime("%Y%m%d"),
"--enddate", datetime.datetime.now().strftime("%Y%m%d"),
"--format", "json"
)
assert_stats_category(category, res)
38 changes: 29 additions & 9 deletions tests/cloudcli_server/test_server_statistics.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import pytest
import datetime

import pytest

from ..common import cloudcli_server_request, assert_only_one_server, assert_no_matching_servers
from ..kamatera_api.test_statistics import assert_stat_series_data, STAT_CATEGORIES


def test_server_statistics_only_one_server(session_server_powered_on, session_server_powered_off):
Expand Down Expand Up @@ -45,35 +48,52 @@ def _assert_stats(res):
return all_stats


def assert_all_stats(res):
stats = _assert_stats(res)
all_series_names = set()
for values in STAT_CATEGORIES.values():
all_series_names.update(values)
assert set(stats.keys()) == all_series_names
for name, data in stats.items():
assert_stat_series_data(name, data)


def assert_stats_category(category, res):
stats = _assert_stats(res)
assert set(stats.keys()) == STAT_CATEGORIES[category]
for name, data in stats.items():
assert_stat_series_data(name, data)


def test_server_statistics_all(session_server_powered_on):
res = cloudcli_server_request("/server/statistics", method="POST", json={
"name": session_server_powered_on["name"],
"all": True,
"period": "1h"
})
_assert_stats(res)
assert_all_stats(res)
res = cloudcli_server_request("/server/statistics", method="POST", json={
"name": session_server_powered_on["name"],
"all": True,
"startdate": (datetime.datetime.now() - datetime.timedelta(hours=2)).strftime("%Y%m%d"),
"enddate": datetime.datetime.now().strftime("%Y%m%d")
})
_assert_stats(res)
assert_all_stats(res)


def test_server_statistics(session_server_powered_on):
for stat in ["cpu", "ram", "network", "disksIops", "disksTransfer"]:
print("Testing stat %s" % stat)
for category in STAT_CATEGORIES.keys():
print("Testing category %s" % category)
res = cloudcli_server_request("/server/statistics", method="POST", json={
"name": session_server_powered_on["name"],
stat: True,
category: True,
"period": "1h"
})
_assert_stats(res)
assert_stats_category(category, res)
res = cloudcli_server_request("/server/statistics", method="POST", json={
"name": session_server_powered_on["name"],
stat: True,
category: True,
"startdate": (datetime.datetime.now() - datetime.timedelta(hours=2)).strftime("%Y%m%d"),
"enddate": datetime.datetime.now().strftime("%Y%m%d")
})
_assert_stats(res)
assert_stats_category(category, res)
5 changes: 4 additions & 1 deletion tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,10 @@ def create_fixture_server(title, env_var_prefix, poweronaftercreate="yes", wait=
)
print("%s created" % title)
return create_server, {
"name": name, "password": password, "create_request_data": create_request_data, "command_id": command_id,
"name": name,
"password": password,
"create_request_data": create_request_data,
"command_id": command_id,
"private_sshkey_path": private_sshkey_path
}

Expand Down
7 changes: 7 additions & 0 deletions tests/kamatera_api/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,10 @@ def kamatera_api_request(path, ignore_errors=False, **kwargs):
def assert_str_int(val):
assert str(int(val)) == str(val)
return int(val)


def get_server_id_by_name(name):
for server in kamatera_api_request("/service/servers"):
if server["name"] == name:
return server["id"]
raise Exception(f"Server not found: {name}")
File renamed without changes.
40 changes: 40 additions & 0 deletions tests/kamatera_api/test_statistics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import datetime

from .common import kamatera_api_request, get_server_id_by_name


STAT_CATEGORIES = {
'network': {'lanTr', 'netRc0', 'lanRc', 'netTotal0', 'netTrTotal', 'netRcTotal', 'netTr0', 'wanRc', 'wanTr'},
'ram': {'ram'},
'cpu': {'cpuAvg', 'cpu0'},
'disksIops': {'diskWrite0', 'diskWriteTotal',
'diskReadTotal', 'diskRead0', 'diskCmdTotal', 'diskCmd0'},
'disksTransfer': {'diskWriteMB0', 'diskReadMB0', 'diskWriteMBTotal', 'diskReadMBTotal'},
}


def assert_stat_series_data(name, data):
for ts, value in data:
dt = datetime.datetime.fromtimestamp(ts / 1000)
assert (datetime.datetime.utcnow() - datetime.timedelta(days=2)) <= dt <= (
datetime.datetime.utcnow() + datetime.timedelta(
days=2)), f"invalid timestamp: {name} {ts} {value}"
assert isinstance(value, (float, int)), f"invalid value: {name} {ts} {value}"


def test(session_server_powered_on):
server_id = get_server_id_by_name(session_server_powered_on["name"])
dt_from = (datetime.datetime.utcnow() - datetime.timedelta(days=1)).strftime("%Y-%m-%dT%H:%M:%S") + '.000Z'
dt_to = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S") + '.000Z'
print(f'from: {dt_from}, to: {dt_to}')
for category, stat_names in STAT_CATEGORIES.items():
series = {}
for data in kamatera_api_request(f'/svc/server/{server_id}/statistics?category={category}&dtFrom={dt_from}&dtTo={dt_to}'):
if data['series'] == 'interval':
assert data == {'series': 'interval', 'data': 1}
else:
assert data['series'] not in series
series[data['series']] = data['data']
assert set(series.keys()) == stat_names
for name, data in series.items():
assert_stat_series_data(name, data)

0 comments on commit 06939ae

Please sign in to comment.