Skip to content
Snippets Groups Projects
Commit 5b0c239e authored by Nikolay Stanchev's avatar Nikolay Stanchev
Browse files

Refactors alerts integration test

parent 619c4793
No related branches found
No related tags found
No related merge requests found
......@@ -246,17 +246,12 @@ class TestAlerts(object):
# find the latest timestamp of the registered alerts
max_post_timestamp = 0
tasks = get("http://{0}/kapacitor/v1/tasks".format(clmc_service_host)).json()["tasks"]
for task in tasks:
# get the configured variables of this alert
task_config = task["vars"]
# if configured for this SFC instance
if task_config["sfc"]["value"] == sfc and task_config["sfci"]["value"] == sfc_instance:
created_datestr = task["created"][:26] # ignore the timezone and only take the first 6 digits of the microseconds
task_created_timestamp = datetime.datetime.strptime(created_datestr, "%Y-%m-%dT%H:%M:%S.%f")
max_post_timestamp = max(max_post_timestamp, task_created_timestamp.timestamp())
print("Sleeping 2 seconds to ensure a difference between the timestamps when creating the alerts and when updating them...")
sleep(2)
for timestamp in tasks_timestamps(tasks, sfc, sfc_instance):
max_post_timestamp = max(max_post_timestamp, timestamp)
delay = 2 # seconds
print("Sleeping {0} seconds to ensure a difference between the timestamps when creating the alerts and when updating them...".format(delay))
sleep(delay)
# update the alerts with a PUT request and check that the "created" metadata is updated implying that the alerts were recreated
print("Sending alerts specification to clmc service for updating...")
......@@ -275,19 +270,32 @@ class TestAlerts(object):
# find the earliest timestamp of the updated alerts
min_put_timestamp = float("inf")
tasks = get("http://{0}/kapacitor/v1/tasks".format(clmc_service_host)).json()["tasks"]
for task in tasks:
# get the configured variables of this alert
task_config = task["vars"]
# if configured for this SFC instance
if task_config["sfc"]["value"] == sfc and task_config["sfci"]["value"] == sfc_instance:
created_datestr = task["created"][:26] # ignore the timezone and only take the first 6 digits of the microseconds
task_created_timestamp = datetime.datetime.strptime(created_datestr, "%Y-%m-%dT%H:%M:%S.%f")
min_put_timestamp = min(min_put_timestamp, task_created_timestamp.timestamp())
for timestamp in tasks_timestamps(tasks, sfc, sfc_instance):
min_put_timestamp = min(min_put_timestamp, timestamp)
print("Latest timestamp during the POST request", max_post_timestamp, "Earliest timestamp during the PUT request", min_put_timestamp)
assert max_post_timestamp < min_put_timestamp, "There is an alert that wasn't updated properly with a PUT request"
assert min_put_timestamp - max_post_timestamp >= delay, "There is an alert that wasn't updated properly with a PUT request"
# delete the alerts with a DELETE request
with open(alerts_spec, 'rb') as alerts:
files = {'alert-spec': alerts}
delete("http://{0}/clmc-service/alerts".format(clmc_service_host), files=files)
def tasks_timestamps(all_tasks, sfc_id, sfc_instance_id):
"""
Generates the timestamps for the tasks related to the given SFC and SFC instance.
:param all_tasks: the full list of tasks from kapacitor
:param sfc_id: SFC identifier
:param sfc_instance_id: SFC instance identifier
"""
for task in all_tasks:
# get the configured variables of this alert
task_config = task["vars"]
# if configured for this SFC instance
if task_config["sfc"]["value"] == sfc_id and task_config["sfci"]["value"] == sfc_instance_id:
created_datestr = task["created"][:26] # ignore the timezone and only take the first 6 digits of the microseconds
task_created_timestamp = datetime.datetime.strptime(created_datestr, "%Y-%m-%dT%H:%M:%S.%f")
yield task_created_timestamp.timestamp()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment