Skip to content

Commit 3c79dc6

Browse files
tests
1 parent 9ff6c16 commit 3c79dc6

File tree

3 files changed

+105
-36
lines changed

3 files changed

+105
-36
lines changed

cads_broker/database.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -480,10 +480,10 @@ def decrement_qos_rule_running(rules: list, session: sa.orm.Session):
480480

481481

482482
def delete_request_qos_status(
483-
request: SystemRequest, rules: list, session: sa.orm.Session
483+
request_uid: str, rules: list, session: sa.orm.Session
484484
):
485485
"""Delete all QoS rules from a request."""
486-
request = get_request(request.request_uid, session)
486+
request = get_request(request_uid, session)
487487
for rule in rules:
488488
try:
489489
qos_rule = get_qos_rule(str(rule.__hash__()), session)
@@ -497,9 +497,9 @@ def delete_request_qos_status(
497497

498498

499499
def add_request_qos_status(
500-
request: SystemRequest, rules: list, session: sa.orm.Session
500+
request_uid: str, rules: list, session: sa.orm.Session
501501
):
502-
request = get_request(request.request_uid, session)
502+
request = get_request(request_uid, session)
503503
for rule in rules:
504504
try:
505505
qos_rule = get_qos_rule(str(rule.__hash__()), session)

cads_broker/qos/QoS.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def can_run(self, request, session, scheduler):
107107
1,
108108
database.add_request_qos_status,
109109
kwargs={
110-
"request": request,
110+
"request_uid": request.request_uid,
111111
"rules": limits,
112112
"session": session,
113113
},
@@ -310,7 +310,7 @@ def notify_start_of_request(self, request, session, scheduler):
310310
database.delete_request_qos_status,
311311
kwargs={
312312
"rules": limits_list,
313-
"request": request,
313+
"request_uid": request.request_uid,
314314
"session": session,
315315
},
316316
)

tests/test_02_database.py

+99-30
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,14 @@
1414

1515

1616
class MockRule:
17-
def __init__(self, name, uid, conclusion, info, condition):
17+
def __init__(self, name, conclusion, info, condition):
1818
self.name = name
19-
self.uid = uid
2019
self.conclusion = conclusion
2120
self.info = info
2221
self.condition = condition
2322

24-
def get_uid(self, request):
25-
return self.uid
26-
2723
def evaluate(self, request):
28-
return self.uid
24+
return 10
2925

3026

3127
def mock_config(hash: str = "", config: dict[str, Any] = {}, form: dict[str, Any] = {}):
@@ -512,39 +508,112 @@ def test_count_running_users(session_obj: sa.orm.sessionmaker) -> None:
512508
)
513509

514510

