|
14 | 14 |
|
15 | 15 |
|
16 | 16 | class MockRule:
|
17 |
| - def __init__(self, name, uid, conclusion, info, condition): |
| 17 | + def __init__(self, name, conclusion, info, condition): |
18 | 18 | self.name = name
|
19 |
| - self.uid = uid |
20 | 19 | self.conclusion = conclusion
|
21 | 20 | self.info = info
|
22 | 21 | self.condition = condition
|
23 | 22 |
|
24 |
| - def get_uid(self, request): |
25 |
| - return self.uid |
26 |
| - |
27 | 23 | def evaluate(self, request):
|
28 |
| - return self.uid |
| 24 | + return 10 |
29 | 25 |
|
30 | 26 |
|
31 | 27 | 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:
|
512 | 508 | )
|
513 | 509 |
|
514 | 510 |
|
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") |
516 | 534 | 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) |
520 | 536 | 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 |
| - ) |
536 | 537 | with session_obj() as session:
|
| 538 | + db.add_qos_rule(rule1, queued=5, session=session) |
537 | 539 | session.add(adaptor_properties)
|
538 | 540 | session.add(request)
|
539 | 541 | 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) |
542 | 567 | session.commit()
|
543 | 568 | 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 | + |
547 | 598 |
|
| 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 | + |
548 | 617 |
|
549 | 618 | def test_get_events_from_request(session_obj: sa.orm.sessionmaker) -> None:
|
550 | 619 | adaptor_properties = mock_config()
|
|
0 commit comments