Skip to content

Commit

Permalink
src/services: Init unit-tests for kill & suite service
Browse files Browse the repository at this point in the history
Signed-off-by: Kamoltat Sirivadhna <ksirivad@redhat.com>
  • Loading branch information
kamoltat committed Nov 15, 2023
1 parent 9bf2adf commit 505947b
Show file tree
Hide file tree
Showing 5 changed files with 179 additions and 1 deletion.
6 changes: 6 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[pytest]
pythonpath = src
log_cli = 1
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S
2 changes: 1 addition & 1 deletion src/services/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def make_run_name(run_dic):
str(run_dic["timestamp"]),
run_dic["suite"],
run_dic["ceph_branch"],
run_dic["kernel_branch"] or "-",
run_dic["kernel_branch"] or "distro",
run_dic["flavor"],
worker,
]
Expand Down
56 changes: 56 additions & 0 deletions src/services/test_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from fastapi.testclient import TestClient
from fastapi import HTTPException
import pytest
from main import app
from mock import patch
from services.helpers import Request, get_token, get_username

client = TestClient(app)

class MockRequest():
def __init__(self, access_token="testToken123", bad=False):
if bad:
self.session = {}
else:
self.session = {
"user": {
"username": "user1",
"access_token": access_token,
}
}

# get_token
@patch('services.helpers.Request')
def test_get_token_success(m_request):
m_request = MockRequest()
expected = {
"access_token": "testToken123",
"token_type": "bearer"
}
actual = get_token(m_request)
assert expected == actual

@patch('services.helpers.Request')
def test_get_token_fail(m_request):
with pytest.raises(HTTPException) as err:
m_request = MockRequest(bad=True)
get_token(m_request)
assert err.value.status_code == 401
assert err.value.detail == 'You need to be logged in'

# get username
@patch('services.helpers.Request')
def test_get_username_success(m_request):
m_request = MockRequest()
expected = "user1"
actual = get_username(m_request)
assert expected == actual

@patch('services.helpers.Request')
def test_get_username_fail(m_request):
with pytest.raises(HTTPException) as err:
m_request = MockRequest(bad=True)
get_username(m_request)
assert err.value.status_code == 401
assert err.value.detail == 'You need to be logged in'

45 changes: 45 additions & 0 deletions src/services/test_kill.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from fastapi.testclient import TestClient
from main import app
from mock import patch
from services.helpers import get_token
from services.kill import get_username, get_run_details
import json
from schemas.kill import KillArgs

client = TestClient(app)

async def override_get_token():
return {"access_token": "token_123", "token_type": "bearer"}

app.dependency_overrides[get_token] = override_get_token

mock_kill_args = {
"--dry-run": False,
"--non-interactive": False,
"--verbose": 1,
"--help": False,
"--user": "mock_user",
"--owner": "user1",
"--run": "mock_run",
"--preserve-queue": None,
"--job": None,
"--jobspec": None,
"--machine-type": "testnode",
"--archive": None,
}

@patch('services.kill.teuthology.kill.main')
@patch('services.kill.get_run_details')
@patch('services.kill.get_username')
def test_kill_run_success(m_get_username, m_get_run_details, m_teuth_kill_main):
m_get_username.return_value = "user1"
m_get_run_details.return_value = {'id': "7451978", 'user': "user1"}
m_teuth_kill_main.return_value = None
response = client.post("/kill", data=json.dumps(mock_kill_args))
assert response.status_code == 200
assert response.json() == {"kill": "success"}

def test_kill_run_fail():
response = client.post("/kill", data=json.dumps(mock_kill_args))
assert response.status_code == 401
assert response.json() == {"detail": "You need to be logged in"}
71 changes: 71 additions & 0 deletions src/services/test_suite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
from fastapi.testclient import TestClient
from main import app
from suite import *

"""
Created a TestClient instance and define a dictionary run_dic with test data for the make_run_name function,
then called the function with the test data and assert that the result matches the expected output
"""

def test_make_run_name():
client = TestClient(app)
run_dic = {
"user": "testuser",
"timestamp": "2022-03-21_14:30:00",
"suite": "rados",
"ceph_branch": "ceph1",
"kernel_branch": "kernel1",
"flavor": "test-flavor",
"machine_type": "test-machine"
}
expected_result = "testuser-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-test-machine"
assert make_run_name(run_dic) == expected_result

"""
Test the `make_run_name` function with an input dictionary containing a single worker machine type.
"""
def test_make_run_name_with_single_worker():
run_dic = {
"user": "test_user",
"timestamp": "2022-03-21_14:30:00",
"suite": "rados",
"ceph_branch": "ceph1",
"kernel_branch": "kernel1",
"flavor": "test-flavor",
"machine_type": "worker1"
}
expected_run_name = "test_user-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-worker1"
assert make_run_name(run_dic) == expected_run_name

"""
Test the `make_run_name` function with a multi-machine type input dictionary.
"""

def test_make_run_name_with_multi_worker():
run_dic = {
"user": "test_user",
"timestamp": "2022-03-21_14:30:00",
"suite": "rados",
"ceph_branch": "ceph1",
"kernel_branch": "kernel1",
"flavor": "test-flavor",
"machine_type": "worker1,worker2,worker3"
}
expected_run_name = "test_user-2022-03-21_14:30:00-rados-ceph1-kernel1-test-flavor-multi"
assert make_run_name(run_dic) == expected_run_name

"""
Test the function for no kernel branch
"""
def test_make_run_name_with_no_kernel_branch():
run_dic = {
"user": "teuthology",
"timestamp": "2022-03-21_14:30:00",
"suite": "rados",
"ceph_branch": "ceph1",
"kernel_branch": None,
"flavor": "test-flavor",
"machine_type": "test-machine"
}
expected_run_name = "teuthology-2022-03-21_14:30:00-rados-ceph1-distro-test-flavor-test-machine"
assert make_run_name(run_dic) == expected_run_name

0 comments on commit 505947b

Please sign in to comment.