Skip to content

Commit 505947b

Browse files
committed
src/services: Init unit-tests for kill & suite service
Signed-off-by: Kamoltat Sirivadhna <[email protected]>
1 parent 9bf2adf commit 505947b

File tree

5 files changed

+179
-1
lines changed

5 files changed

+179
-1
lines changed

Diff for: pytest.ini

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[pytest]
2+
pythonpath = src
3+
log_cli = 1
4+
log_cli_level = INFO
5+
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
6+
log_cli_date_format=%Y-%m-%d %H:%M:%S

Diff for: src/services/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def make_run_name(run_dic):
6666
str(run_dic["timestamp"]),
6767
run_dic["suite"],
6868
run_dic["ceph_branch"],
69-
run_dic["kernel_branch"] or "-",
69+
run_dic["kernel_branch"] or "distro",
7070
run_dic["flavor"],
7171
worker,
7272
]

Diff for: src/services/test_helpers.py

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from fastapi.testclient import TestClient
2+
from fastapi import HTTPException
3+
import pytest
4+
from main import app
5+
from mock import patch
6+
from services.helpers import Request, get_token, get_username
7+
8+
client = TestClient(app)
9+
10+
class MockRequest():
11+
def __init__(self, access_token="testToken123", bad=False):
12+
if bad:
13+
self.session = {}
14+
else:
15+
self.session = {
16+
"user": {
17+
"username": "user1",
18+
"access_token": access_token,
19+
}
20+
}
21+
22+
# get_token
23+
@patch('services.helpers.Request')
24+
def test_get_token_success(m_request):
25+
m_request = MockRequest()
26+
expected = {
27+
"access_token": "testToken123",
28+
"token_type": "bearer"
29+
}
30+
actual = get_token(m_request)
31+
assert expected == actual
32+
33+
@patch('services.helpers.Request')
34+
def test_get_token_fail(m_request):
35+
with pytest.raises(HTTPException) as err:
36+
m_request = MockRequest(bad=True)
37+
get_token(m_request)
38+
assert err.value.status_code == 401
39+
assert err.value.detail == 'You need to be logged in'
40+
41+
# get username
42+
@patch('services.helpers.Request')
43+
def test_get_username_success(m_request):
44+
m_request = MockRequest()
45+
expected = "user1"
46+
actual = get_username(m_request)
47+
assert expected == actual
48+
49+
@patch('services.helpers.Request')
50+
def test_get_username_fail(m_request):
51+
with pytest.raises(HTTPException) as err:
52+
m_request = MockRequest(bad=True)
53+
get_username(m_request)
54+
assert err.value.status_code == 401
55+
assert err.value.detail == 'You need to be logged in'
56+

Diff for: src/services/test_kill.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from fastapi.testclient import TestClient
2+
from main import app
3+
from mock import patch
4+
from services.helpers import get_token
5+
from services.kill import get_username, get_run_details
6+
import json
7+
from schemas.kill import KillArgs
8+
9+
client = TestClient(app)
10+
11+
async def override_get_token():
12+
return {"access_token": "token_123", "token_type": "bearer"}
13+
14+
app.dependency_overrides[get_token] = override_get_token
15+
16+
mock_kill_args = {
17+
"--dry-run": False,
18+
"--non-interactive": False,
19+
"--verbose": 1,
20+
"--help": False,
21+
"--user": "mock_user",
22+
"--owner": "user1",
23+
"--run": "mock_run",
24+
"--preserve-queue": None,
25+
"--job": None,
26+
"--jobspec": None,
27+
"--machine-type": "testnode",
28+
"--archive": None,
29+
}
30+
31+
@patch('services.kill.teuthology.kill.main')
32+
@patch('services.kill.get_run_details')
33+
@patch('services.kill.get_username')
34+
def test_kill_run_success(m_get_username, m_get_run_details, m_teuth_kill_main):
35+
m_get_username.return_value = "user1"
36+
m_get_run_details.return_value = {'id': "7451978", 'user': "user1"}
37+
m_teuth_kill_main.return_value = None
38+
response = client.post("/kill", data=json.dumps(mock_kill_args))
39+
assert response.status_code == 200
40+
assert response.json() == {"kill": "success"}
41+
42+
def test_kill_run_fail():
43+
response = client.post("/kill", data=json.dumps(mock_kill_args))
44+
assert response.status_code == 401
45+
assert response.json() == {"detail": "You need to be logged in"}

Diff for: src/services/test_suite.py

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from fastapi.testclient import TestClient
2+
from main import app
3+
from suite import *
4+
5+
"""
6+
Created a TestClient instance and define a dictionary run_dic with test data for the make_run_name function,
7+
then called the function with the test data and assert that the result matches the expected output
8+
"""
9+
10+
def test_make_run_name():
11+
client = TestClient(app)
12+
run_dic = {
13+
"user": "testuser",
14+
"timestamp": "2022-03-21_14:30:00",
15+
"suite": "rados",
16+
"ceph_branch": "ceph1",
17+
"kernel_branch": "kernel1",
18+
"flavor": "test-flavor",
19+
"machine_type": "test-machine"
20+
}
21+
expected_result = "testuser-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-test-machine"
22+
assert make_run_name(run_dic) == expected_result
23+
24+
"""
25+
Test the `make_run_name` function with an input dictionary containing a single worker machine type.
26+
"""
27+
def test_make_run_name_with_single_worker():
28+
run_dic = {
29+
"user": "test_user",
30+
"timestamp": "2022-03-21_14:30:00",
31+
"suite": "rados",
32+
"ceph_branch": "ceph1",
33+
"kernel_branch": "kernel1",
34+
"flavor": "test-flavor",
35+
"machine_type": "worker1"
36+
}
37+
expected_run_name = "test_user-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-worker1"
38+
assert make_run_name(run_dic) == expected_run_name
39+
40+
"""
41+
Test the `make_run_name` function with a multi-machine type input dictionary.
42+
"""
43+
44+
def test_make_run_name_with_multi_worker():
45+
run_dic = {
46+
"user": "test_user",
47+
"timestamp": "2022-03-21_14:30:00",
48+
"suite": "rados",
49+
"ceph_branch": "ceph1",
50+
"kernel_branch": "kernel1",
51+
"flavor": "test-flavor",
52+
"machine_type": "worker1,worker2,worker3"
53+
}
54+
expected_run_name = "test_user-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-multi"
55+
assert make_run_name(run_dic) == expected_run_name
56+
57+
"""
58+
Test the function for no kernel branch
59+
"""
60+
def test_make_run_name_with_no_kernel_branch():
61+
run_dic = {
62+
"user": "teuthology",
63+
"timestamp": "2022-03-21_14:30:00",
64+
"suite": "rados",
65+
"ceph_branch": "ceph1",
66+
"kernel_branch": None,
67+
"flavor": "test-flavor",
68+
"machine_type": "test-machine"
69+
}
70+
expected_run_name = "teuthology-2022-03-21_14:30:00-rados-ceph1-distro-test-flavor-test-machine"
71+
assert make_run_name(run_dic) == expected_run_name

0 commit comments

Comments
 (0)