515-
def test_set_request_qos_rule(session_obj: sa.orm.sessionmaker) -> None:
511+
def test_add_qos_rule(session_obj: sa.orm.sessionmaker) -> None:
512+
rule = MockRule("rule_name", "conclusion", "info", "condition")
513+
with session_obj() as session:
514+
db.add_qos_rule(rule, session=session)
515+
with session_obj() as session:
516+
assert db.get_qos_rule(str(rule.__hash__()), session=session).name == rule.name
517+
518+
519+
def test_increment_qos_rule_running(session_obj: sa.orm.sessionmaker) -> None:
520+
rule1 = MockRule("name1", "conclusion1", "info1", "condition1")
521+
rule2 = MockRule("name2", "conclusion2", "info2", "condition2")
522+
with session_obj() as session:
523+
db.add_qos_rule(rule1, session=session)
524+
with session_obj() as session:
525+
db.increment_qos_rule_running([rule1, rule2], session=session)
526+
with session_obj() as session:
527+
assert db.get_qos_rule(str(rule1.__hash__()), session=session).running == 1
528+
assert db.get_qos_rule(str(rule2.__hash__()), session=session).running == 1
529+
530+
531+
def test_add_request_qos_status(session_obj: sa.orm.sessionmaker) -> None:
532+
rule1 = MockRule("name1", "conclusion1", "info1", "condition1")
533+
rule2 = MockRule("name2", "conclusion2", "info2", "condition2")
516534
adaptor_properties = mock_config()
517-
request = mock_system_request(
518-
status="accepted", adaptor_properties_hash=adaptor_properties.hash
519-
)
535+
request = mock_system_request(adaptor_properties_hash=adaptor_properties.hash)
520536
request_uid = request.request_uid
521-
rule_name = "limit"
522-
limit_1 = MockRule(
523-
name=rule_name,
524-
uid="1",
525-
condition="condition",
526-
conclusion="condition",
527-
info="info",
528-
)
529-
limit_2 = MockRule(
530-
name=rule_name,
531-
uid="2",
532-
condition="condition",
533-
conclusion="condition",
534-
info="info",
535-
)
536537
with session_obj() as session:
538+
db.add_qos_rule(rule1, queued=5, session=session)
537539
session.add(adaptor_properties)
538540
session.add(request)
539541
session.commit()
540-
db.add_request_qos_rule(request=request, rule=limit_1, session=session)
541-
db.add_request_qos_rule(request=request, rule=limit_2, session=session)
542+
with session_obj() as session:
543+
db.add_request_qos_status(request_uid, [rule1, rule2], session=session)
544+
with session_obj() as session:
545+
request = db.get_request(request_uid, session=session)
546+
assert db.get_qos_status_from_request(request) == {
547+
"name1": [{"info": "info1", "queued": 5 + 1, "running": 0}],
548+
"name2": [{"info": "info2", "queued": 1, "running": 0}],
549+
}
550+
551+
552+
def test_delete_request_qos_status(session_obj: sa.orm.sessionmaker) -> None:
553+
rule1 = MockRule("name1", "conclusion1", "info1", "condition1")
554+
rule2 = MockRule("name2", "conclusion2", "info2", "condition2")
555+
adaptor_properties = mock_config()
556+
request = mock_system_request(adaptor_properties_hash=adaptor_properties.hash)
557+
request_uid = request.request_uid
558+
rule1_queued = 5
559+
rule1_running = 2
560+
rule2_queued = 3
561+
rule2_running = 4
562+
with session_obj() as session:
563+
db.add_qos_rule(rule1, queued=rule1_queued, running=rule1_running, session=session)
564+
db.add_qos_rule(rule2, queued=rule2_queued, running=rule2_running, session=session)
565+
session.add(adaptor_properties)
566+
session.add(request)
542567
session.commit()
543568
with session_obj() as session:
544-
request = db.get_request(request_uid=request_uid, session=session)
545-
assert "1" in request.qos_status.get(rule_name, [])
546-
assert "2" in request.qos_status.get(rule_name, [])
569+
db.add_request_qos_status(request_uid, [rule1, rule2], session=session)
570+
with session_obj() as session:
571+
db.delete_request_qos_status(request_uid, [rule1, rule2], session=session)
572+
with session_obj() as session:
573+
rule1 = db.get_qos_rule(str(rule1.__hash__()), session=session)
574+
rule2 = db.get_qos_rule(str(rule2.__hash__()), session=session)
575+
assert rule1.queued == rule1_queued
576+
assert rule1.running == rule1_running + 1
577+
assert rule2.queued == rule2_queued
578+
assert rule2.running == rule2_running + 1
579+
580+
581+
def test_decrement_qos_rule_running(session_obj: sa.orm.sessionmaker) -> None:
582+
rule1 = MockRule("name1", "conclusion1", "info1", "condition1")
583+
rule2 = MockRule("name2", "conclusion2", "info2", "condition2")
584+
rule1_queued = 5
585+
rule1_running = 2
586+
rule2_queued = 3
587+
rule2_running = 4
588+
with session_obj() as session:
589+
db.add_qos_rule(rule1, queued=rule1_queued, running=rule1_running, session=session)
590+
db.add_qos_rule(rule2, queued=rule2_queued, running=rule2_running, session=session)
591+
with session_obj() as session:
592+
db.decrement_qos_rule_running([rule1, rule2], session=session)
593+
594+
with session_obj() as session:
595+
assert db.get_qos_rule(str(rule1.__hash__()), session=session).running == rule1_running - 1
596+
assert db.get_qos_rule(str(rule2.__hash__()), session=session).running == rule2_running - 1
597+
547598

599+
def test_reset_qos_rules(session_obj: sa.orm.sessionmaker) -> None:
600+
rule1 = MockRule("name1", "conclusion1", "info1", "condition1")
601+
rule2 = MockRule("name2", "conclusion2", "info2", "condition2")
602+
adaptor_properties = mock_config()
603+
request = mock_system_request(adaptor_properties_hash=adaptor_properties.hash)
604+
request_uid = request.request_uid
605+
with session_obj() as session:
606+
db.add_qos_rule(rule1, session=session)
607+
db.add_qos_rule(rule2, session=session)
608+
session.add(adaptor_properties)
609+
session.add(request)
610+
session.commit()
611+
with session_obj() as session:
612+
db.add_request_qos_status(request_uid, [rule1, rule2], session=session)
613+
db.reset_qos_rules(session=session)
614+
request = db.get_request(request_uid, session=session)
615+
assert db.get_qos_status_from_request(request) == {}
616+
548617

549618
def test_get_events_from_request(session_obj: sa.orm.sessionmaker) -> None:
550619
adaptor_properties = mock_config()

0 commit comments

Comments
 (0)