2022-08-02 23:47:56 +02:00
|
|
|
import unittest
|
2022-10-04 19:08:59 +02:00
|
|
|
import warnings
|
2022-09-18 19:54:25 +02:00
|
|
|
from packaging.version import parse as parse_version
|
2022-08-03 12:35:48 +02:00
|
|
|
|
2022-12-29 00:22:53 +01:00
|
|
|
from uptime_kuma_api import UptimeKumaApi, MonitorType, DockerType, UptimeKumaException
|
2022-08-02 23:47:56 +02:00
|
|
|
|
2022-08-03 12:37:37 +02:00
|
|
|
token = None
|
|
|
|
|
|
|
|
|
2022-08-26 14:04:43 +02:00
|
|
|
def compare(subset, superset):
|
|
|
|
for key, value in subset.items():
|
|
|
|
value2 = superset.get(key)
|
|
|
|
if type(value) == list:
|
|
|
|
for i in range(len(value)):
|
2022-09-06 13:41:51 +02:00
|
|
|
if not value2:
|
2022-08-26 14:04:43 +02:00
|
|
|
return False
|
2022-09-06 13:41:51 +02:00
|
|
|
elif type(value[i]) == list or type(value[i]) == dict:
|
|
|
|
if not compare(value[i], value2[i]):
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
if value[i] != value2[i]:
|
|
|
|
return False
|
2022-08-26 14:04:43 +02:00
|
|
|
elif type(value) == dict:
|
|
|
|
if not compare(value, value2):
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
if value != value2:
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
2022-08-02 23:47:56 +02:00
|
|
|
class UptimeKumaTestCase(unittest.TestCase):
|
|
|
|
api = None
|
2022-08-03 12:37:37 +02:00
|
|
|
url = "http://127.0.0.1:3001"
|
2022-08-05 13:03:58 +02:00
|
|
|
username = "admin"
|
|
|
|
password = "secret123"
|
2022-08-02 23:47:56 +02:00
|
|
|
|
2022-08-26 14:01:29 +02:00
|
|
|
def setUp(self):
|
2022-10-04 19:08:59 +02:00
|
|
|
warnings.simplefilter("ignore", ResourceWarning)
|
|
|
|
|
2022-08-26 14:01:29 +02:00
|
|
|
self.api = UptimeKumaApi(self.url)
|
2022-08-03 12:37:37 +02:00
|
|
|
|
|
|
|
global token
|
|
|
|
if not token:
|
2022-08-26 14:01:29 +02:00
|
|
|
if self.api.need_setup():
|
|
|
|
self.api.setup(self.username, self.password)
|
|
|
|
r = self.api.login(self.username, self.password)
|
2022-08-03 12:37:37 +02:00
|
|
|
token = r["token"]
|
|
|
|
|
2022-08-26 14:01:29 +02:00
|
|
|
self.api.login_by_token(token)
|
|
|
|
|
2022-09-18 19:54:25 +02:00
|
|
|
# delete monitors
|
|
|
|
monitors = self.api.get_monitors()
|
|
|
|
for monitor in monitors:
|
|
|
|
self.api.delete_monitor(monitor["id"])
|
|
|
|
|
|
|
|
# delete notifications
|
|
|
|
notifications = self.api.get_notifications()
|
|
|
|
for notification in notifications:
|
|
|
|
self.api.delete_notification(notification["id"])
|
|
|
|
|
|
|
|
# delete proxies
|
|
|
|
proxies = self.api.get_proxies()
|
|
|
|
for proxy in proxies:
|
|
|
|
self.api.delete_proxy(proxy["id"])
|
|
|
|
|
|
|
|
# delete tags
|
|
|
|
tags = self.api.get_tags()
|
|
|
|
for tag in tags:
|
|
|
|
self.api.delete_tag(tag["id"])
|
|
|
|
|
|
|
|
# delete status pages
|
|
|
|
status_pages = self.api.get_status_pages()
|
|
|
|
for status_page in status_pages:
|
|
|
|
self.api.delete_status_page(status_page["slug"])
|
|
|
|
|
|
|
|
if parse_version(self.api.version) >= parse_version("1.18"):
|
|
|
|
# delete docker hosts
|
|
|
|
docker_hosts = self.api.get_docker_hosts()
|
|
|
|
for docker_host in docker_hosts:
|
|
|
|
self.api.delete_docker_host(docker_host["id"])
|
|
|
|
|
2023-04-07 20:03:30 +02:00
|
|
|
if parse_version(self.api.version) >= parse_version("1.19"):
|
|
|
|
# delete maintenances
|
|
|
|
maintenances = self.api.get_maintenances()
|
|
|
|
for maintenance in maintenances:
|
|
|
|
self.api.delete_maintenance(maintenance["id"])
|
|
|
|
|
|
|
|
if parse_version(self.api.version) >= parse_version("1.21"):
|
|
|
|
# delete api keys
|
|
|
|
api_keys = self.api.get_api_keys()
|
|
|
|
for api_key in api_keys:
|
|
|
|
self.api.delete_api_key(api_key["id"])
|
|
|
|
|
2022-09-18 19:54:25 +02:00
|
|
|
# login again to receive initial messages
|
|
|
|
self.api.disconnect()
|
|
|
|
self.api = UptimeKumaApi(self.url)
|
|
|
|
self.api.login_by_token(token)
|
2022-08-02 23:47:56 +02:00
|
|
|
|
2022-08-26 14:01:29 +02:00
|
|
|
def tearDown(self):
|
|
|
|
self.api.disconnect()
|
2022-08-02 23:47:56 +02:00
|
|
|
|
|
|
|
def compare(self, superset, subset):
|
2022-08-26 14:04:43 +02:00
|
|
|
self.assertTrue(compare(subset, superset))
|
2022-08-02 23:47:56 +02:00
|
|
|
|
|
|
|
def find_by_id(self, objects, value, key="id"):
|
|
|
|
for obj in objects:
|
|
|
|
if obj[key] == value:
|
|
|
|
return obj
|
2022-08-03 12:35:48 +02:00
|
|
|
|
2022-12-29 00:22:53 +01:00
|
|
|
def add_monitor(self, name="monitor 1"):
|
2022-09-17 12:24:08 +02:00
|
|
|
r = self.api.add_monitor(
|
|
|
|
type=MonitorType.HTTP,
|
2022-12-29 00:22:53 +01:00
|
|
|
name=name,
|
2022-09-17 12:24:08 +02:00
|
|
|
url="http://127.0.0.1"
|
|
|
|
)
|
2022-08-03 12:35:48 +02:00
|
|
|
monitor_id = r["monitorID"]
|
|
|
|
return monitor_id
|
|
|
|
|
|
|
|
def add_tag(self):
|
2022-09-17 12:24:08 +02:00
|
|
|
r = self.api.add_tag(
|
|
|
|
name="tag 1",
|
|
|
|
color="#ffffff"
|
|
|
|
)
|
2022-08-03 12:35:48 +02:00
|
|
|
tag_id = r["id"]
|
|
|
|
return tag_id
|
2022-09-06 13:41:51 +02:00
|
|
|
|
|
|
|
def add_notification(self):
|
2022-09-17 12:24:08 +02:00
|
|
|
r = self.api.add_notification(
|
|
|
|
name="notification 1",
|
|
|
|
type="PushByTechulus",
|
|
|
|
pushAPIKey="123456789"
|
|
|
|
)
|
2022-09-06 13:41:51 +02:00
|
|
|
notification_id = r["id"]
|
|
|
|
return notification_id
|
2022-09-07 13:03:10 +02:00
|
|
|
|
2022-09-17 12:24:08 +02:00
|
|
|
def add_proxy(self):
|
|
|
|
r = self.api.add_proxy(
|
|
|
|
protocol="http",
|
|
|
|
host="127.0.0.1",
|
|
|
|
port=8080,
|
|
|
|
active=True
|
|
|
|
)
|
|
|
|
proxy_id = r["id"]
|
|
|
|
return proxy_id
|
|
|
|
|
2022-09-07 13:03:10 +02:00
|
|
|
def add_docker_host(self):
|
2022-09-17 12:24:08 +02:00
|
|
|
r = self.api.add_docker_host(
|
|
|
|
name="docker host 1",
|
|
|
|
dockerType=DockerType.SOCKET
|
|
|
|
)
|
2022-09-07 13:03:10 +02:00
|
|
|
docker_host_id = r["id"]
|
|
|
|
return docker_host_id
|
2022-12-29 00:22:53 +01:00
|
|
|
|
|
|
|
def add_status_page(self, title="status page 1"):
|
|
|
|
slug = "statuspage1"
|
|
|
|
self.api.add_status_page(slug, title)
|
|
|
|
r = self.api.get_status_page(slug)
|
|
|
|
return r["id"]
|